参考官网: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
仓库如下图: