$ docker run -d -p 5000:5000 \ --restart=always \ --name registry \ -v `pwd`/dstorage:/var/lib/registry \ -v `pwd`/dcerts:/certs \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \ -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \ registry:2
命令中我们把证书所在的目挂载到了容器的 /certs 目录。然后分别指定了容器的环境变量 REGISTRY_HTTP_TLS_CERTIFICATE 和 REGISTRY_HTTP_TLS_KEY,这两个环境变量会引用我们常见的秘钥文件和证书文件。
好了,到目前为止新版的 Docker Registry 已经可以提供服务了。
为了快速、方便和省钱,我们没有去购买商业版的证书。这种方式的弊端是:必须把我们生成的根证书安装到每一个需要访问 Registry 服务器的客户端上。具体做法如下:
把前面生成的证书文件 dcerts/domain.crt 复制到需要访问 Registry 服务器的机器上。放到目录 /etc/docker/certs.d/10.32.2.140:5000/ 中,并重命名为 ca.crt。当然这个目录需要你自己创建。最后重新启动 docker 服务:
$ sudo systemctl restart docker.service // 不同的系统重启服务的命令可能不一样。
终于大功告成了,让我们往 Registry 中推送一个镜像吧:
看,redis:3.2 已经被 tag 为 10.32.2.140:5000/myredis:20170520,并推送到了局域网中的 Docker Registry Server 中。
为了验明正身,我们还是到 10.32.2.140 上去看一下文件存储的状态:
从这张图中我们可以看到,myredis:20170520 真的已经被 Registry 保存到文件系统中了。
总结由于安全性的考虑,配置局域网内可用的 Docker Registry 稍微有点麻烦。尤其是使用 IP 地址的配置方式,需要配置证书的 subjectAltName 才能正常工作。但完成配置后,使用局域网内的 Registry 还是很爽的。希望本文对有类似需求的朋友们有所帮助。
更多Docker相关教程见以下内容:
Docker安装应用(CentOS 6.5_x64)
在 Ubuntu 15.04 上如何安装Docker及基本用法