Docker——Registry搭建私有鏡像倉庫


 

前言

在 Docker 中,當我們執行 docker pull xxx 的時候,它實際上是從 registry.hub.docker.com 這個地址去查找,這就是Docker公司為我們提供的公共倉庫,上面的鏡像,大家都可以看到,也可以使用。

所以,我們也可以帶上倉庫地址去拉取鏡像,如:docker pull jenkins

在公司中使用 Docker,我們不可能把商業項目上傳到公共倉庫中,所以要搭建私有倉庫。

 

 

1.部署倉庫

准備1台安裝好docker的服務器 (主機名為registry):docker私有倉庫服務器,運行registry容器。

  • 下載鏡像registry
docker pull registry:2.6.0

注:這里指定了2.6.0版本的,因為最新版本的會有問題,文章后面會提到

  • 查看鏡像registry
docker images

  •  運行registry容器
docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:2.6.0

 參數說明
  -d:在后台運行;
  -v:把宿主機的/opt/registry目錄綁定 到 容器/var/lib/registry目錄(這個目錄是registry容器中存放鏡像文件的目錄),來實現數據的持久化;
  -p:映射端口;訪問宿主機的5000端口就訪問到registry容器的服務了;
  --restart=always:這是重啟的策略,假如這個容器異常退出會自動重啟容器;
  --name registry:創建容器命名為registry,你可以隨便命名;
  registry:2.6.0:這個是剛才pull下來的鏡像;

 

  • 查看鏡像倉庫中的鏡像
curl http://127.0.0.1:5000/v2/_catalog

 注:現在是空的,因為才剛運行,里面沒有任何鏡像內容。

 

 

2.測試倉庫

准備1台安裝好docker的服務器,在這台服務器上下載一個測試鏡像busybox,然后上傳到registry服務器進行測試。

  • 下載鏡像whalesay
docker pull docker/whalesay

  • 查看鏡像whalesay
docker images

  • 為鏡像打標簽
docker tag docker/whalesay 10.0.29.22:5000/cwx/whalesay:v1

 參數說明

  docker/whalesay 這是源鏡像,也是剛才pull下來的鏡像文件;

  10.0.29.22:5000/cwx/whalesay:v1:這是目標鏡像,也是registry私有鏡像服務器的IP地址和端口;

 

  • 上傳到鏡像服務器
docker push 10.0.29.22:5000/cwx/whalesay:v1

1、注意了,如果這里報以下錯(CentOS 7):

解決方法:需要https的方法才能上傳,我們可以修改docker配置文件vi /etc/docker/daemon.json 添加 insecure-registries配置信息來解決: 

[root@node ~]# vim /etc/docker/daemon.json 
{
  "registry-mirrors": [ "https://registry.docker-cn.com"],
  //關鍵配置項,將倉庫將入到不安全的倉庫列表中
  "insecure-registries": [ "10.0.29.22:5000"]
}

然后重啟docker服務:

systemctl daemon-reload
systemctl restart docker

 

2、注意了,如果這里報以下錯(CentOS 6.5):

則在/etc/sysconfig/docker文件添加以下選項:

注:上面的IP映射的就是10.0.29.22:5000

然后重啟docker服務:

service docker restart

再次上傳鏡像,【registry版本2.7.0或更高】會報以下的錯誤:

查看registry服務器容器的日志:

docker logs -f -t --since="2020-01-15" --tail=500 registry        #(其中 -f 為查看實時日志, -t為時間 --since為從何時起)

解決方法:版本問題,把registry版本降到2.6.0或以下。

鏡像上傳成功結果如下:

  • 測試下載鏡像

先刪除本地的鏡像:

docker rmi 10.0.29.22:5000/cwx/whalesay:v1

再從搭建好的倉庫中下載鏡像:

docker pull 10.0.29.22:5000/cwx/whalesay:v1

  •  列出所有鏡像
curl  http://10.0.29.22:5000/v2/_catalog

  • 列出cwx/whalesay鏡像有哪些tag
curl  http://10.0.29.22:5000/v2/cwx/whalesay/tags/list

 

 

3.刪除鏡像

官方推薦刪除方案

  • registry默認配置不允許刪除

  刪除需要在啟動時指定: -e REGISTRY_STORAGE_DELETE_ENABLED=true

docker run -d -e REGISTRY_STORAGE_DELETE_ENABLED=true -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:2.6.0
  • 刪除鏡像操作

  1)找出你想要的鏡像名稱的tag

curl <protocol>://<registry_host>/v2/<鏡像名>/tags/list
 例如:
curl http://10.0.29.104:5000/v2/ucop/tags/list

  2) 拿到digest_hash參數

curl  --header "Accept: application/vnd.docker.distribution.manifest.v2+json" -I -X GET http://<倉庫地址>/v2/<鏡像名>/manifests/<tag>

  例如:

curl --header "Accept: application/vnd.docker.distribution.manifest.v2+json" -I -X GET http://10.0.29.104:5000/v2/ucop/manifests/dev-yc_1

  3)復制digest_hash

Docker-Content-Digest: <digest_hash>

  4)刪除清單

curl -I -X DELETE <protocol>://<registry_host>/v2/<repo_name>/manifests/<digest_hash>

  例如:

curl -I -X DELETE http://10.0.29.104:5000/v2/ucop/manifests/sha256:3dcf7bdec83462c44c1d717dc0c76c56067f966dc4706a2e8d16eb45261a5985

  • registry刪除鏡像時,僅刪除索引,無法清理文件

  要真正刪除文件系統內的文件,需執行以下垃圾回收命令:

docker exec -it <registry_container_id> bin/registry garbage-collect <path_to_registry_config>

  例如:

docker exec registry bin/registry garbage-collect /etc/docker/registry/config.yml

注:注意2.4版本以上的registry才有此功能

 

 

簡易版刪除

  1)打開鏡像的存儲目錄,如有-V操作打開掛載目錄也可以,刪除鏡像文件夾

docker exec <容器名> rm -rf /var/lib/registry/docker/registry/v2/repositories/<鏡像名>

  2)執行垃圾回收操作

docker exec -it <registry_container_id> bin/registry garbage-collect <path_to_registry_config>

注:注意2.4版本以上的registry才有此功能

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM