一、前言
当我们制作好了自己的镜像后,为了在其他服务器上可以使用该镜像,我们需要把镜像推送(push)到仓库(Repository),然后在其他服务器上拉取(pull)该镜像。仓库有分公共仓库和私有仓库,如果要在公司中使用Docker,基本上我们不太可能会把商业项目的镜像上传到公共仓库中,所以私有仓库也就有了用武之地,它能避免商业项目暴露出去的风险。
提供仓库服务主要有3种方式:
- Docker Hub - Docker官方维护的一个仓库,默认只提供公开仓库,私人仓库是收费模式,最低是7美元/月提供5个私人仓库
- Registry镜像 - Docker官方镜像,此镜像包含了Docker Registry HTTP API V2的实现,适用于Docker 1.6及1.6以上版本
- Harbor - VMware公司开源的企业级Registry项目
二、Register镜像
通过Register镜像来搭建私人仓库,使用了2台服务器来演示,一台作为仓库,一台作为客户端
2.1 在192.168.6.92服务器
拉取镜像
docker pull registry
运行容器
docker run -p 80:5000 -itd --name hub registry
2.2 在192.168.6.91服务器
由于在192.168.6.92服务器运行的不是HTTPS协议,push镜像给92服务器时会出现如下提示:
Get https://192.168.6.92:80/v2/: http: server gave HTTP response to HTTPS client
所以需要修改91服务器的/lib/systemd/system/docker.service文件,增加启动参数--insecure-registry=192.168.6.92:80
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
改为
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry=192.168.6.92:80
然后重启Docker服务
systemctl daemon-reload
systemctl restart docker
现在将《Docker篇 (一) 制作镜像-Tomcat开启APR模式》文章中创建的镜像推送到服务器
#格式 <registry_ip>:<registry_port>/<image_name>:<image_tag>
docker tag anron 192.168.6.92:80/anron:v1.0
docker push 192.168.6.92:80/anron:v1.0
查看镜像是否推送成功
[root@docker1 imagebuilder]# curl http://192.168.6.92:80/v2/_catalog
{"repositories":["anron"]}
[root@docker1 imagebuilder]# curl http://192.168.6.92:80/v2/anron/tags/list
{"name":"anron","tags":["v1.0"]}
推送成功后在其他服务器通过下面的命令就可以拉取镜像了
docker pull 192.168.6.92:80/anron:v1.0
三、Harbor
Harbor是一个用于存储和分发Docker镜像的企业级Registry服务,是VMware公司开源的企业级Registry项目,基于Docker Registry开发的,它除了提供友好的Web管理界面、角色和用户权限管理、用户操作审计、多个Registry节点的镜像复制等功能外,它还可以整合K8s的插件(管理大量的服务器时,手动在每台服务器上去输入命令管理大量的容器是不现实的,K8s提供了更高级更灵活的管理方式)。