是否有定期清除旧Docker映像的最佳实践和/或工具?


13

从Docker注册表中删除旧映像时,是否有一种优雅的方法或最佳实践?

我在这里看到很多请求/问题:https : //github.com/docker/docker-registry/labels/delete,但是没有找到一个很好的/受欢迎的解决方案。

那么,有没有工具或技术可以帮助我做到这一点?

另外,您在进行操作时是否遵循最佳做法?


2
您是否在询问如何清理注册表?(这是您提供的链接和问题),但是可接受的答案不是清除注册表,而是清除本地泊坞窗。
dalore '18

Answers:


10

我在Spotify / docker-gc方面很幸运 。它可以从cron或作为docker容器运行。

一个简单的Docker容器和图像垃圾收集脚本。

  • 一个多小时前退出的容器将被删除。
  • 之后不属于任何剩余容器的图像将被删除。

2
乍一看,似乎在所有bash内容之后,或多或少都来自@rombob答案的单线子集。是真的,还是docker-gc我缺少某种“智能” ?
AnoE

1
Op链接并询问有关如何从注册表中清除的问题,但是docker-gc不会从注册表中清除,它只是从本地计算机中清除。我想OP确实是在问如何在当地清理
dalore

现在建议改为使用Docker-gc的页面docker system prune。但是我没有找到如何从Docker的修剪中移除一些图像。有没有办法排除某些图像docker system prune
亚历山大·阿捷缅科

9

不能说这是最佳实践,但这是cron触发的,我们很高兴看到更好的建议。

echo "safely removing untagged images"
docker rmi $(docker images | awk '/<none>/{print $3}')

echo "safely removing stopped containers"
docker rm $(docker ps -a -q)

echo "safely removing old containers"
docker ps -a | awk '/weeks ago|months ago|days ago/{print $1}' | xargs --no-run-if-empty docker rm

echo "safely removing old images"
docker images | awk '/weeks ago|months ago|days ago/{print $3}' | xargs --no-run-if-empty docker rmi

echo "safely removing old volumes, custom rebuild of martin/docker-cleanup-volumes image"
docker run -v /var/run/docker.sock:/var/run/docker.sock -v $(readlink -f /var/lib/docker):/var/lib/docker --rm example/docker-cleanup-volumes

echo "native cleanup Docker => 12"
docker system prune -f

请不要链接grep和awk,在awk命令`regex {command}`之前做同样的过滤器
Tensibai

1
@Tensibai让AWK巫师高兴的任何事情:)
rombob

以防万一,这不仅是徒劳的,还可以节省流程生成和大量上下文更改:)在这里并没有太大变化,但是任何提倡它的场合都很好:)
Tensibai

@Tensibai肯定是,良好的习惯会随着时间的流逝而得到回报,产生的卵花了我们的时间和金钱:)
rombob

特别是当您解析/格式化数十亿行的日志文件以准备R输入时:)在这里,我希望不会有几十行。
Tensibai

4

在我的本地计算机(mac)上,我有一个小脚本,我发现我定期运行该脚本,以清理所有多余的图像clean-docker-for-mac.sh

对于我的服务器,我运行meltwater / docker-cleanup,它会定期清理退出的容器并删除未使用的映像和卷。

在Codemason上的工作中,我使用了许多不同的Docker映像,这些脚本对我来说是必需的。请享用!


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.