和Mavan的管理一样,Dockers不仅提供了一个中央仓库,同时也允许我们使用registry搭建本地私有仓库。使用私有仓库有许多优点:
一、节省网络带宽,针对于每个镜像不用每个人都去中央仓库上面去下载,只需要从私有仓库中下载即可;
二、提供镜像资源利用,针对于公司内部使用的镜像,推送到本地的私有仓库中,以供公司内部相关人员使用。
接下来我们就大致说一下如何在本地搭建私有仓库。
环境准备
环境:两个装有的Ubuntu虚拟机
虚拟机一:192.168.112.132 用户开发机虚拟机二:192.168.112.136 用作私有仓库此处我们准备了两个虚拟机,分别都安装了Docker,其中132机器用作开发机,136机器用作registry私有仓库机器。环境准备好之后接下来我们就开始搭建私有镜像仓库。
搭建私有仓库
首先在136机器上下载registry镜像
$ sudo docker pull registry
下载完之后我们通过该镜像启动一个容器
$ sudo docker run -d -p 5000:5000 registry
默认情况下,会将仓库存放于容器的/tmp/registry目录下,这样如果容器被删除,则存放于容器中的镜像也会丢失,所以我们一般情况下会指定本地一个目录挂载到容器的/tmp/registry下,如下:
$ sudo docker run -d -p 5000:5000 --restart=always --privileged=true -v /opt/data/registry:/tmp/registry registry
备注: –privileged=true :CentOS7中的安全模块selinux把权限禁掉了,参数给容器加特权,不加上传镜像会报权限错误(OSError: [Errno 13] Permission denied: ‘/tmp/registry/repositories/liibrary’)或者(Received unexpected HTTP status: 500 Internal Server Error)错误
$ sudo docker pull busybox
接下来修改一下该镜像的tag
$ sudo docker tag busybox 192.168.112.136:5000/busybox
$ sudo docker push 192.168.112.136:5000/busybox
2015/01/05 11:01:17 Error: Invalid registry endpoint https://192.168.112.136:5000/v1/: Get https://192.168.112.136:5000/v1/_ping: dial tcp 192.168.112.136: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.112.136:5000/ca.crt
因为Docker从1.3.X之后默认docker registry使用的是https,所以当用docker pull命令下载远程镜像时,如果远程docker registry是非https的时候就会报上面的错误。
为了解决这个问题需要在启动docker server时增加启动参数修改docker启动配置文件(此处是修改132机器的配置)Ubuntu下配置文件地址为:/etc/init/docker.conf在其中增加--insecure-registry 192.168.112.136:5000如下所示:$ sudo vi /etc/init/docker.conf
$ sudo restart docker
$ sudo docker push 192.168.112.136:5000/busybox
删除了本地镜像,然后我们从私有镜像仓库中下载该镜像
$ sudo docker pull 192.168.112.136:5000/busybox
备注:centos 7 解决处理https问题是在/etc/docker/目录添加daemon.json文件,
vim /etc/docker/daemon.json
{"insecure-registries":["118.178.229.212:5000"]}
重启即可。
获取仓库类的镜像:
[root@shanghai docker]# curl -XGEThttp://192.168.1.8:5000/v2/_catalog
{"repositories":["nginx"]}