搭建docker本地鏡像倉庫並提供權限校驗及UI界面

docker本地鏡像倉庫的作用跟maven私服差不多,特別是公司級或者是小組級開發好的docker倉庫可以上傳到本地鏡像倉庫中,需要用時,直接從本地鏡像倉庫中拉取鏡像即可,因為鏡像倉庫在自己公司,可以做到安全可控了。下面介紹搭建本地鏡像倉庫的過程。

1、環境準備

docker本地鏡像倉庫本身也是一個docker鏡像,為此如果需要搭建本地鏡像倉庫,則首先要搭建docker的環境,具體搭建docker環境的步驟,大家可以之前的一篇文章:

鏡像倉庫的鏡像為:

registry 2.4.1 8ff6a4aae657 2 years ago 172MB

同時需要為本地鏡像倉庫提供UI界面,則UI界面的鏡像為:

hyper/docker-registry-web latest 0db5683824d8 2 years ago 599MB

2、配置本地倉庫

(1)、創建目錄用於本地倉庫所需的,即:

mkdir /opt/docker_reg

(2)、創建自定義證書的目錄,即:

mkdir /opt/docker_reg/certs

然後進入/opt/docker_reg/certs目錄,進行如下操作:

openssl req \\
-new \\

-newkey rsa:4096 \\
-days 365 \\
-subj "/CN=192.168.208.141" \\
-nodes \\
-x509 \\
-keyout auth.key \\
-out auth.cert

(3)、創建本地倉庫的配置文件目錄,即:

mkdir /opt/docker_reg/config

並在該目錄下創建registry.yml配置文件,配置信息為:

version: 0.1

storage:
filesystem:
rootdirectory: /registry
delete:
enabled: true

http:
addr: 0.0.0.0:5000

auth:
token:
realm: http://192.168.208.141:8080/api/auth
service: 192.168.208.141:5000
issuer: test
rootcertbundle: /etc/docker/registry/auth.cert

log:
level: info

notifications:
endpoints:
- name: listener
url: http://192.168.208.141:8080/api/notification
timeout: 500ms
threshold: 5
backoff: 1s

(4)、創建本地倉庫所需要的文件目錄,即:

mkdir /opt/docker_reg/reg

3、配置UI界面

(1)、創建UI界面所面的配置文件路徑,即:

mkdir -p /opt/docker_reg/ui/config

在該目錄下創建配置文件registry-ui.yml,配置內容為:

registry:
url: http://registry:5000/v2
name: 192.168.208.141:5000
readonly: false
auth:
enabled: true
key: /conf/auth.key
issuer: test

注意:

  • registry.name的配置內容要與上面registry.yml配置文件中的auth.token.service的值一樣
  • registry.auth.issuer的配置內容要與上面registry.yml配置文件中的auth.token.issuer的值一樣

4、docker-compose部署容器

利用docker-compose來部署倉庫以及UI界面容器,如果沒有安裝docker-compose的話,請執行如下命令:

curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

注意:如果運行環境不能直接聯外網,則可以先下載二進制包,然後手動放置到相應目錄,並授權即可。

在/opt/docker_reg目錄下創建docker-compose.yml文件,內容如下:

version: '2'
services:
registry-ui:
image: hyper/docker-registry-web:latest
ports:
- 8080:8080
volumes:
- ./ui/config/registry-ui.yml:/conf/config.yml:ro
- ./certs/auth.key:/conf/auth.key:ro
- ./ui/db:/data
networks:
- registry-net
depends_on:
- registry
registry:
image: registry:2.4.1
ports:
- 5000:5000
volumes:
- ./config/registry.yml:/etc/docker/registry/config.yml:ro
- ./certs/auth.cert:/etc/docker/registry/auth.cert:ro
- ./reg:/var/lib/registry
networks:
- registry-net

networks:
registry-net:

編輯好配置文件後,即可創建容器,即在/opt/docker_reg目錄執行:

docker-compose up -d

運行成功後,通過瀏覽器訪問http://192.168.208.141:8080

微服務架構 - 搭建docker本地鏡像倉庫並提供權限校驗及UI界面

有一個默認管理員賬號,即用戶名為admin,密碼為admin

5、測試倉庫

通過UI界面,用admin用戶,創建一個具有pull和push權限的用戶:

(1)、admin登錄後,點擊“Users”,即:

微服務架構 - 搭建docker本地鏡像倉庫並提供權限校驗及UI界面

(2)、創建jgyw用戶,密碼為jgyw123,即:

微服務架構 - 搭建docker本地鏡像倉庫並提供權限校驗及UI界面

(3)、授與jgyw用戶write-all、UI_USER角色,write-all角色即是有pull和push權限,UI_USER角色即可以查看UI界面,即:

微服務架構 - 搭建docker本地鏡像倉庫並提供權限校驗及UI界面

用戶創建好後,用jgyw用戶將鏡像push到倉庫中,例如將如下鏡像push到倉庫中:

openzipkin/zipkin 2.12.1 cf8d9aacddc0 5 weeks ago 144MB

(1)、首先利用tag命令,即:

docker tag openzipkin/zipkin:2.12.1 192.168.208.141:5000/jgyw/zipkin:2.12.1

(2)、然後利用jgyw用戶登錄本地倉庫,即:

docker login 192.168.208.141:5000

然後輸入用戶名和密碼,即可登錄。

如果在登錄本地倉庫時報:

Error response from daemon: Get https://192.168.208.141:5000/v1/users/: http: server gave HTTP response to HTTPS client

則需要將/usr/lib/systemd/system/docker.service文件中ExecStart值修改為如下形式,即:

ExecStart=/usr/bin/dockerd --insecure-registry 192.168.208.141:5000

然後重啟服務,即:

systemctl daemon-reload
systemctl restart docker

(3)、push鏡像到本地倉庫,即:

docker push 192.168.208.141:5000/jgyw/zipkin:2.12.1 

成功之後,通過jgyw用戶登錄UI界面,就可以看到相應的鏡像了,即:

微服務架構 - 搭建docker本地鏡像倉庫並提供權限校驗及UI界面

(4)、測試pull鏡像

首先先將原來的192.168.208.141:5000/jgyw/zipkin:2.12.1刪除掉,即:

docker rmi -f 192.168.208.141:5000/jgyw/zipkin:2.12.1

然後從本地倉庫中pull鏡像下來,即:

docker pull 192.168.208.141:5000/jgyw/zipkin:2.12.1


分享到:


相關文章: