服務器名稱 | IP地址 | 說明 |
---|---|---|
服務器200 | 192.168.1.200 | docker私有倉庫 |
服務器210 | 192.168.1.210 | docker客戶端 |
軟件 | 版本號 | 查詢命令 |
---|---|---|
docker | Docker version 18.09.1, build 4c52b90 | docker -v |
centos8 | CentOS Linux release 8.0.1905 (Core) | cat /etc/redhat-release |
一、服務器安裝docker,且已下載倉庫鏡像
參照博客:https://blog.csdn.net/renfeigui0/article/details/103755823
二、私有倉庫服務器200使用自簽名證書驗證方式創建容器
1、私有倉庫服務器200停止並刪除已創建的倉庫容器my-registry。
docker stop my-registry
docker rm my-registry
2、私有倉庫服務器200創建自簽名證書存放目錄/etc/docker/certs,創建證書(需要輸入的內容可自定義,但是域名必須和命令行的文件名保持一致,如下圖)。
mkdir -p /etc/docker/certs
openssl req -newkey rsa:4096 -nodes -sha256 -x509 -days 365 -keyout /etc/docker/certs/yuming.key -out /etc/docker/certs/yuming.crt
ls /etc/docker/certs
3、私有倉庫服務器200使用自簽名證書創建容器my-registry。
docker run -d -p 5000:5000 --restart=always --name my-registry \
-v /registry:/registry \
-e REGISTRY_STORAGE_DELETE_ENABLED=true \
-e REGISTRY_HTTP_ADDR=0.0.0.0:5000 \
-v /etc/docker/certs:/certs \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/yuming.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/yuming.key \
registry:latest
說明
-d,後臺運行容器
-p 5000:5000 ,映射容器5000端口至宿主機5000端口。
- - restart always,設置重新啓動策略,在docker重新啓動時自動重新啓動容器my-registry。
- -name my-registry,給容器命名。
-v /registry:/registry,把docker容器中/registry目錄的數據加載到宿主機的/registry目錄,宿主機的/registry目錄如果不存在會自動創建。目的是爲了防止docker私有倉庫這個容器被刪除時,倉庫裏的鏡像也會被刪除。宿主機查看到的私有倉庫鏡像就在這個目錄中。
-e REGISTRY_STORAGE_DELETE_ENABLED,設置是否允許刪除倉庫存儲的鏡像。
-e REGISTRY_HTTP_ADDR=0.0.0.0:5000,設置鏡像倉庫地址。
-v 本機目錄/etc/docker/certs掛載至容器的目錄/certs。
-e REGISTRY_HTTP_TLS_CERTIFICATE:設置證書的位置。
-e REGISTRY_HTTP_TLS_KEY:設置私鑰的位置。
三、客戶端210測試上傳、下載鏡像
1、客戶端210複製服務器200的certs證書到新建的docker**數據目錄(目錄名稱是固定的)**中。
mkdir -p /etc/docker/certs.d/yuming/
scp [email protected]:/etc/docker/certs/yuming.crt /etc/docker/certs.d/yuming/ca.crt
2、客戶端210爲hello-world鏡像創建新標籤,當標籤的第一部分是主機名和端口時,上傳鏡像時docker會將其解釋爲鏡像倉庫的位置。
docker images
docker tag hello-world:latest 192.168.1.200:5000/client210-certs-hello-world
3、客戶端210上傳創建新標籤的鏡像至私有倉庫。
docker push 192.168.1.200:5000/client210-certs-hello-world
4、客戶端210測試下載鏡像過程:查看、刪除docker客戶端服務器210本地鏡像,確認本地已無鏡像,下載私有倉庫服務器200鏡像,查看下載到本地的鏡像。
docker images
docker rmi 192.168.1.200:5000/client210-certs-hello-world
docker images
docker pull 192.168.1.200:5000/client210-certs-hello-world
docker images
四、使用web界面瀏覽、刪除docker私有倉庫鏡像
1、私有倉庫服務器200停止並刪除已創建的web界面管理容器registry_web。
docker stop registry-web
docker rm registry-web
2、私有倉庫服務器200,使用證書驗證方式創建啓動容器registry-web。參數URL需以https開頭,並設置信任任何SSL的連接爲true
docker run -itd -p 8080:8080 --name registry_web --link my-registry \
-e REGISTRY_URL=https://192.168.1.200:5000/v2 \
-e REGISTRY_NAME=192.168.1.200:5000 \
-e REGISTRY_READONLY=false \
-e REGISTRY_TRUST_ANY_SSL=true \
hyper/docker-registry-web:latest
說明
-d,後臺運行容器。
-p 8080:8080,映射容器8080端口至宿主機8080端口。
- - restart always,設置重新啓動策略,在docker重新啓動時自動重新啓動容器my-registry。
- -name my-registry 給容器命名。
--link ,設置連接的倉庫。
-e REGISTRY_URL,設置倉庫URL,如果使用證書創建容器,倉庫URL以https開頭。
-e REGISTRY_NAME,設置倉庫主機。
-e REGISTRY_READONLY ,設置web界面是否顯示讀寫、刪除按鈕。
-e REGISTRY_TRUST_ANY_SSL,設置信任任何SSL的連接。
3、局域網內其他主機打開瀏覽器,輸入網址http://192.168.1.200:8080,訪問私有倉庫鏡像如下圖,還可以刪除鏡像。
4、瀏覽器,輸入網址http://192.168.1.200:8080,訪問私有倉庫鏡像報錯“
I/O error on GET request for “http://192.168.1.200:5000/v2/_catalog?n=100”:Unexpected end of file from server; nested exception is java.net.SocketException: Unexpected end of file from server”。原因:私有倉庫服務器200,使用證書驗證方式創建啓動容器registry-web時,參數URL沒有以https開頭。
5、瀏覽器,輸入網址http://192.168.1.200:8080,訪問私有倉庫鏡像報錯“
I/O error on GET request for “https://192.168.1.200:5000/v2/_catalog?n=100”:java.security.cert.CertificateException: No subject alternative names present; nested exception is javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative names present”。原因:私有倉庫服務器200,使用證書驗證方式創建啓動容器registry-web時,參數沒有設置信任任何SSL的連接爲true。