docker - 如何真正删除 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 注册表的回购/标签,清除空间的正确方法是什么。我希望最佳实践也将它们从/_catalog
and/<repo name>/tags/list
中删除。
对于上面讨论的不同摘要的使用/含义的任何见解也将不胜感激。
解决方案
推荐阅读
- android - android studio的activity_main.xml卡在加载中
- c++ - Visual Studio 2019 16.4.5 中涉及 Microsoft::WRL 的无影响但令人讨厌的错误
- node.js - JSDoc 配置排除输出文件
- javascript - 如何将我的“for”循环变成“for of”循环?
- c# - 如何通过服务通道调用服务
- javascript - 未捕获的 SyntaxError:意外的标记 ')'
- python - 使用python显示来自多个文件夹的随机图像
- html - Bootstrap:无法在同一行对齐输入
- apache - 如何为用户的自定义域动态设置 SSLCertificateFile
- java - 正则表达式 java 中的 4 个条件中的 3 个