道理很简单,我们在使用Docker的时候,经常需要使用到docker pull命令从docker hub拉取我们需要的镜像,进行操作。这样其实有利也有弊,docker hub是官方维护的公用仓库,也是最大、最全的docker镜像仓库。每个人有一个docker hub的账号即可将自己的上传到docker hub上,方便随时拉取使用。但是docker hub有个弊端就是受网络带宽影响,有时候下载速度稍微有些不好。docker官方呢,在docker hub上提供了一个registry镜像,我们使用这个镜像就可以搭建一个私有的注册服务器。我们可以通过把常用的镜像都放到私有的registry上,这样就避免了经常去docker hub上拉取的操作,效率可以得到一定的提高。当然实际工作,我们不一定需要,因为docker hub可以提供我们大部分的需求。

5.PNG

环境:docker001上搭建registry、docker002当做测试客户端。

使用docker001搭建registry

docker pull registry#拉取registry镜像
docker run -d -p 5000:5000 --restart=always -v /opt/registry:/var/lib/registry registry
#启动一个registry容器,-d守护态运行、
-p将docker的5000断开和registry的5000端口进行映射、
自启动、
指定registry的/var/lib/registry/目录映射docker001的/opt/registry/目录(相当于挂载)
firewall-cmd --add-port=5000/tcp --permanent#开放docker001的5000端口
firewall-cmd --reload

image.png

下图是验证方法

image.png

在启动registry时我们加了参数-v /opt/registry:/var/lib/registry,这里就是下面要验证的地方。

docker002上测试

dockers registry V2 版本客户端默认使用https协议去push镜像到仓库服务 器,而现在我们的仓库服务器只配置了支持http,所以客户端会push镜像失败。如要希望docker客户端支持http协议,需在启动docker时加入参数--insecure-registry your_registry_ip:port 。直接编辑/usr/lib/systemd/system/docker.service文件修改即可,如下。

image.png

然后重新加载daemon、重启docker。

systemctl daemon-reload
systemctl restart docker.service

首先先打上标签,否则docker会默认将镜像上传到docker hub上。

image.png

执行push命令将docker002本地的镜像上传到docker001上的registry。

image.png

回到docker001,我们进入到/opt/registry,查看是否成功上传(目录层级很多,一层一层往下找就可以看到了)

image.png

既然能上传,那么相应的,拉取操作也应当可以。

首先我在registry上传了一个镜像registry:001

image.png

在docker002上

使用pull命令拉取镜像

image.png

这样我们搭建私有registry的工作就完成,在企业内部搭建一个私有的registry,这样各部门员工使用镜像就方便多了。也有利于公司数据、研发成果的保密。