如何删除Registry中kolla-ansible的镜像

出于某些情况,如释放磁盘空间、旧镜像删除等原因,需要我们删除本地Registry仓库中的镜像。本篇文章,将讲解如何在OpenStack环境的kolla-ansible中,删除本地Registry中的镜像。

Registry中的镜像管理

查看Registry仓库中现有的镜像:

1
#curl -XGET http://172.17.51.51:4000/v2/_catalog

查看Registry仓库中指定的镜像,如这里的centos-source-magnum-conductor。

1
#curl -XGET http://172.17.51.51:4000/v2/kolla/centos-source-magnum-conductor/tags/list

如何删除私有 registry 中的镜像

首先,在默认情况下,docker registry 是不允许删除镜像的,需要在配置文件config.yml中启用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#vim /etc/docker/registry/config.yml
version: 0.1
log:
fields:
service: registry
storage:
cache:
blobdescriptor: inmemory
filesystem:
rootdirectory: /var/lib/registry
delete:
enabled: true
http:
addr: :5000
headers:
X-Content-Type-Options: [nosniff]
health:
storagedriver:
enabled: true
interval: 10s
threshold: 3

修改后,需要重启registry容器

1
#docker restart registry

使用API接口 GET /v2/<镜像名>/manifests/ 来取得要删除的镜像:Tag所对应的 digest。比如,要删除kolla/centos-source-magnum-conductor:queens镜像,那么取得 digest 的命令是:

1
2
3
4
5
6
7
8
9
#curl --header "Accept: application/vnd.docker.distribution.manifest.v2+json" -I -X HEAD http://172.17.51.51:4000/v2/kolla/centos-source-magnum-conductor/manifests/queens
HTTP/1.1 200 OK
Content-Length: 8666
Content-Type: application/vnd.docker.distribution.manifest.v2+json
Docker-Content-Digest: sha256:e94c4d08520a7f77cbfa0c2d314bc9281d07874b8c7d9337ad5f541832f7d868
Docker-Distribution-Api-Version: registry/2.0
Etag: "sha256:e94c4d08520a7f77cbfa0c2d314bc9281d07874b8c7d9337ad5f541832f7d868"
X-Content-Type-Options: nosniff
Date: Sat, 28 Apr 2018 02:44:46 GMT

得到 Docker-Content-Digest:

1
sha256:e94c4d08520a7f77cbfa0c2d314bc9281d07874b8c7d9337ad5f541832f7d868

然后调用API接口 DELETE /v2/<镜像名>/manifests/ 来删除镜像。比如:

1
2
3
4
5
6
7
#curl -I -X DELETE http://172.17.51.51:4000/v2/kolla/centos-source-magnum-conductor/manifests/sha256:e94c4d08520a7f77cbfa0c2d314bc9281d07874b8c7d9337ad5f541832f7d868
HTTP/1.1 202 Accepted
Docker-Distribution-Api-Version: registry/2.0
X-Content-Type-Options: nosniff
Date: Sat, 28 Apr 2018 03:34:31 GMT
Content-Length: 0
Content-Type: text/plain; charset=utf-8

至此,镜像已从 registry 中标记删除,外界访问 pull 不到了。但是 registry 的本地空间并未释放,需要垃圾收集才会释放。

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

0%