1. 程式人生 > >支援 https 的docker私有倉庫

支援 https 的docker私有倉庫

支援 https 的docker私有倉庫

1 . 使用 openssl 生成自簽名證書:

openssl req -newkey rsa:2048 -nodes -keyout rsa_private.key -x509 -days 365 -out cert.crt

req 是證書請求的自命令,
-newkey rsa:2048 -keyout private_key.key 表示生成私鑰,
-nodes 表示私鑰不加密,若不帶會提示輸入密碼,
-x509 表示輸出證書,
-day 為有效期
回車後根據提示輸入證書擁有者的資訊;
若要一步輸入可使用 -subj 選項:
-subj "/C=CN/ST=GD/L=SZ/O=vihoo/OU=dev/CN=vivo.com/

[email protected]"

  • 把私鑰和祕鑰都放到 ~/certs/ 下,以方便下面使用。
  • 將cert.crt拷貝到 /etc/docker/certs.d/[docker_registry_domain]/ca.crt(這裡不能用自己的IP 得用域名,如果在區域網內 就不用配置證書了)
    例如:
[email protected]-SYS-7048GR-TR:$docker push 192.168.1.200:443/redis-master:latest
Get https://192.168.1.200:443/v1/_ping: x509: cannot validate certificate for 192.168.1.200 because it doesn't contain any IP SANs
  • 把證書內容複製到系統的 CA 檔案中,使系統信任我們的系統。
    cat cert.crt >> /etc/ssl/certs/ca-certificates.crt

2 . 為使用者建立登入密碼(可跳過)

mkdir auth
docker run --entrypoint htpasswd \
registry:2.0 -Bbn username password > auth/htpasswd

3 . 建立倉庫

# 如果跳過了第二步,那這裡也要去掉驗證的引數
docker run -d \
  --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_ADDR=0.0.0.0:443 \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/cert.crt \ -e REGISTRY_HTTP_TLS_KEY=/crer/rsa_private.key \ -p 443:443 \ registry:2.0

4 . push pull

docker tag kubeguide/redis-master  kq.dockerhub.io:443/redis-master:latest
docker push kq.dockerhub.io:443/redis-master:latest 
# 沒有 DNS 解析域名 報錯
docker pull  kq.dockerhub.io:443/redis-master:latest

5 . 登入倉庫

$ docker login kq.hub.io
Username (testuser): username
Password: password
Login Succeeded

6 . 還可以在瀏覽器中檢視映象
https://kq.hub.io/v2/_catalog