有了docker hub和阿里或者网易的镜像仓库等之后,为什么还有自己构建仓库呢?一是为了安全,二是为了内网能访问,三是如果是在内网,速度会更加快。本文我们就介绍如何构建自己的docker仓库。
环境准备
环境:两个装有Docker 17.09.0-ce 的centos7虚拟机
虚拟机一:192.168.1.175 用户开发机
虚拟机二:192.168.1.174 用作私有仓库
搭建私有仓库
在174机器上面
docker pull registry
下载完之后我们通过该镜像启动一个容器
docker run -d -p 5000:5000 registry
默认情况下,会将仓库存放于容器内的/tmp/registry目录下,这样如果容器被删除,则存放于容器中的镜像也会丢失,所以我们一般情况下会指定本地一个目录挂载到容器内的/tmp/registry下,
不过具体的情况还是要到容器里去看
先启动容器
docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry
b4c21ca8cf8a23ea72e0471909742541ffc312ea5cf492486b5bdc3130179864
测试
接下来我们就要操作把一个本地镜像push到私有仓库中。首先在174机器下pull一个比较小的镜像来测试(此处使用的是busybox)。
docker pull busybox
接下来修改一下该镜像的tag。
docker tag busybox 192.168.1.174:5000/busybox
接下来把打了tag的镜像上传到私有仓库。
docker push 192.168.1.174:5000/busybox
接下来看到了错误:
The push refers to a repository [192.168.1.174:5000/registry]
Get https://192.168.1.174:5000/v1/_ping: http: server gave HTTP response to HTTPS client
这个问题可能是由于客户端采用https,docker registry未采用https服务所致。一种处理方式是把客户对地址“192.168.1.174:5000”请求改为http。
目前很多文章都是通过修改docker的配置文件“etc/systemconfig/docker",重启docker来解决这个问题,,根据网上创建此文件,并填入相应内容,重启docker无效果,仍然报此错误。
解决方法:
在”/etc/docker/“目录下,创建”daemon.json“文件。在文件中写入:
{ "insecure-registries":["192.168.1.174:5000"] }
保存退出后,重启docker。问题解决。
docker push 192.168.1.174:5000/busybox
成功的。
在175机器上同样修改/etc/docker/daemon.json
docker pull 192.168.1.174:5000/busybox
拉取镜像成功,