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
- registry本身沒有可視化ui管理,因此對鏡像的操作都需要通過api完成
- HTTP API V2 | Docker Documentation :https://docs.docker.com/registry/spec/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