为什么要在本地运行一个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后,避免了远程拉取的等待时间。

 
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐