18.2 配置TLS证书
当本地主机运行Registry服务后,所有能访问到该主机的Docker Host都可以把它作为私有仓库使用。只需要在镜像名称前面添加上具体的服务器地址。
例如将本地的ubuntu:latest镜像上传到私有仓库myrepo.com:
- $ docker tag ubuntu myrepo.com:5000/ubuntu
- $ docker push myrepo.com:5000/ubuntu
或者从私有仓库myrepo.com下载镜像到本地:
- $ docker pull myrepo.com:5000/ubuntu
- $ docker tag myrepo.com:5000/ubuntu ubuntu
私有仓库需要启用TLS认证,否则会报错。在第一部分中,我们介绍了通过添加DOCKER_OPTS="—insecure-registry myrepo.com:5000来避免这个问题。在这里将介绍如何获取和生成TLS证书。
1.自行生成证书
使用openssl工具可以很容易地生成私人证书文件:
- $ mkdir -p certs
- $ openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/myrepo.key -x509
- -days 365 -out certs/myrepo.crt
生成过程中会提示填入各种信息,注意CN一栏的信息要填入跟访问的地址相同的域名,例如这里应该为myrepo.com。
生成结果为秘钥文件myrepo.key,以及证书文件myrepo.crt。
其中证书文件需要发送给用户,并且配置到用户Docker Host上,注意路径需要跟域名一致,例如:
- /etc/docker/certs.d/myrepo.com:5000/ca.crt
2.从代理商申请证书
如果Registry服务需要对外公开,需要申请大家都认可的证书。
知名的代理商包括SSLs.com、GoDaddy.com、LetsEncrypt.org、GlobalSign.com等,用户可以自行选择权威的证书提供商。
3.启用证书
当拥有秘钥文件和证书文件后,可以配置Registry启用证书支持,主要通过REGISTRY_HTTP_TLS_CERTIFICATE和REGISTRY_HTTP_TLS_KEY参数来设置:
- docker run -d -p 5000:5000 --restart=always --name registry \
- -v `pwd`/certs:/certs \
- -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/myrepo.crt \
- -e REGISTRY_HTTP_TLS_KEY=/certs/myrepo.key \
- registry:2
