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

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

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

此外,您在执行操作时有什么最佳做法吗?

评论

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

#1 楼

我在
Spotify / docker-gc祝你好运。它可以从cron或作为docker容器运行。


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


退出更多的容器删除了一个小时前的图像。
删除不属于该容器的图像。



评论


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

– AnoE
17年11月16日在14:39

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

– dalore
18年4月19日在10:53

Docker-gc的页面现在建议改为使用docker system prune。但是我没有找到如何从Docker的修剪中移除一些图像。有没有办法用docker system prune排除一些映像?

–亚历山大·阿特缅科(Alexander Artemenko)
19-09-4在9:24

#2 楼

不能称之为最佳实践,但这是cron触发的我们使用的方法,很高兴看到更好的建议。

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

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 }' | xargs --no-run-if-empty docker rm

echo "safely removing old images"
docker images | awk '/weeks ago|months ago|days ago/{print }' | 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}`之前做同样的过滤器

–滕西拜
17 Mar 27 '17 at 19:14

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

–菱形
17 Mar 27 '17 at 20:32

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

–滕西拜
17 Mar 27 '17 at 20:53

@Tensibai绝对是个好习惯,随着时间的流逝,回报会浪费我们很多时间和金钱:)

–菱形
17 Mar 27 '17 at 20:57

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

–滕西拜
17 Mar 27 '17 at 20:59

#3 楼

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

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

我在Codemason上的工作使用了很多不同的Docker映像,这些脚本对我来说是必要的。享受吧!

#4 楼

docker system prune --volumes

从v17开始就是这样做的方法。此处的文档