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

若是不用自簽發的證書,直接照着官方的步驟作就是了,已經很直白,可是若是須要用自簽發的證書,稍微就比較麻煩,特別在用mac版的docker的時候有點坑,不過最後仍是搭建成功了,現來分享下經驗。node

假設registry的域名準備用hub.domain.com(後面出現它的地方均替換爲你本身要用的域名),先ssh登陸服務器,執行下面的步驟: docker

  1. 先生成自簽發證書,執行下面的命令:

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

在Common Name那裏輸入域名,其它喜歡怎麼填就怎麼填:

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

  1. 建立用戶名密碼:
    mkdir auth
    docker run --entrypoint htpasswd registry:latest -Bbn testuser testpassword > auth/htpasswd
    將testuser和testpassword分別替換成你須要的registry登陸名和密碼.

3 中止並刪除容器dom

4 Start the registry with basic authentication:ssh

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:latestide

Try to pull an image from the registry, or push an image to the registry. These commands fail.

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

下面對其它須要用到registry的docker服務器或開發機器進行一些操做:
注:若是DNS沒有的記錄,就須要在每一個docker客戶端所在機器修改hosts文件,將registry的ip地址映射到master上測試

咱們還須要讓全部機器信任自簽發的registry,否則登陸會報錯。3d

將以前registry服務器上生成的certs/domain.crt複製到當前機器,命名爲ca.crt
創建文件夾並將ca.crt拷進去:
mkdir -p /etc/docker/certs.d/hub.domain.com:5000
cp ca.crt /etc/docker/certs.d/hub.domain.com\:5000/rest

注:若是是macOS版的docker也是同樣的操做,儘管它連/etc/docker都不存在,別擔憂,照作就是了。另外,macOS的用戶還須要額外執行下面的命令:

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

OK,接下來能夠測試下:docker login hub.domain.com:5000輸入登陸名和密碼。若是提示Login Succeeded,恭喜你,大功告成!

相關文章
相關標籤/搜索