首先需要使用域名或主机名制作证书,自签证书在内网可以使用,因为内网可排除信任问题,自签证书流程可以参考使用自签的证书配置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镜像

  wKiom1eq7cjT4x6_AAAqo9L1WSw012.png-wh_50

  push完之后,可以在本地使用docker pull web1:5000/registry


5、在另外一台机器上pull镜像,首先需要将证书copy到这台机器的/etc/docker/certs.d/web1:5000/目录下

wKioL1eq7orBoK7bAAAMPzuQ9EE828.png-wh_50

并重名为ca.crt,然后重启docker daemon

执行docker pull web1:5000/registry命令:

wKiom1eq7vuifA_cAAAcDXlUV2A924.png-wh_50

拉取成功,registry部署完成。


碰到的问题:在push和pull的时候出现x509:certificate signed by unknown authority,如下图:wKiom1eq71vgQTtNAAAUwgQnlBI963.png-wh_50

主要原因是没有将证书copy到/etc/docker/certs.d/web1:5000目录下,并需要将证书重命名为ca.crt.

当然还得确保自签证书没问题。