Docker私有仓库搭建

已经有Docker hub了,为什么还要搭建私有仓库?

      Docker hub为我们提供了很多官方镜像和个人上传的镜像,我们可以下载机构或个人提供的镜像(如ubuntu,centos...),也可以上传我们自己的本地镜像,然后我们需要的时候也可以随时下载。看着很是方便,但是也有不方便的地方:

     (1)那就是我们在从dockerhub上下载和上传镜像速度可能受影响,有时可能docker主页都打不开。

     (2)我们在生产上所使用的docker镜像可能存放着我们的code,tools,不想被外部人员获取,只允许内网的开发人员下载。如果上传到dockerhub上所有人都可以看到。这和github上的公共库是一样的。

      (3)在内部网络搭建docker私有仓库可以使内网人员下载和上传都非常快速,不受外网带宽等因素的影响,同时不在内网的人员无法下载我们的镜像,上述两个缺点都很好的解决了

开始创建我们的仓库,首先下载registry镜像

docker pull registry:2  

默认情况下,会将仓库存放于容器内的/var/lib/registry目录下,这样如果容器被删除,则存放于容器中的镜像也会丢失,所以我们一般情况下会指定本地一个目录(刚刚创建的/home/hqz/registry)挂载到容器内的/var/lib/registry下,如下:

安装Docker Registry

sudo docker run -d -v /home/hqz/registry:/var/lib/registry -p 5000:5000 --restart always --privileged true --name registry registry:2

  • -v /home/hzq/registry:/var/lib/registry 默认情况下,会将仓库存放于容器内的/var/lib/registry目录下,指定本地目录挂载到容器。

  • -p 5000:5000 端口映射

  • --restart always 在容器退出时总是重启容器,主要应用在生产环境

  • --privileged true 在CentOS7中的安全模块selinux把权限禁掉了,参数给容器加特权,不加上传镜像会报权限错误OSError: [Errno 13] Permission denied: ‘/tmp/registry/repositories/liibrary’)或者(Received unexpected HTTP status: 500 Internal Server Error)错误

  • --name registry 指定容器的名称

这里写图片描述

通过执行上面的run命令,实际我们已经完成了Docker私有仓库的搭建。很简答吧!!!下面我们进行测试使用以下。

接下来我们就要操作把一个本地镜像push到私有仓库中
在内网的任意一台装有docker的机器下pull一个比较小的镜像来测试(此处使用的是centos)

docker pull centos

接下来修改一下该镜像的tag。

docker tag centos 192.168.2.114:5000/centos

接下来把打了tag的镜像上传到私有仓库。

docker push 192.168.2.114:5000/centos

可以看到push失败,具体错误如下:

 Error: Invalid registry endpoint https://192.168.0.153:5000/v1/: Get https://192.168.0.153:5000/v1/_ping: dial tcp 192.168.0.153:5000: connection refused. If this private registry supports only HTTP or HTTPS with an unknown CA certificate, please add `--insecure-registry 192.168.112.136:5000` to the daemon's arguments. In the case of HTTPS, if you have access to the registry's CA certificate, no need for the flag; simply place the CA certificate at /etc/docker/certs.d/192.168.0.153:5000/ca.crt 

因为Docker从1.3.X之后,与docker registry交互默认使用的是https,然而此处搭建的私有仓库只提供http服务,所以当与私有仓库交互时就会报上面的错误。首先信任docker hub私服地址。

修改daemon.json文件sudo vim /etc/docker/daemon.json
添加:{ "insecure-registries":["192.168.49.132:5000"]}

修改docker启动配置文件/usr/lib/systemd/system/docker.service 添加一行

 

修改完之后,重启Docker服务

sudo restart docker
 


重启完之后我们再次运行推送命令,把本地镜像推送到私有服务器上。

docker push 192.168.2.114:5000/centos

可以看到镜像已经push到私有仓库中去了。

接下来我们删除本地镜像,然后从私有仓库中pull下来该镜像。

docker pull 192.168.2.114:5000/centos

到此就搭建好了Docker私有仓库。上面搭建的仓库是不需要认证的,我们可以结合nginx和https实现认证和加密功能。可以参考官方介绍:

https://docs.docker.com/registry/deploying/

查看镜像

 
  1. # curl -XGET http://registry:5000/v2/_catalog
  2. # curl -XGET http://registry:5000/v2/image_name/tags/list

官方API,Docker Registry HTTP API V2


点关注,不迷路

文章每周持续更新,可以微信搜索「 十分钟学编程 」第一时间阅读和催更,如果这个文章写得还不错,觉得有点东西的话 ~求点赞👍 求关注❤️ 求分享❤️ 
各位的支持和认可,就是我创作的最大动力,我们下篇文章见!

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蒋老湿

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值