前言
上一篇文章我们已经使用过公有仓库,现在我们学习一下如何搭建私有仓库。
私有仓库:顾名思义是私人使用或者公司内部使用的仓库。
搭建私有仓库可选择多种方案,常用的有两种repertory和harbor。
repertory是官方推荐使用的,没有可视化界面纯命令行管理。
harbor是VMware推出的,性能强悍,可视化界面操作方便。
一、搭建本地私有仓库(repertory)
1.docker push http 问题:
docker registry使用的是https传输协议,所以使用docker pull命令下载远程镜像时,docker registry没有使用https协议传输命令的时候就会报错误。
2.解决docker push http 问题:
根据自己的实际主机名添加 --insecure-registry 192.168.1.110:5000
[root@cgsl ~]# vi/etc/sysconfig/docker
OPTIONS='--selinux-enabled --insecure-registry 192.168.1.110:5000'
3.下载registry 镜像并且启动registry 容器
[root@cgsl ~]# docker run -d -p 5000:5000 --name registry --restart=on-failure:5 -v /opt/data/registry:/tmp/registry registry
4.创建成功了之后我们可以使用命令查看registry仓库里的镜像
注意:防火墙如果没有开启5000端口,肯定是无法查看的,查看为空是正常的,还没上传镜像到仓库了
[root@cgsl ~]# curl -X GET http://192.168.1.110:5000/v2/_catalog
5.上传镜像到registry仓库
首先修改镜像名
[root@cgsl ~]# docker tag centos 192.168.1.110:5000/centos
然后上传
[root@cgsl ~]# docker push 192.168.1.110:5000/centos
6.验证
[root@cgsl ~]# curl -X GET http://192.168.1.110:5000/v2/_catalog
7.删除仓库中的镜像
这个着重说一下,docker官方不建议直接删除镜像的层数据,所以没有接口直接删除镜像,删除镜像会很麻烦,一般如果需要删除某镜像我们只删除该镜像的元数据,也就是curl -X GET http://192.168.1.110:5000/v2/_catalog,查看到的镜像信息,而对于该镜像的镜像层数据需要进行垃圾回收才会真的被删除。如果删除的镜像与未删除的镜像公用了一些镜像层数据,垃圾回收之后,你就再也用不了这些镜像了。所以我们删除元数据就好。
8.进入到registry容器中
[root@cgsl ~]# docker ps -a
[root@cgsl ~]# docker exec -it <registry容器id> sh
/ # ls -l /var/lib/registry/docker/registry/v2/repositories/
/ # rm -rf /var/lib/registry/docker/registry/v2/repositories/<镜像名>
直接删除需要删除的本地仓库镜像
9.退出容器之后,再次查看
[root@cgsl ~]# curl -X GET http://192.168.1.110:5000/v2/_catalog
二、配置远程各机器
1.本地的私有仓库搭建好了,其他远程机器如何使用呢?
不用担心,确保运行私有仓库的宿主机开放5000端口之后,我们自有办法下载仓库中的镜像。
2.查看远程仓库的镜像
[root@cgsl ~]# curl -X GET http://192.168.1.110:5000/v2/_catalog
你所在的机器必须能够与192.168.1.110进行通信。
3.配置daemon.json,并重启docker服务
echo "{"insecure-registries":["192.168.1.110:5000"]}" >> /etc/docker/daemon.json
systemctl restart docker.service
4.可以愉快的下载
docker pull 192.168.1.110:5000/centos