registry组件提供了HTTP的接口,可以参考:官网API说明
删除思路:
镜像由多个layers层组成,DELETE /v2/<name>/blobs/<digest>
可以用来删除一个单独的层,但是我们的目的不是要删除层。
我们用DELETE /v2/<name>/manifests/<reference>
删除整个镜像的清单,清单被删除后,再由registry的垃圾回收来清理物理的存储。<name>
为仓库名称,<reference>
为查询镜像时(GET /v2/<name>/manifests/<reference>
)返回的Header中的Docker-Content-Digest
的值。
示例:
目标:调用registry的HTTP API删除localhost:5000/amq:3.0
这个镜像
1、查询镜像
shell
curl --location '127.0.0.1:5000/v2/amq/manifests/3.0' \
--header 'Accept: application/vnd.docker.distribution.manifest.v2+json'
Header返回了Docker-Content-Digest
为:sha256:7b9398d6cedb81f8cf7cb30c83f64ee4fd8eb1c301ed1f28951f114fa03255c0
2、删除镜像清单
shell
curl --location --request DELETE '127.0.0.1:5000/v2/amq/manifests/sha256:7b9398d6cedb81f8cf7cb30c83f64ee4fd8eb1c301ed1f28951f114fa03255c0'
3、手动触发垃圾回收,清理物理内存
用docker exec进入registry容器执行命令
shell
docker exec -it registry /bin/sh
shell
/bin/registry garbage-collect /etc/docker/registry/config.yml
垃圾回收参考:官网说明