在之前的Docker Registry私有仓库搭建的过程中,总是需要添加"--insecure-registry="选项来实现私有仓库的镜像上传与下载.
这样才能实现上传
有没有更好的解决方法
是这样的,我们之前用的全都是http:// 是不安全的,所以才要加上--insecure-registry选项表明身份。现在我们可以尝试使用https://运行自己的寄存服务.
搭建SSL registry
mkdir ~/registry
cd ~/registry
如果想创建一张你自己的签名证书,可以使用OpenSSL工具
openssl req -newkey rsa:4096 -nodes -sha256 -keyout domain.key -x509 -days 365 -out domain.crt
说明一下,这里是创建一个x509的自签名证书和4096位的RSA的私匙.这张证书采用SHA256的摘要部署,其有效期为365天
这里需要注意的是common name很重要,它必须与用来访问服务器的名字相同 而且不可以使用IP地址(复杂而不实用)代替,如“test”是我的服务器的名字
会生成这两样文件
接下来需要将证书复制到每一个将会访问Registry的服务器中的Docker守护进程中,复制的目标文件是/etc/docker/certs.d/<regitry_address>/ca.crt
[root@test ~]# sudo mkdir -p /etc/docker/certs.d/test:5000
[root@test ~]# cp registry_certs/domain.crt /etc/docker/certs.d/test\:5000/ca.crt
[root@test ~]#service docker restart
如果你需要在远程的其他主机上运行的话,你需要利用scp或者ansible把CA证书传到该Docker主机上。
现在启动Registry:
(这里做一个对比,在没有insecure-registry选项时候,是上传失败的)
docker run -d -p 5000:5000 \
> -v ~/registry_certs/:/certs \
> -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
> -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
> --restart=always --name registry registry:2
9a52c08ba5fd8d8cf9c9481fbad5867ae764d108aa3821d53a6504864da48a30
大功告成~~>-<