首页 > 解决方案 > 如何真正删除 Docker blob 和图像以释放私有 Docker 注册表中的空间

问题描述

我在清理正在运行的私有 Docker 注册表中的磁盘空间时遇到问题。我也无法理解 Docker API 调用返回的所有不同的摘要 SHA。

我的私人 docker 注册表设置在.../docker/registry/v2它包含两个文件夹:blobs(~1.4GB)和repositories(~944KB)。我已经在那里推送了几个存储库和多个标签。

起初我只需要从一些 API 调用返回的前端显示中删除 repo/标签,但现在我需要释放磁盘空间并且不知道如何。

1.删​​除回购和标签名称(化妆品)

GET /_catalog通过解析 Docker API 调用的结果和GET /<repo name>/tags/list每个 repo的结果,我在用户前端列出了 docker 存储库及其标签。有时我需要删除一些东西,这样它们就不会出现在这个列表中,我已经能够通过以下方法做到这一点。

GET /<repo name>/manifests/<tag>

DELETE /<repo name>/manifests/<digest SHA in headers.Docker-Content-Digest of the above response>

我不确定这是执行此操作的正确方法,但我需要以某种方式控制前端显示器,这目前已经奏效。

此操作会将本地repositories文件夹的大小减少几 KB,但不会影响blobs文件夹。

2.清理磁盘空间,真正删除repo的

我被困的地方是如何真正释放目录占用的大磁盘空间blobs。有许多不同的摘要 SHA 返回由GET /<repo name>/manifests/<tag>:body.config.digest和各种body.layers[i].digest.

我尝试DELETE /<repo name>/blobs/<some digest>在这些不同的摘要上执行。对于某些人来说它是成功的,对于其他人来说它说找不到 blob。成功后,repositories目录大小会减少几 KB,但blobs目录大小不会改变。

我只是在我已经击中之后才尝试过这个,DELETE /<repo name>/manifests/<headers.Docker-Content-Digest>因为我不想意外破坏某些东西并且无法从前端删除 repo 的/标签。

我的问题是:由于来自私有 Docker 注册表的回购/标签,清除空间的正确方法是什么。我希望最佳实践也将它们从/_catalogand/<repo name>/tags/list中删除。

对于上面讨论的不同摘要的使用/含义的任何见解也将不胜感激。

标签: dockerdocker-registry

解决方案


推荐阅读