合 Docker分别使用Registry和Harbor搭建私有仓库
Tags: LinuxDocker企业HarborRegistry私有仓库镜像仓库
一、简介
在 Docker 中,当我们执行 docker pull xxx 的时候 ,它实际上是从 registry.hub.docker.com 这个地址去查找,这就是Docker公司为我们提供的公共仓库。在工作中,我们不可能把企业项目push到公有仓库进行管理。所以为了更好的管理镜像,Docker不仅提供了一个中央仓库,同时也允许我们搭建本地私有仓库。
Harbor和Registry的比较
Harbor和Registry都是Docker的镜像仓库,但是Harbor作为更多企业的选择,是因为相比较于Regisrty来说,它具有很多的优势。
1.提供分层传输机制,优化网络传输
Docker镜像是是分层的,而如果每次传输都使用全量文件(所以用FTP的方式并不适合),显然不经济。必须提供识别分层传输的机制,以层的UUID为标识,确定传输的对象。
2.提供WEB界面,优化用户体验
只用镜像的名字来进行上传下载显然很不方便,需要有一个用户界面可以支持登陆、搜索功能,包括区分公有、私有镜像。
3.支持水平扩展集群
当有用户对镜像的上传下载操作集中在某服务器,需要对相应的访问压力作分解。
4.良好的安全机制
企业中的开发团队有很多不同的职位,对于不同的职位人员,分配不同的权限,具有更好的安全性。
5.Harbor提供了基于角色的访问控制机制,并通过项目来对镜像进行组织和访问权限的控制。kubernetes中通过namespace来对资源进行隔离,在企业级应用场景中,通过将两者进行结合可以有效将kubernetes使用的镜像资源进行管理和访问控制,增强镜像使用的安全性。尤其是在多租户场景下,可以通过租户、namespace和项目相结合的方式来实现对多租户镜像资源的管理和访问控制。
二、registry 的搭建
搭建
Docker 官方提供了一个搭建私有仓库的镜像 registry ,只需把镜像下载下来,运行容器并暴露5000端口,就可以使用了。
官网:https://hub.docker.com/_/registry?tab=tags&page=1&ordering=last_updated
1 2 3 4 5 6 7 8 9 10 11 | -- 镜像仓库 docker pull registry:latest docker run -itd -v /opt/registry:/var/lib/registry -p 5000:5000 --name myregistry registry:latest -- UI界面 docker pull hyper/docker-registry-web:latest # 启动容器 --link myRegistry 是我以前安装的 Registry docker rm -f registry-web docker run -itd -p 5001:8080 --name registry-web --restart=always --link myregistry \ -e registry_url=http://172.18.0.14:5000/v2 -e registry_name=172.18.0.14:5000 hyper/docker-registry-web:latest |
Registry服务默认会将上传的镜像保存在容器的/var/lib/registry,我们将主机的/opt/registry目录挂载到该目录,即可实现将镜像保存到主机的/opt/registry目录了。
浏览器访问http://127.0.0.1:5000/v2,出现下面情况说明registry运行正常。
UI管理:
验证
现在通过push镜像到registry来验证一下。
查看本地镜像:
1 2 3 4 5 | $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest 568c4670fa80 5 weeks ago 109MB ubuntu latest 93fd78260bd1 7 weeks ago 86.2MB elasticsearch 6.5.1 32f93c89076d 7 weeks ago 773MB |
要通过docker tag将该镜像标志为要推送到私有仓库:
1 | docker tag nginx:latest localhost:5000/nginx:latest |
通过 docker push 命令将 nginx 镜像 push到私有仓库中:
1 | docker push localhost:5000/nginx:latest |
访问 http://127.0.0.1:5000/v2/_catalog 查看私有仓库目录,可以看到刚上传的镜像了:
或者命令:
1 2 | curl http://172.18.0.14:5000/v2/_catalog curl http://172.18.0.14:5000/v2/lhrcentos76/tags/list |