说我有一台构建机器,可以构建许多docker镜像probe_success == 0
。每创建100张图片,我会消耗大约1GB的磁盘空间,我当然不需要全部。我想保留最近的10个映像(并删除所有较旧的映像),但我想确保我拥有10个构建/映像中的所有缓存层。如果我缓存了所有图层,那么下一次运行就更有可能实现快速构建。
问题在于所有图像(非常旧和全新的)共享许多层,因此我不能盲目删除旧图像,因为与新图像有很多重叠。
我不想使用myimage:myversion
(https://docs.docker.com/config/pruning/#prune-images),因为这取决于我拥有的容器(无论状态如何)并且正在删除容器,因此修剪会导致删除太多东西
有没有可以定期运行的简单命令来达到上述状态?
答案 0 :(得分:3)
简单,没有,但是可以使用一些shell向导。我认为这个shell脚本可以满足您的要求:
#!/bin/sh
docker images --filter 'reference=myimage:*' \
--format '{{ .CreatedAt }}/{{ .ID }}/{{ .Repository }}:{{ .Tag }}' \
| sort -r \
| tail +11 \
| cut -f/ -d2 \
| xargs docker rmi
(您可以尝试一次运行此步骤以查看结果如何。)
小块:
myimage:*
图像。 (如果您使用的是私有注册表,则必须将注册表名称作为一个单独的部分包括在内,并且必须显式包括该标记;例如,要列出您需要的所有-f 'reference=gcr.io/*/*:*'
GCR映像。)--format
选项开始,是十六进制图像ID)。docker rmi
的命令行参数。 extended docker images
documentation列出了所有有效的--format
选项。