實驗環境:兩臺cnetos7.2版本虛擬機。(資源容許最好準備三臺,一臺作私有倉庫,一臺作上傳鏡像服務器,一臺作下載鏡像服務器)node
虛擬機1:192.168.1.200 python
虛擬機2:192.168.1.201linux
服務器防火牆和selinux關閉。hosts根據實際狀況作解析,每臺都須要解析。git
本實驗hosts解析爲:192168.1.201 hub.comdocker
此文檔默認在Registry上操做,client上操做時會紅色標記。瀏覽器
要實現ssl認證就須要證書支持,證書最好是服務商提供的證書,好比阿里雲,騰訊雲等等。這裏因爲作實驗,使用自建證書。服務器
建立.key和.crtdom
openssl req -newkey rsa:2048 -nodes -sha256 -keyout /docker/cert/ca.key -x509 -days 365 -out /docker/cert/ca.crt
Country Name (2 letter code) [AU]:CN #國家代碼,中國CN State or Province Name (full name) [Some-State]:Sichuan #省份全拼 Locality Name (eg, city) []:Chengdu #城市 Organization Name (eg, company) [Internet Widgits Pty Ltd]:registry #組織名,公司名 Organizational Unit Name (eg, section) []:CA #部門名稱 Common Name (e.g. server FQDN or YOUR name) []:hub.com #這裏必須填寫Docker Registry使用的域名 Email Address []:admin@domain.com #電子郵件
CentOS 6 / 7中bundle文件的位置在/etc/pki/tls/certs/ca-bundle.crt 阿里雲
cat /docker/cert/ca.crt >> /etc/pki/tls/certs/ca-bundle.crt
systemctl restart docker
mkdir /etc/docker/certs.d/hub.com/ #client上執行 scp /docker/cert/ca.crt 192.168.1.200:/etc/docker/certs.d/hub.com/ #registry 上執行。
cat /docker/cert/ca.crt >> /etc/pki/tls/certs/ca-bundle.crt #client上執行
systemctl restart docker
docker run -d -p 5000:5000 --restart=always --name registry \ -v /registry:/var/lib/registry \ -v `pwd`/cert/:/certs \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/ca.crt \ -e REGISTRY_HTTP_TLS_KEY=/certs/ca.key \ -e REGISTRY_STORAGE_DELETE_ENABLED=true \ registry
解釋:將宿主機的cert/目錄映射到容器中的/certs目錄中。指定registry啓動使用/certs中的證書。`pwd` :當前目錄,也可使用絕對路徑:/docker/cert/spa
沒使用證書的時候時走的http,使用證書後走的是https。
docker tag mariadb hub.com:5000/db:2.0 docker push hub.com:5000/db:2.0
cd /docker
mkdir auth
docker run --entrypoint htpasswd registry:2 -Bbn testuser testpassword > auth/htpasswd
注:紅色部分需改成你的用戶名和密碼
docker run -d -p 5000:5000 --restart=always --name registry \ -v /registry:/var/lib/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`/cert:/certs \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/ca.crt \ -e REGISTRY_HTTP_TLS_KEY=/certs/ca.key \ -e REGISTRY_STORAGE_DELETE_ENABLED=true \ registry:2
注:若是你registry正在運行,須要關閉。因爲加了參數--restart=always,當你關閉registry容器時,會自動重啓registry容器,因此只有使用 docker rm -f registry 強制刪除registry容器。
使用你剛剛建立的用戶和密碼就能夠登陸了。
docker tag mariadb hub.com:5000/db:3.0 docker push hub.com:5000/db:3.0
因爲沒有登陸剛剛的帳戶,因此沒有權限上傳。
經過用戶登陸
docker login hub.com:5000 docker push hub.com:5000/db3.0
1:用參數`pwd`時必定要注意啓動時的目錄是否對應。
2:刪除registry'容器時記得刪除掛載卷,否則上傳的鏡像還存在。docker stop registry && docker rm -v registry
3:訪問失敗時查看容器日誌:docker logs registry -f 加上-f 實時查看。