首先需要使用域名或主机名制作证书,自签证书在内网可以使用,因为内网可排除信任问题,自签证书流程可以参考使用自签的证书配置nginx的https。
证书制作完成我们开始部署registry,当前registry v2版已经发布,所以我们使用v2版部署测试,部署之前需要运行docker daemon
1、将制作好的证书copy到/etc/docker/certs.d/${domain}/ca.crt中,注意目录中的domain是registry的域名或主机名,同时也是制作证书时的输入的Common name。
#] cp web1.crt /etc/docker/certs.d/web1\:5000/ca.crt
然后重启docker daemon
2、拉取官方registry镜像
#] docker pull registry:2 ## docker pull registry:latest
3、运行registry容器:
#] docker run -d -p 5000:5000 --restart=always --name registry \
-v /root/ssl:/certs \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/web1.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/web1.key \
registry:2
注意:参数 -v /root/ssl是证书所在目录
4、测试将镜像push到仓库中
将待push到仓库中的镜像打标签
#] docker tag registry:2 web1:5000/registry
push镜像
push完之后,可以在本地使用docker pull web1:5000/registry
5、在另外一台机器上pull镜像,首先需要将证书copy到这台机器的/etc/docker/certs.d/web1:5000/目录下
并重名为ca.crt,然后重启docker daemon
执行docker pull web1:5000/registry命令:
拉取成功,registry部署完成。
碰到的问题:在push和pull的时候出现x509:certificate signed by unknown authority,如下图:
主要原因是没有将证书copy到/etc/docker/certs.d/web1:5000目录下,并需要将证书重命名为ca.crt.
当然还得确保自签证书没问题。