搭建docker私有映象倉庫及部署 web管理端
1.安裝centos和docker
centos核心版本在3.10以上(推薦centos7以上),docker在1.6版本以上,具體安裝docker和啟動服務略過
2.官方獲取docker registry映象並啟動
#dockerpull registry 拉取官方私有倉庫映象registry
#docker run -d -p 5000:5000 --restart=always--privileged=true --name registry -v /home/docker_file/repos:/var/lib/registry registry:latest
說明:
-v /home/docker_file/repos:/var/lib/registry
–privileged=true :CentOS7中的安全模組selinux把許可權禁掉了,引數給容器加特權,不加上傳映象會報許可權錯誤(OSError: [Errno 13] Permission denied:‘/tmp/registry/repositories/liibrary’)或者(Receivedunexpected
HTTP status: 500 Internal Server Error)錯誤
注:啟動成功可以輸入docker伺服器ip:5000則會返回空白頁面,私有倉庫預設埠5000
3.驗證本地映象倉庫
拉取alpine映象,然後修改tag(原tag:docker.io/alpine:latest),再push到本地映象倉庫,命令如下;
# docker tag alpine:latest localhost:5000/alpine:latest
# docker pushlocalhost:5000/alpine:latest 將alpine上傳到本地映象倉庫
刪除images中的alpine:latest,重新拉取本地映象倉庫的alpine:latest測試,如下:
#docker rmi alpine:latest
#docker pull localhost:5000/alpine:latest
通過docker images可檢視localhost:5000/alpine:latest證明本地映象倉庫安裝成功
#curl http://localhost:5000/v2/_catalog 檢視本地映象的列表
#curl http://localhost:5000/v2/image_name/tags/list 獲取某個映象的標籤列表
4.遠端訪問私有映象倉庫
以上配置是隻能當前伺服器可訪問倉庫,要遠端訪問registry,需要配置客戶端的docker訪問模式支援http,docker與dockerregistry互動預設使用的是https,而搭建的私有倉庫一般只提供http服務。
4.1 修改docker配置檔案/etc/sysconfig/docker(ubuntu為/etc/default/docker)
#vi /etc/sysconfig/docker
4.2 修改配置檔案如下
OPTIONS='--insecure-registryregistry.hub:5000'
ADD_REGISTRY='--add-registryregistry.hub:5000'
說明:registry.hub為docker私有倉庫伺服器的ip或域名
4.3 重啟docker
#systemctl restart docker.service
4.4 測試
可以直接拉取剛才建立的docker私有倉庫伺服器的映象,無需registry的域名和埠。
5.部署registry的web管理端
registry的web ui工具目前主流的有docker-registry-frontend和docker-registry-web,根據docker hub上的stars流行度來說,本次使用docker-registry-frontend來搭建registry的web ui管理端,目前此版本僅支援私有倉庫映象的瀏覽。
直接從docker hub中拉取執行即可
使用方法:
# docker run -d -eENV_DOCKER_REGISTRY_HOST=192.168.17.129 -e ENV_DOCKER_REGISTRY_PORT=5000 -p 8080:80konradkleine/docker-registry-frontend:v2
說明:執行此命令,會自動從docker hub中下載並執行docker-registry-frontend
引數說明:
ENV_DOCKER_REGISTRY_HOST 指定對應registry私服的域名或ip
ENV_DOCKER_REGISTRY_PORT指定對應registry私服的埠
docker-registry-frontend執行容器使用apacheweb伺服器暴露80埠,外部訪問需要做伺服器和容器埠繫結,此處繫結伺服器的8080埠。
其它常用引數:
-e ENV_DOCKER_REGISTRY_USE_SSL=1 registry私服僅能通過HTTPs訪問
-e ENV_MODE_BROWSE_ONLY=true 僅瀏覽不能關聯映象模式啟動
-eENV_DEFAULT_REPOSITORIES_PER_PAGE=50 修改web端每頁的映象數,預設20
-e ENV_DEFAULT_TAGS_PER_PAGE=5修改web端映象每頁的tag數,預設10
docker-registry-frontend支援https訪問,需要對映埠和關聯https證書
,引數如下:
-v $PWD/server.crt:/etc/apache2/server.crt:ro
-v $PWD/server.key:/etc/apache2/server.key:ro
-p 443:443
5.其它問題
啟動web管理端後如無法載入任何映象,報錯如下:
原因是docker-registry-frontend容器內無法訪問註冊伺服器,解決辦法是通過容器互聯,使前者可以訪問註冊伺服器的對應5000埠,命令如下:
docker run -d -eENV_DOCKER_REGISTRY_HOST=registry -e ENV_DOCKER_REGISTRY_PORT=5000 -p 8080:80--link registry:registry konradkleine/docker-registry-frontend:v2
問題分析請參照我的問題解決歷程:
最後貼一個映象管理頁面的成功執行圖: