docker-鏡像註冊中心-registry實踐

docker-鏡像註冊中心-registry實踐

前言

  • registry - Docker Hub : https://hub.docker.com/_/registry
  • 一般情況下我們需要自己的私有倉庫來存儲自己的私有鏡像,因此需要在內部自己搭建一個倉庫中心,而docker已經爲我們提供了registry,可以方便我們私有倉庫的搭建
  • docker版的registry還欠缺的一點就是沒有提供可視化的管理工具

實踐

運行

  • 運行容器

    
    sudo docker run -d \
    -v /etc/localtime:/etc/localtime:ro \
    -v $PWD/registry:/var/lib/registry \
    -p 5000:5000 \
    --restart always \
    --name registry \
    registry:2.7
    
  • 上面的命令將會把上傳的鏡像放置在當前目錄的registry目錄下

  • 容器運行後訪問(ip請根據實際宿主機的ip修改)http://192.168.25.215:5000/v2/ ,出現“{}”字符串則表示正常

  • 如果想修改registry容器裏的監聽端口,通過參數 -e REGISTRY_HTTP_ADDR,如

    sudo docker run -d \
    -v /etc/localtime:/etc/localtime:ro \
    -p 5001:5001 \
    -e REGISTRY_HTTP_ADDR=0.0.0.0:5001 \
    --restart always \
    --name registry \
    registry:2.7
    

推送push

  • 容器運行成功後即可向私有倉庫推送鏡像,這裏以hello-world爲例

  • 首先拉取hello-world的鏡像

    sudo docker pull hello-world
    
  • 爲hello-world打tag,比如192.168.25.215:5000/hwj/helloworld:1

    sudo docker tag hello-world 192.168.25.215:5000/hwj/helloworld:1
    
    • 其中ip和端口即爲私有倉庫的ip和端口;hwj表示項目,這裏名稱可以隨意取;helloworld爲鏡像名,可以隨意取;最後的1表示版本號,可以隨意取,不寫默認latest
  • 執行以下命令將helloworld推送到私有倉庫

    sudo docker push 192.168.25.215:5000/hwj/helloworld:1
    
  • 推送時遇到錯誤:

    The push refers to repository [192.168.25.215:5000/hwj/helloworld:1]
    Get https://192.168.25.215:5000/v2/: http: server gave HTTP response to HTTPS client

  • 原因是docker私有倉庫服務器,默認是基於https傳輸的,所以我們需要在客戶端192.168.25.215做相關設置,不使用https傳輸

  • 修改/etc/docker/daemon.json,增加"insecure-registries": [“192.168.25.215:5000”],如下
    {
    “insecure-registries”:[“192.168.25.215:5000”]
    }

  • 保存後重啓下docker

    service docker restart 
     # 或者
    systemctl daemon-reload
    systemctl restart docker
    
  • 再此執行原先的推送命令,推送成功

  • 此時訪問 http://192.168.25.215:5000/v2/_catalog ,可以看到已經推送成功的鏡像helloworld

拉取pull

  • 如果想拉取私有倉庫的鏡像,那麼則需要加上私有倉庫服務的ip和端口,如

    sudo docker pull 192.168.25.215:5000/hwj/helloworld
    
  • 或者在/etc/docker/daemon.json中的registry-mirrors添加 http://192.168.25.215:5000
    {
    “registry-mirrors”: [“http://192.168.25.215:5000”],
    “insecure-registries”:[“192.168.25.215:5000”]
    }

  • 然後重啓docker

  • 之後就可以直接使用名稱下載,不用每次都加上ip和端口了

    sudo docker pull hwj/helloworld
    

鏡像操作api

列出所有的鏡像倉庫

curl -X GET http://<registry_ip>:<registry_port>/v2/_catalog

  • 輸出例子:

    {"repositories":["busybox"]}
    

列出指定鏡像的所有標籤

curl -X GET http://<registry_ip>:<registry_port>/v2/<image_name>/tags/list

  • 輸出例子:
    {"name":"busybox","tags":["latest","0.0.1","0.0.2"]}
    

可視化

  • registry本身並沒有提供管理工具,對於鏡像的管理只能通過接口調用,不是很方便
  • 在這裏推薦用harbor來搭建私有倉庫中心,harbor已經包含了registry,並且提供了可視化的管理頁面
  • 詳情請看 https://blog.csdn.net/huweijian5/article/details/89873618 ,裏面有完整的安裝介紹

參考

Docker學習之Docker Registry - 簡書
https://www.jianshu.com/p/fef890c4d1c2
手把手教你搭建Docker私有倉庫 - 屌絲大叔的筆記 - 博客園
https://www.cnblogs.com/subendong/p/9029495.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章