私有仓库Registry使用

 

 有时候使用Docker Hub这样的公共仓库可能不方便,这种情况下用户可以使用registry创建一个本地仓库供私人使用,这点跟Maven的管理类似。
使用私有仓库有许多优点:

1

2

1)节省网络带宽,针对于每个镜像不用每个人都去中央仓库上面去下载,只需要从私有仓库中下载即可;

2)提供镜像资源利用,针对于公司内部使用的镜像,推送到本地的私有仓库中,以供公司内部相关人员使用。

目前Docker Registry已经升级到了v2,最新版的Docker已不再支持v1。Registry v2使用Go语言编写,在性能和安全性上做了很多优化,重新设计了镜像的存储格式。如果需要安装registry v2,只需下载registry:2.2即可。Docker官方提供的工具docker-registry可以用于构建私有的镜像仓库。废话不多说了,下面记录下Docker私有仓库构建的过程:

选择一台服务器(内外网地址:47.107.154.32)作为注册服务器,用于搭建私有仓库。(该机器要安装了Docker环境)

1)从Docker官方仓库里下载registry镜像

这里直接下载latest,下载完成后通过 docker images 命令查看本地镜像

2)在容器中启动私有镜像仓库并将私有仓库的存储目录挂载到宿主机指定目录中,这样做的目的是,如果容器被删除了,存储在容器中的镜像就不会被删掉(默认情况下如果容器被删除,则存放于容器中的镜像也会丢失),registry默认的存储路径为容器的/tmp/registry路径下,这里我们将/usr/local/registry挂载到容器的/tmp/registry

docker run -d --name=my_registry -p 5000:5000 -v /usr/local/registry:/tmp/registry docker.io/registry

到此我们已经启动了一个私有镜像仓库的容器,地址为:47.107.154.32:5000

3) 测试

接下来可以把一个本地镜像push(如下面的mysql镜像)到私有仓库中。由于上传到私有仓库需要打标签,

[root@izwz9ad1jbc6fvd5qlmo2lz local]# docker tag docker.io/mysql:5.7  47.107.154.32:5000/mysql
[root@izwz9ad1jbc6fvd5qlmo2lz local]# docker images
REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
47.107.154.32:5000/mysql   latest              702fb0b7837f        2 weeks ago         372 MB
docker.io/mysql            5.7                 702fb0b7837f        2 weeks ago         372 MB
docker.io/cancerhw/nginx   latest              dbfc48660aeb        3 weeks ago         109 MB
docker.io/registry         latest              2e2f252f3c88        8 weeks ago         33.3 MB 
把上面修改tag后的镜像上传到私有仓库
[root@izwz9ad1jbc6fvd5qlmo2lz local]# docker push 47.107.154.32:5000/mysql
The push refers to a repository [47.107.154.32:5000/mysql]
Get https://47.107.154.32:5000/v1/_ping: http: server gave HTTP response to HTTPS client

问题原因:因为Docker从1.3.X之后,与docker registry交互默认使用的是https,然而此处搭建的私有仓库只提供http服务,所以当与私有仓库交互时就会报上面的错误。
为了解决这个问题需要在启动docker server时增加启动参数为默认使用http访问。
这里的解决办法是在docker client 端中的/etc/docker/daemon.json 文件中添加
"insecure-registries":["47.107.154.32:5000"].当前环境CentOS7
修改配置后需要重启docker服务:service docker restart


由于docker服务重启后,所有容器都会被关闭。所以需要在docker重启后再次启动容器
[root@izwz9ad1jbc6fvd5qlmo2lz]# docker start my_registry

再次提交到私有仓库
[root@izwz9ad1jbc6fvd5qlmo2lz docker]# docker push 47.107.154.32:5000/mysql

查看私有仓库里的镜像(一定要保证下面能查看到仓库里有镜像!如果仓库里没有镜像,那么客户端机器就无法从该私有仓库下载镜像了)
[root@izwz9ad1jbc6fvd5qlmo2lz]# curl -XGET http://47.107.154.32:5000/v2/_catalog    //即该私有仓库里有mysql镜像 
{"repositories":["mysql"]}
[root@izwz9ad1jbc6fvd5qlmo2lz]# curl -XGET http://47.107.154.32:5000/v2/mysql/tags/list
{"name":"mysql","tags":["latest"]}
或者浏览器里访问(103.110.186.23是注册机的外网ip,iptables防火墙内开放5000端口访问):
http://47.107.154.32:5000/v2/_catalog
http://47.107.154.32:5000/v2/mysql/tags/list
     
现在可以将本地的mysql和47.107.154.32:5000/mysql镜像都删除,然后从私有仓库中下载
[root@izwz9ad1jbc6fvd5qlmo2lz]# docker rmi mysql
[root@izwz9ad1jbc6fvd5qlmo2lz]# docker rmi 47.107.154.32:5000/mysql
     
[root@izwz9ad1jbc6fvd5qlmo2lz]# docker pull 47.107.154.32:5000/mysql
[root@izwz9ad1jbc6fvd5qlmo2lz]# docker images
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
47.107.154.32:5000/mysql   latest              5hc8a2ip413w        3 days ago          372 MB
     
-----------------------------------------------------------------------------
这样,也就可以在同一局域网内的其他机器上,从该私有仓库中pull下来该镜像。
比如在192.168.1.17服务器上拉取该私有仓库的mysql镜像进行容器创建
(注意,要在该机器的/etc/docker/daemon.json配置文件里添加--insecure-registry=47.107.154.32:5000参数)
[root@linux-node2 ~]# docker pull 47.107.154.32:5000/mysql
       
[root@linux-node2 ~]# docker images
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
47.107.154.32:5000/mysql   latest              2ec9e2eb978a        3 days ago          372 MB

 

  

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值