最近在编写Kubernetes demo的时候,遇到了一个问题:当相同的Pod部署到不同的Node上时,每个Node都得下载Pod中指定的镜像文件。
由于“墙”等原因,很多镜像文件的下载速度都很慢且连接不稳定,所以搭建自己的Docker Registry,在Docker Registry所在的宿主机上下载所需的镜像文件,Pod指定到自己的Docker Registry获得镜像文件。
安装Registry
从Docker容器安装Registry非常简单,指令如下:
# sudo docker pull registry
# sudo docker run --name myRegistry --restart=always -d -p 5000:5000 registry
加上–restart=always设置镜像仓库容器的重启策略,每次重启宿主机,也会重启docker registry。
如果之前忘记设置镜像仓库容器的重启策略,可以通过docker update指令更新重启策略,我的镜像仓库容器ID前四位为4a75,所以指令如下
docker update --restart=always 4a75
该命令将启动一个运行registry应用的容器,命名为myRegistry,并绑定到本地宿主机5000端口上。
使用指令查看registry的运行状态。
# docker ps -f name=myRegistry
测试Docker Registry
我的Docker Registry运行在192.168.121.143上。
下面测试能否把192.168.121.144上的image上传到自己的Docker Registry上。
在192.168.121.144上查看已有的镜像文件。
以docker.io/kubeguide/redis-master为例。
其IMAGE ID 为405a0b586f7e。使用自己的Registry给该镜像打上标签。
为了指定自己的Registry目的地址,需要在镜像名前加上主机名和端口前缀。
# sudo docker tag 405a 192.168.121.143:5000/docker.io