运行一个本地的registry镜像
为什么要在本地运行一个registry?如果你有多个Docker在你的环境中运行时(如:多个运行着Docker守护进程的物理主机或虚拟机),需要用到一个本地不存在的镜像时,都需要互联网连接到公共的Docker registry上拉取。通过在本地运行一个registry的镜像,能保证你大多数的镜像拉取都在本地进行。它运行原理?当你第一次向你本地registry请求一个镜像时,
为什么要在本地运行一个registry?
如果你有多个Docker在你的环境中运行时(如:多个运行着Docker守护进程的物理主机或虚拟机),需要用到一个本地不存在的镜像时,都需要互联网连接到公共的Docker registry上拉取。通过在本地运行一个registry的镜像,能保证你大多数的镜像拉取都在本地进行。
它运行原理?
当你第一次向你本地registry请求一个镜像时,它先把镜像从公共的registry中拉取到并保存到本地的registry中,接着放回给你。在以后的请求中,直接冲本地的registry中拉取镜像,避免每次都要向公共registry请求。
如何创建一个本地registry镜像?
只需要两个步骤就可以:
步骤 1: 设置你的Docker守护经常连接到本地的registry
你需要在Docker守护进程启动的时候,传递一个 --registry-mirror
参数:
docker --registry-mirror=http://<my-docker-mirror-host> -d
例如,你的registry服务地址是 http://10.0.0.2:5000
, 执行如下命令:
docker --registry-mirror=http://10.0.0.2:5000 -d
注意: 根据你的本地主机设置,你可以修改/etc/default/docker
文件中的 DOCKER_OPTS
变量,在其后面追加一个 --registry-mirror
参数。
步骤 2: 运行本地registry
你需要启动一个本地registry服务。例如,运行一个registry监听5000端口,镜像关联到 registry-1.docker.io
docker run -p 5000:5000 \
-e STANDALONE=false \
-e MIRROR_SOURCE=https://registry-1.docker.io \
-e MIRROR_SOURCE_INDEX=https://index.docker.io \
registry
测试
启动服务后,用pull命令想registry拉取一个没有的镜像(使用 time
统计耗时):
$ time docker pull node:latest
Pulling repository node
[...]
real 1m14.078s
user 0m0.176s
sys 0m0.120s
现在,删除刚刚拉取的本地镜像:
$ docker rmi node:latest
接着,重新发起拉取请求:
$ time docker pull node:latest
Pulling repository node
[...]
real 0m51.376s
user 0m0.120s
sys 0m0.116s
对比可以看到,第二次拉取的速度大幅度的提升。经过第一次的远程拉取同步到本地registry后,避免了远程拉取的等待时间。
更多推荐
所有评论(0)