出于某些情况,如释放磁盘空间、旧镜像删除等原因,需要我们删除本地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 | #vim /etc/docker/registry/config.yml |
修改后,需要重启registry容器
1 | docker restart registry |
使用API接口 GET /v2/<镜像名>/manifests/
1 | #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 |
得到 Docker-Content-Digest:
1 | sha256:e94c4d08520a7f77cbfa0c2d314bc9281d07874b8c7d9337ad5f541832f7d868 |
然后调用API接口 DELETE /v2/<镜像名>/manifests/
1 | #curl -I -X DELETE http://172.17.51.51:4000/v2/kolla/centos-source-magnum-conductor/manifests/sha256:e94c4d08520a7f77cbfa0c2d314bc9281d07874b8c7d9337ad5f541832f7d868 |
至此,镜像已从 registry 中标记删除,外界访问 pull 不到了。但是 registry 的本地空间并未释放,需要垃圾收集才会释放。
1 | docker exec registry bin/registry garbage-collect /etc/docker/registry/config.yml |