gpt4 book ai didi

docker - 如何删除 swarm 中未使用的 docker 镜像?

转载 作者:行者123 更新时间:2023-12-04 22:43:41 25 4
gpt4 key购买 nike

我们有一个系统,用户可以在其中安装一些 docker 容器。我们对他可以安装的内容没有限制。一段时间后,我们需要清理 - 删除所有未在 swarm 中使用的图像。

使用 docker 远程 API 的解决方案是什么?

我们的想法是让背景图像垃圾收集器线程:

  • 列出所有图像
  • 尝试删除一些
  • 如果失败,忽略

  • 这有意义吗?这会以某种方式影响 swarm 吗?

    最佳答案

    列出和(尝试)删除所有图像的更清晰的方式

    命令 docker rmi $(docker images -q) 的作用与@tpbowden 的答案相同,但方式更简洁。 -q|--quiet 仅列出图像 ID。

    它可能会删除经常使用的图像(不在清洁日期运行)

    如果这样做,当用户尝试 swarm run deleted-image 时,它​​将:

  • 要么拉取镜像( < 在此插入网络消耗警告/> )
  • 如果我没记错的话,要么只是阻止,因为拉动操作在 swarm 中不是自动的( < 在此处插入有关误解的 Swarm 行为的频繁支持请求警告/> )。

  • “悬垂=真”过滤器:

    一个有用的选项是 --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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com