創建存儲憑據的文件夾:
mkdir -p /root/auth
現在,我將在Docker容器的幫助下創建htpasswd文件。該htpasswd文件將包含我的憑據和加密的passwd。
docker run --entrypoint htpasswd registry -Bbn myuser mypassword > auth/htpasswd
核實:
cat auth/htpasswd myuser:$2y$05$8IpPEG94/u.gX4Hn9zDU3.6vru2rHJSehPEZfD1yyxHu.ABc2QhSa
憑據很好。現在,我必須將我的憑據添加到注冊表中。在這里,我將在容器中安裝auth目錄:
docker run -d -p 5000:5000 --restart=unless-stopped --name registry-auth \
-v /root/auth:/auth \
-v /data/registry:/var/lib/registry \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
registry
測試:
docker push localhost:5000/busybox The push refers to a repository [localhost:5000/busybox] 8ac8bfaff55a: Image push failed unauthorized: authentication required
認證:
docker login localhost:5000 Username (): myuser Password: Login Succeeded
注意:因為服務器docker版本問題第一次docker login報錯,Error response from daemon: login attempt to http://192.168.122.190:5000/v2/ failed with status: 400 Bad Request,升級了一下docker版本再docker login就成功了。
重試推送:
docker push localhost:5000/busybox The push refers to a repository [localhost:5000/busybox] 8ac8bfaff55a: Pushed latest: digest: sha256:1359608115b94599e5641638bac5aef1ddfaa79bb96057ebf41ebc8d33acf8a7 size: 527b
部署支持https的registry
1.安裝docker(安裝指定版本的話可以參考其他文檔) # docker install docker 2.拉取倉庫鏡像 # docker pull registry 3.生成認證certificate # mkdir ~/certs # openssl req -newkey rsa:4096 -nodes -sha256 -keyout /root/certs/domain.key -x509 -days 365 -out /root/certs/domain.crt 4.復制認證到docker # mkdir -p /etc/docker/certs.d/pansoft.com:5000 # cp /root/certs/domain.crt /etc/docker/certs.d/pansoft.com:5000/ca.crt 5.復制認證到本機 # cat /root/certs/domain.crt >> /etc/pki/tls/certs/ca-bundle.crt 7.啟動倉庫鏡像 # docker run -d -p 5000:5000 --privileged=true -v /opt/docker-registry:/var/lib/registry -v /root/certs/:/root/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/root/cer ts/domain.crt -e REGISTRY_HTTP_TLS_KEY=/root/certs/domain.key registry 8.創建一個鏡像 docker run -it --name=nginx centos /bin/bash yum install epel-release.noarch -y yum install nginx -y docker commit 7ab4d6b6a438 dingyingsi/nginx //7ab4d6b6a438為容器id docker tag dingyingsi/nginx pansoft.com:5000/nginx:latest //給當前鏡像打標簽 9.修改當前主機名: vi /etc/hosts 10.20.31.166 pansoft.com 10.推送鏡像到https私有倉庫 docker push pansoft.com:5000/nginx 11.刪除本地鏡像並重新從https私有倉庫拉取鏡像 docker rmi pansoft.com:5000/nginx docker pull pansoft.com:5000/nginx 12.添加http basic authentication docker run --entrypoint htpasswd registry -Bbn root pansoft2018 > /root/auth/htpasswd 13.停止倉庫並刪除容器 docker stop 726ae7846612 docker rm ba29cdf804f07167707eeb871c7d0ee8cc6eab7c82f07f829b2bc91263941627 14.啟動http basic authentication倉庫 docker run -d \ --name registry \ -p 5000:5000 \ --restart=always \ --privileged=true \ -v /opt/docker-registry:/var/lib/registry \ -e "REGISTRY_AUTH=htpasswd" \ -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \ -v /root/auth:/root/auth \ -e "REGISTRY_AUTH_HTPASSWD_PATH=/root/auth/htpasswd" \ -v /root/certs/:/root/certs \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/root/certs/domain.crt \ -e REGISTRY_HTTP_TLS_KEY=/root/certs/domain.key \ registry 15.登錄倉庫 docker login pansoft.com:5000 username:root password:pansoft2018 16.其他服務器用這個私有倉庫,直接復制docker的倉庫服務器下的/etc/docker/certs.d下的pansoft.com:5000/ca.cert目錄和文件,到自己的/etc/docker/cert.d/目錄下即可。
參考:https://note.youdao.com/ynoteshare1/index.html?id=62939cb3407c4c6365d2a4c1e7428e00&type=note
