以下假设registry的url是docker.admin.com:5000
以下文档针对registry版本2.5.1
-
查看有哪些镜像
curl -XGET docker.admin.com:5000/v2/_catalog 输出: {"repositories":["busybox"]}
此外还支持分页, 详情见 官网
-
查看镜像的所有版本
假如我们想查看镜像docker.admin.com:5000/busybox
的所有版本:curl -XGET docker.admin.com:5000/v2/busybox/tags/list 输出: {"name":"busybox","tags":["latest"]}
此接口也支持分页, 详见官网
-
删除镜像
删除镜像需要我们在启动registry的时候启用了删除, 默认情况下registry是不支持删除的, 需要手动启用, 最简单的办法就是启动的时候加一个环境变量:-e REGISTRY_STORAGE_DELETE_ENABLED=true
就可以了。删除镜像分为删除描述信息和删除文件实体,删除文件描述信息并不会删除实际的文件实体(镜像的fslevel)。 这里以
docker.admin.com:5000/busybox
举例。
删除镜像描述信息:curl -XDELETE docker.admin.com:5000/v2/busybox/manifests/sha256:29f5d56d12684887bdfa50dcd29fc31eea4aaf4ad3bec43daf19026a7ce69912
注意url最后的
sha256:29f5d56d12684887bdfa50dcd29fc31eea4aaf4ad3bec43daf19026a7ce69912
, 这个是代表此镜像的摘要信息digest,是在镜像push到registry的时候生成的, registry 2 要求删除必须使用digest而不能使用tag。 那么怎么获取一个镜像的digest呢? 有两种办法:-
拉取镜像的时候获取
> docker pull docker.admin.com:5000/busybox:12 12: Pulling from busybox Digest: sha256:29f5d56d12684887bdfa50dcd29fc31eea4aaf4ad3bec43daf19026a7ce69912 Status: Downloaded newer image for docker.admin.com:5000/busybox:12
-
通过http api 获取
curl -XGET -I -H "accept:application/vnd.docker.distribution.manifest.v2+json" docker.admin.com:5000/v2/busybox/manifests/test
删除文件
首先查看一个镜像有哪些文件层:
> curl -XGET docker.edooon.com:5000/v2/busybox/manifests/12 .... "fsLayers": [ { "blobSum": "sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4" }, { "blobSum": "sha256:56bec22e355981d8ba0878c6c2f23b21f422f30ab0aba188b54f1ffeff59c190" } ] ....
输出里面有fsLayers字段, 表示镜像有多少文件层, 以及每一层的digest。通过digest删除fslayer:
curl -XDELETE docker.edooon.com:5000/v2/busybox/blobs/sha256:56bec22e355981d8ba0878c6c2f23b21f422f30ab0aba188b54f1ffeff59c190
-
Q.E.D.