1. 程式人生 > >Docker私有倉庫搭建與介面化管理

Docker私有倉庫搭建與介面化管理

 


一、關於Registry

官方的Docker hub是一個用於管理公共映象的好地方,我們可以在上面找到我們想要的映象,也可以把我們自己的映象推送上去。

但是有時候我們的使用場景需要我們擁有一個私有的映象倉庫用於管理我們自己的映象。這個可以通過開源軟體Registry來達成目的。

 Registry在github上有兩份程式碼:老程式碼庫和新程式碼庫。老程式碼是採用python編寫的,存在pull和push的效能問題,出到0.9.1版本之後就標誌為deprecated,不再繼續開發。

 從2.0版本開始就到在新程式碼庫進行開發,新程式碼庫是採用go語言編寫,修改了映象id的生成演算法、registry上映象的儲存結構,大大優化了pull和push映象的效率。

 官方在Docker hub上提供了registry的映象,我們可以直接使用該registry映象來構建一個容器,搭建我們自己的私有倉庫服務。

 


二、搭建Registry

首先搜尋並拉取映象

docker search registry    # 建議先搜尋一下,可以看一下相關的映象,說不定哪天就有更好的映象了
docker pull registry    # 標籤可以不加,因為當前最新就是v2

 

 

  執行一個registry容器

docker run -d \            # 後臺執行
--name registry-srv \    # 指定容器名
--restart=always \        # 設定自動啟動
-p 5000:5000 \            # 埠對映宿主機,通過宿主機地址訪問
-v /opt/zwx-registry:/var/lib/registry \     # 把映象儲存目錄掛載到本地,方便管理和持久化
-v /opt/zwx-registry/srv-config.yml:/etc/docker/registry/config.yml \    # 把配置檔案掛載到本地,方便修改和儲存
registry

 

  srv-config.yml內容如下

  標紅delete引數設定為true,是為了讓倉庫支援刪除功能。預設沒有這個引數,也就是不能刪除倉庫映象。

version: 0.1
log:
  fields:
    service: registry
storage:
  delete:
    enabled: true
  cache:
    blobdescriptor: inmemory
  filesystem:
    rootdirectory: /var/lib/registry
http:
  addr: :5000
  headers:
    X-Content-Type-Options: [nosniff]
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3

  註冊https協議(否則push安全認證過不去)

  需要通過本地倉庫下載映象,均需要配置  

vim /etc/docker/daemon.json        # 預設無此檔案,需自行新增,有則追加以下內容。
{ "insecure-registries":["xx.xx.xx.xx:5000"] }  # 指定IP地址或域名
systemctl daemon-reload # 守護程序重啟 systemctl restart docker # 重啟docker服務

映象上傳與下載

docker push xx.xx.xx.xx:5000/nginx            # 一定要註明倉庫地址,否則會報錯
docker pull xx.xx.xx.xx:5000/nginx

 

  檢視倉庫映象資訊

curl -XGET http://xx.xx.xx.xx:5000/v2/_catalog    # 檢視倉庫映象列表(也可以通過windows瀏覽器開啟檢視)
curl -XGET http://xx.xx.xx.xx:5000/v2/image_name/tags/list  # 檢視指定應用映象tag

 

 

 


三、搭建Registry web

首先搜尋並拉取映象

docker search docker-registry-web
docker pull hyper/docker-registry-web    # 這個映象用的人較多

 

 

  執行一個registry web容器

docker run -d \            # 後臺執行
--name registry-web \    # 指定容器名
--restart=always \        # 設定自動啟動
-p 8000:8080 \            # 埠對映宿主機,通過宿主機地址訪問
-v /opt/zwx-registry/web-config.yml:/etc/config.yml \    # 把配置檔案掛載到本地,方便修改和儲存
hyper/docker-registry-web

 

 

  web-config.yml檔案內容如下

標紅readonly引數設定為false,是為了web頁面可以顯示刪除按鈕。預設是true,只讀狀態,沒有刪除按鈕,只能檢視。

registry:
  # Docker registry url
  url: http://10.88.77.32:5000/v2
  # Docker registry fqdn
  name: localhost:5000
  # To allow image delete, should be false
  readonly: false
  auth:
    # Disable authentication
    enabled: false

部署完成後,瀏覽器開啟倉庫UI地址即可檢視到所有應用映象

選擇任意應用映象庫,即可檢視到該映象的所有tag資訊,每個tag後面都有個刪除按鈕(預設沒有,配置參考config.yml)

 

 

 


四、快捷部署

  叢集模式可以通過docker stack快速部署registry和registry web。

  新建配置檔案srv-config.yml、web-config.yml放到指定路徑,再新建docker-compose.yml檔案,執行命令即可。

docker stack deploy -c docker-compose.yml RGT

 

version: '3.7'      # docker stack 需要是3.0以上版本
services:
  registry-srv:      # 服務名
    image: registry
    
    ports:         # 對映埠
      - 5000:5000
      
    volumes:        # 掛載映象路徑和配置檔案,注意修改路徑與實際一致
      - /opt/zwx-registry:/var/lib/registry
      - /opt/zwx-registry/srv-config.yml:/etc/docker/registry/config.yml
      
    deploy:        # 設定單任務,並約束主節點執行
      mode: replicated
      replicas: 1
      placement:
        constraints:
          - node.role == manager
      
  registry-web:      # 服務名  
    image: hyper/docker-registry-web
    
    ports:        # 對映埠
      - 8000:8080
    
    volumes:      # 掛載配置檔案,注意修改路徑與實際一致
      - /opt/zwx-registry/web-config.yml:/conf/config.yml
      
    environment:
      - REGISTRY_URL=http://registry-srv:5000/v2
      - REGISTRY_NAME=localhost:5000
    
    deploy:        # 設定單任務,並約束主節點執行
      mode: replicated
      replicas: 1
      placement:
        constraints:
          - node.role == manager

 

 


 

 作者:Leozhanggg

出處: https://www.cnblogs.com/leozhanggg/p/12050322.html

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線。