在国内由于种种原因, 有些 Docker 镜像直接是获取不到的, 特别是 k8s 中的一些镜像. 本人在部署 k8s 中的 helm 组件时需要获取 tiller 镜像, 如果直接用如下命令:
docker pull gcr.io/kubernetes-helm/tiller:v2.12.1
会由于网络原因连接不上从而导致获取镜像失败.
经查相关资料, 可以有一种 "曲线求国" 的方案, 在此通过实现巧妙获取被墙的 tiller 镜像方法分享给大家.
1, 前期准备
这种 "曲线求国" 的方案, 首先要准备 2 个网站的账号:
GitHub, 需要有一个 GitHub 账号, 如果没有的, 可以到官网 https://github.com 上注册 (对于程序员来说, 这个是 GitHub 必备的)
Docker Hub, 需要有一个 Docker Hub 账号, 如果没有的, 可以到官网 https://hub.docker.com 上注册 (对于学 Docker 的, 这个 Docker Hub 也是必备的)
2, 自定义 Dockerfile
通过定义 Dockerfile 可以构建出镜像, 为此首先先自定义一个 tiller 的镜像的 Dockerfile 文件, 即:
- FROM gcr.io/kubernetes-helm/tiller:v2.12.1
- MAINTAINER 1256122943@qq.com
通过上面的 Dockerfile 内容可以发现只是以 gcr.io/kubernetes-helm/tiller:v2.12.1 为基础镜像, 没有加其它实质的东西, 这样保证了自定义 Dockerfile 构建的镜像跟原来的 tiller 镜像是一样的.
定义好该 Dockerfile 文件, 在本机上构建是不行的, 因为在本机上是获取不到基础镜像 gcr.io/kubernetes-helm/tiller:v2.12.1. 此时就得利用 GitHub 了, 即在 GitHub 上创建一个 repository, 比如名称就叫 gcr.io_mirror. 然后将 Dockerfile 文件上传到该 repository 中, 即:
在我本人的 GitHub 是将 Dockerfile 放到 gcr.io_mirror/kubernetes-helm/tiller/v2.12.1 中多了几个目录是为了方便管理.
3, 构建镜像
现在 Dockerfile 文件已经在 GitHub 中, 那么现在就可以通过 Docker Hub 来构建镜像了, 首先在 Docker Hub 中创建 repository, 即:
名称可以写 tiller; 描述内容可以随便写一下, 例如 tiller:v2.12.1; 要选择是公开的即是 Public; 最重要的就行要选择通过连接 GitHub 来获取需要构建的源码, 即点击 "Connected", 然后要你填写 GitHub 的相关信息 (如果是第一次关联), 然后选择 GitHub 中需要构建的库, 即选择刚刚在 GitHub 创建的 gcr.io_mirror:
注意此处的 Dockerfile location 这个要填 Dcokerfile 所在的路径, 在此处得填写为:
kubernetes-helm/tiller/v2.12.1/Dockerfile
这个的路径具体就是这个 Dockerfile 文件在 GitHub 的库中路径了.
这些信息填写好后, 就可以点击 "Create & Build" 按钮了, 这个构建的过程可能需要几分钟.
4, 利用镜像
镜像在 Docker Hub 中构建好后, 就可以在本机上获取我们自定义构建的 tiller 镜像了, 即在本机上输入命令:
docker pull lzj09/tiller:v2.12.1
这样就样把自定义 tiller 镜像获取到了, 但是为了在使用中更加方便, 可以为该镜像打一下 tag, 即:
docker tag lzj09/tiller:v2.12.1 gcr.io/kubernetes-helm/tiller:v2.12.1
那么我们就通过这种 "曲线求国" 的方式获取到了 gcr.io/kubernetes-helm/tiller:v2.12.1 镜像了.
关注我
以你最方便的方式关注我:
微信公众号:
来源: https://www.cnblogs.com/atcloud/p/10577759.html