機緣巧合搞了臺ARM服務器(華爲鯤鵬處理器)因而想試水用用,首先碰到了想搭建一個私有倉庫的問題,恰好比較容易的倉庫Nexus三、Harbor沒有ARM架構的,只有回到原點docker本身的Registry,但其沒有一個前段的界面,固然有些第三方的,暫不談論。那麼想要操做管理鏡像就是一個很須要解決的問題,看了官方的原文,但有的東西仍是要本身實驗下才行。不過這方面已經有人總結了,在此就轉貼下,個別的地方有些不痛不癢的修改。
原文連接:https://blog.csdn.net/nklinsirui/article/details/80705306git
[TOC]github
Docker Registry HTTP API v2
Garbage collectiondocker
格式json
docker push <registry_ip>:<registry_port>/<image_name>:<image_tag>
示例api
docker push 192.168.37.100:5000/busybox:0.0.1
格式服務器
docker pull <registry_ip>:<registry_port>/<image_name>:<image_tag>
示例架構
docker pull 192.168.37.100:5000/busybox:0.0.1
Registry V2 不支持經過docker search 去搜索鏡像,須要經過Registry V2的REST API去查詢。app
格式curl
curl -X GET http://<registry_ip>:<registry_port>/v2/_catalog
示例ide
curl -X GET http://192.168.37.100:5000/v2/_catalog
示例輸出例子:
{"repositories":["busybox"]}
格式
curl -X GET http://<registry_ip>:<registry_port>/v2/<image_name>/tags/list
示例
curl -X GET http://192.168.37.100:5000/v2/busybox/tags/list
示例輸出例子:
{"name":"busybox","tags":["latest","0.0.1","0.0.2"]}
刪除registry比較複雜,須要先查到指定標籤的鏡像的digest (sha256校驗和),再根據這個digest來刪除。下面以刪除192.168.37.100:5000/busybox/:0.0.1 鏡像爲例。
1) 先執行如下命令找到該鏡像的digest:
curl -v --silent -H "Accept: application/vnd.docker.distribution.manifest.v2+json" -X GET http://192.168.37.100:5000/v2/busybox/manifests/0.0.1 2>&1 | grep Docker-Content-Digest | awk '{print ($3)}'
Digest輸出例子:
Docker-Content-Digest: sha256:74f634b1bc1bd74535d5209589734efbd44a25f4e2dc96d78784576a3eb5b335
2) 執行如下命令,根據digest刪除鏡像:
curl -v --silent -H "Accept: application/vnd.docker.distribution.manifest.v2+json" -X DELETE http://192.168.37.100:5000/v2/busybox/manifests/sha256:74f634b1bc1bd74535d5209589734efbd44a25f4e2dc96d78784576a3eb5b335
這裏的刪除鏡像只是刪除了一些元數據,須要執行下面的垃圾回收才能真正地從硬盤上刪除鏡像數據。由於缺省Docker private registry不容許刪除鏡像,若是遇到「405 Unsupported」 錯誤,須要在運行registry容器時設置REGISTRY_STORAGE_DELETE_ENABLED環境變量或參數爲true。
docker-compose.yaml 例子:
environment: REGISTRY_STORAGE_DELETE_ENABLED: "true"
docker run 例子:
-e REGISTRY_STORAGE_DELETE_ENABLED="true"
3)垃圾回收
進入registry容器,執行garbage-collect 命令執行垃圾回收。
docker exec -it registry /bin/registry garbage-collect /etc/docker/registry/config.yml
《Docker容器與容器雲》 3.5 Docker鏡像管理,3.6.1 Docker鏡像元數據管理
https://stackoverflow.com/questions/31251356/how-to-get-a-list-of-images-on-docker-registry-v2
https://stackoverflow.com/questions/37033055/how-can-i-use-the-docker-registry-api-v2-to-delete-an-image-from-a-private-regis
https://stackoverflow.com/questions/25436742/how-to-delete-images-from-a-private-docker-registry
https://github.com/docker/distribution/issues/1326
https://github.com/docker/distribution/issues/989