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

 


1、關於Registry

官方的Docker hub是一個用於管理公共鏡像的好地方,咱們能夠在上面找到咱們想要的鏡像,也能夠把咱們本身的鏡像推送上去。html

可是有時候咱們的使用場景須要咱們擁有一個私有的鏡像倉庫用於管理咱們本身的鏡像。這個能夠經過開源軟件Registry來達成目的。node

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

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

 官方在Docker hub上提供了registry的鏡像,咱們能夠直接使用該registry鏡像來構建一個容器,搭建咱們本身的私有倉庫服務。git

 


2、搭建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,是爲了讓倉庫支持刪除功能。默認沒有這個參數,也就是不能刪除倉庫鏡像。github

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安全認證過不去)

  須要經過本地倉庫下載鏡像,均須要配置  web

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

 

 

 


3、搭建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

 

 

 


4、快捷部署

  集羣模式能夠經過docker stack快速部署registry和registry web。json

  新建配置文件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

出處: http://www.javashuo.com/article/p-uemtmlgs-cp.html

本文版權歸做者和博客園共有,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接。

相關文章
相關標籤/搜索