image.png
在之前的Docker Registry私有倉庫搭建的過程中,總是需要添加"--insecure-registry="選項來實現私有倉庫的鏡像上傳與下載.
image.png
這樣才能實現上傳
image.png
image.png
有沒有更好的解決方法
是這樣的,我們之前用的全都是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天
image.png
這里需要注意的是common name很重要,它必須與用來訪問服務器的名字相同 而且不可以使用IP地址(復雜而不實用)代替,如“test”是我的服務器的名字
image.png
會生成這兩樣文件
接下來需要將證書復制到每一個將會訪問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選項時候,是上傳失敗的)
image.png
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
以數據卷的形式將證書放入容器中
image.png
大功告成~~>-<