参考官网:https://docs.docker.com/docker-hub/
背景:
kubernetes需要用到gcr中的镜像,而国内因为网络问题无法从gcr拉取镜像。
原理:
无法从国内拉取gcr镜像,那就找一个既能拉取gcr镜像,又能被国内访问到的地方,从那里去拉gcr镜像。类似于代理,而docker hub是一个现成的从国内不需要代理就能访问,也能拉取gcr镜像的地方。
因为docker hub提供了auto build的功能,可以与一个代码仓库绑定,通过向代码仓库提交Dockerfile自动触发docker hub的build镜像操作。
因此只需要在Dockerfile中写一行FROM gcr.io/google_containers/...并提交的代码库即可。
1 创建 github repository
- 在
github上创建一个repo作为代码库存放Dockerfile; - 在这个
repo中创建一个文件夹kube-proxy-amd64,用于存放kube-proxy-amd64镜像的Dockerfile; - 同理,创建其它文件夹用于存放其它镜像的
Dockerfile。
这只是我个人的管理方案,可自行采用其它更合适的方案。
2 创建 docker hub repository
用于存放docker镜像。
需要先注册docker账号,官网地址:https://hub.docker.com/signup。
- 创建一个名叫
kube-proxy-amd64的repo,repo名称将会是镜像名称; - 切到
Builds页签下绑定到github,配置auto build,如图:

- 填写
auto build配置,如图:

- 配置完,
save即可,然后到github提交代码触发自动构建; - 同理,创建其它
repo,存放其它镜像,指向同一个github仓库即可。
TIPS
- 一个
repo只能放一种镜像,可以有不同tag,如:push username/nginx:1.14,username/kube-proxy-amd64:1.7两个镜像会在docker hub的username用户下产生nginx和kube-proxy-amd64两个repo;而push username/folder/nginx:1.14,加一个folder段会push失败。 - 自动构建规则可使用正则匹配,示例:

Source Type选Tag,意思是通过代码库的tag来触发构建;Source填/^kube-apiserver-amd64-v([0-9.]+)$/,意思是通过名为kube-apiserver-amd64-v[版本号]的tag来触发构建;Docker Tag填{1},意思是读取Source项正则表达式的匹配到的第一个参数作为镜像tag;Dockerfile location使用默认的Dockerfile,是docker build命令的Dockerfile文件名;Build Context填/kube-apiserver-amd64/,意思是使用代码库/kube-apiserver-amd64目录作为docker build命令的context目录;Autobuild勾上规则就会生效。- 以上规则的效果是:当我们向代码库
push一个名为kube-apiserver-amd64-v1.14.0的tag时,会触发当前auto build,使用这个tag的代码/kube-apiserver-amd64目录作为context执行docker build命令,build完成的镜像会push到当前docker hub repo,并打一个1.14.0的tag。
auto build功能以前可能要手动到github上设置webhook,当前已经可以全部自动完成。
3 最终效果
github仓库如下图:

docker hub仓库如下图:

版权声明:本文为weixin_42536863原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。