我在gitlab的项目中实现了ci / cd自动化,将代码推送到master分支后,gitlabRunner在服务器上创建了一个新的docker映像,并将最新的提交哈希设置为该映像上的标记,并使用新图片。一段时间后,有很多未使用的图像,我想自动删除它们。
我手动删除了旧图像。
这是我的Makefile
NAME := farvisun/javabina
TAG := $$(git log -1 --pretty=%h)
IMG := ${NAME}:${TAG}
LATEST := ${NAME}:latest
app_build:
docker build -t ${IMG} -f javabina.dockerfile . && \
docker tag ${IMG} ${LATEST}
app_up:
docker-compose -p farvisun-javabina up -d javabina
在所有这些之后,我想要一个简单的bash代码或其他工具来删除未使用的图像,例如保留3个最新图像,或保留过去2天构建,并删除其他图像。
答案 0 :(得分:1)
如果只保留一个图像,可以使用docker image prune -f
,它将删除除与容器关联的图像以外的所有图像,因此,如果在容器运行时运行此命令,它将删除其余图像。
不要忘记每次都频繁运行docker system prune
,以进一步减少存储使用量。
在需要保留多个图像的情况下,可以尝试以下操作:
#!/bin/bash
for tag in $(docker image ls | sed 1,4d | awk '{print $3}')
do
docker image rm -f $tag
done
第一行将列出所有docker映像,从列表中删除要保留的前3个,仅选择具有映像ID的列。然后,对于每个ID,我们都会删除图片。
如果要删除更多内容,请将4d更改为另一个数字。请注意,第一行是标题,因此必须始终将其删除。
如果您想先按标签过滤图像,则可以制作自己的过滤器。
答案 1 :(得分:0)
您可以在编译器中安排“ docker image prune”命令(例如,每天一次或每周一次)。 https://docs.docker.com/engine/reference/commandline/image_prune/