我们有一个系统,用户可以在其中安装一些 docker 容器。我们对他可以安装的内容没有限制。一段时间后,我们需要清理 - 删除所有未在 swarm 中使用的图像。
使用 docker 远程 API 的解决方案是什么?
我们的想法是让背景图像垃圾收集器线程:
这有意义吗?这会以某种方式影响 swarm 吗?
最佳答案
列出和(尝试)删除所有图像的更清晰的方式
命令 docker rmi $(docker images -q)
的作用与@tpbowden 的答案相同,但方式更简洁。 -q|--quiet
仅列出图像 ID。
它可能会删除经常使用的图像(不在清洁日期运行)
如果这样做,当用户尝试 swarm run deleted-image
时,它将:
“悬垂=真”过滤器:
一个有用的选项是
--filter "dangling=true"
。执行 swarm images -q --filter "dangling=true"
将显示当前未运行的图像。虽然挑战
你的问题让我想起了计算机中的内存管理。你真正的问题是:
How to remove image that won't be used in the future?
这真的很难,真的取决于你的政策。如果您的策略是要删除旧图像,则可以提供帮助的命令是:
docker images --format='{{.CreatedSince}}:{{ .ID}}'
。但随后黑客开始......您可能需要 grep "months"
,然后 cut -d ':' -f 2
。整个命令将导致:
docker rmi $(docker images --format='{{.CreatedSince}}:{{ .ID}}' G months | cut -d ':' -f 2)
请注意,此命令需要在每个 Swarm 代理和 Swarm 管理器上运行,而不是 仅 Swarm 管理器。
Swarm 和注册表
请注意,
swarm pull image:tag
不会 将图像拉到 Swarm 代理上!每个 Swarm 代理必须自己拉取镜像。因此删除仍然使用的图像将导致网络负载。我希望这个答案有帮助。目前没有办法查询“一个月后未使用的图像”AFAIK。
关于docker - 如何删除 swarm 中未使用的 docker 镜像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36775109/