前言
docker中的仓库就像是我们平时用的git一样,git用来存放管理项目代码,而docker仓库则是专门用来存放管理docker镜像,既然git有公有、私有仓库之分,docker仓库同样不例外,本文介绍如何在docker中安装你专属的私有仓库。
环境说明
- Centos7-64位虚拟机环境
- Docker-CE-18.03.1-ce
- 虚拟机ip地址:10.200.0.204
私有仓库搭建
拉取镜像
docker pull registry
启动仓库镜像
docker run -d \
--name myRegistry \
-p 5000:5000 \
-v /myRegistry:/var/lib/registry \
registry
上面的命令大意是指,通过registry
镜像来启动一个容器,并命名为myRegistry
,开放容器端口5000并映射到宿主机5000端口,将容器中的/var/lib/registry
目录挂载至宿主机/myRegistry
目录下
查看容器运行结果
docker ps -a
此时,我们已经在docker中搭建好了一个专属的私有仓库,仓库地址为10.200.0.204:5000
下面测试提交一个镜像到私有仓库,此处以hello-world
镜像为例
如果docker中暂无该镜像,可通过docker pull hello-world
拉取
修改hello-world
镜像的tag,标记一个修改后的版本
docker tag <image_name/image_id> <registry_ip>:5000/<image_name>:<version>
docker tag hello-world 10.200.0.204:5000/hello-world:v1.0.1
将tag为v1.0.1的hello-world镜像提交到私有仓库
docker push <registry_ip>:5000/<image_name>:<version>
docker push 10.200.0.204:5000/hello-world:v1.0.1
此时回提交失败出现如下错误 http: server gave HTTP response to HTTPS client:
出现这问题的原因是:Docker自从1.3.X之后docker registry交互默认使用的是HTTPS,但是我们搭建的私有仓库在进行交互时默认使用的是HTTP服务,
由于仓库与客户端的https问题,需要修改/usr/lib/systemd/system/docker.service
文件,
vi /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.211.153:5000
重新启动docker
systemctl daemon-reload
systemctl restart docker
如果是虚拟机,需重启虚拟机。
重新提交hello-world镜像到私有仓库
docker push 10.200.0.204:5000/hello-world:v1.0.1
查看仓库中的镜像列表
curl -X GET http://10.200.0.204:5000/v2/_catalog
查看仓库中某镜像的详细信息
curl -X GET http://10.200.0.204:5000/v2/hello-world/tags/list
从私有仓库pull镜像
docker pull <registry_ip>:5000/<image_name>:<version>
docker pull 10.200.0.204:5000/hello-world:v1.0.1
总结
至此,docker中私有仓库的安装,和基本使用就介绍完了,不妨在自己的linux机器中实践一下吧。