搭建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  默認情況下,registry會將倉庫存放於容器內的/var/lib/registry目錄下(不同版本registry的路徑可能不一樣,具體官網查看其dockerfile),通過此設置將registry倉庫地址修改爲本機目錄的/home/docker_file/repos


  –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

問題分析請參照我的問題解決歷程:

https://github.com/kwk/docker-registry-frontend/issues/181

最後貼一個鏡像管理頁面的成功運行圖: