Docker的那些事儿—镜像的存储:私有仓库(16)
上一篇:Docker的那些事儿—镜像的存储:公有仓库(15)
我们可以使用Docker官方提供了registry镜像搭建本地私有仓库。该镜像的使用和普通镜像无差异。下面我以两台docker host为例来讲解如何搭建:
前提条件:已安装docker
Ubuntu-001 用作私有仓库机器
Ubuntu-002 用作客户机器
1、Pull registry到本地
root@Ubuntu-001:~# docker pull registry
2、启动该镜像
root@Ubuntu-001:~# docker run -d -p 5000:5000 registry
默认情况下,仓库存将存放于容器内的/tmp/registry目录下,假如容器被删除,则存放于容器中的镜像也会丢失,因此我们一般情况下会指定本地一个目录挂载到容器内的/tmp/registry下,如下:
root@Ubuntu-001:~#docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry
至此,私有仓库搭建完毕,我们可以看一下搭建的私有仓库能否使用
容器已经运行起来了,并且在宿主机上观察实际上是起了一个进程。
下面我们进验证能否push镜像到刚才搭建的私有仓库。
接下来需要在Ubuntu-002上操作
3、修改镜像的tag
4、将ubuntu及httpd镜像push到仓库
报错了,这是因为Docker从1.3.X之后,与docker registry交互默认使用的是https,然而此处搭建的私有仓库只提供http服务,所以当与私有仓库交互时就会报上面的错误。
为了解决这个问题:在启动docker server时,增加启动参数为默认使用http访问。增加insecure-registries 192.168.1.114:5000到docker启动配置文件/etc/docker/daemon.json中(注意该文件是json格式),并重启docker daemon: systemctl restart
docker.service,如下所示:
如果有多个仓库可以添加多个: "insecure-registries":["192.168.1.114:5000","192.168.1.115:5000"]
可见push成功了。
你可能看到为啥第一次push ubuntu镜像的时候,latest和14.04均push了,这是因为:docker push 10.140.160.250:5000/ubuntu是push REPOSITORY为10.140.160.250:5000/ubuntu里的所有images到仓库。
5、验证从仓库pull镜像
私有仓库镜像操作:
1、验证仓库是否正常工作
2、列出当前所有的镜像
3、搜索指定镜像
有兴趣的读者可以探讨下如下的问题:
1、Push到私有仓库的镜像怎么删除?目前好像还比较麻烦,只能通过接口删除
2、如何创建支持https的私有仓库?
3、私有仓库可以像Docker Hub一样注册用户,便于管理?不然的话谁都可以push镜像岂不乱套了。