1. 程式人生 > >docker搭建私有倉庫v2(Private Registry v2),自簽發證書、公網訪問、登入認證

docker搭建私有倉庫v2(Private Registry v2),自簽發證書、公網訪問、登入認證

如果不用自簽發的證書,直接照著官方的步驟做就是了,已經很直白,但是如果需要用自簽發的證書,稍微就比較麻煩,特別在用mac版的docker的時候有點坑,不過最後還是搭建成功了,現來分享下經驗。

假設registry的域名準備用hub.domain.com(後面出現它的地方均替換為你自己要用的域名),先ssh登入伺服器,執行下面的步驟:
1. 先生成自簽發證書,執行下面的命令:

mkdir -p certs && openssl req \
   -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key \
   -x509
-days 99999 -out certs/domain.crt

在Common Name那裡輸入域名,其它喜歡怎麼填就怎麼填:
自簽發證書

2. 建立使用者名稱密碼:

mkdir auth
docker run --entrypoint htpasswd registry:2 -Bbn testuser testpassword > auth/htpasswd

testusertestpassword分別替換成你需要的registry登入名和密碼

3. 啟動Registry:

docker run -d -p 5000:5000 --restart=always --name registry \
  -v `pwd`/auth:
/auth \
-e "REGISTRY_AUTH=htpasswd" \ -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \ -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \ -v `pwd`/certs:/certs \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \ -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \ registry:2

如果沒有registry映象會自動下載然後啟動,或者可以先執行docker pull registry:2

將其事先下載下來,速度慢的話請用加速器。

好了,registry服務端算是搭建好了,但是如果其它客戶端直接docker login hub.domain.com:5000 的話會報錯,比如:x509: certificate signed by unknown authority

下面對其它需要用到registry的docker伺服器或開發機器進行一些操作:
注:如果DNS沒有hub.domain.com的記錄,就需要在每個docker客戶端所在機器修改hosts檔案,將registry的ip地址對映到hub.domain.com

我們還需要讓所有機器信任自簽發的registry,不然登入會報錯。

  1. 將之前registry伺服器上生成的certs/domain.crt複製到當前機器,命名為ca.crt
  2. 建立資料夾並將ca.crt拷進去:
mkdir -p /etc/docker/certs.d/hub.domain.com:5000
cp ca.crt /etc/docker/certs.d/hub.domain.com\:5000/

注:如果是macOS版的docker也是一樣的操作,儘管它連/etc/docker都不存在,別擔心,照做就是了。另外,macOS的使用者還需要額外執行下面的命令:

sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ca.crt

OK,接下來可以測試下:

docker login hub.domain.com:5000

輸入登入名和密碼。如果提示Login Succeeded,恭喜你,大功告成!