docker私有倉庫,使用自簽名證書控制訪問(有證書纔可傳輸數據且數據加密),使用web界面瀏覽、刪除鏡像(centos8)(三)

服務器名稱 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。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章