1

我在我的项目中使用 gitlab 进行了 ci/cd 自动化,在将我的代码推送到 master 分支后,gitlab 运行程序在我的服务器上创建一个新的 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 天的构建,并删除其他图像。

4

2 回答 2

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 更改为另一个数字。请注意,第一行是标题,因此必须始终将其删除。

如果您想先按标签过滤图像,您可以制作自己的过滤器。

于 2019-09-23T07:18:10.883 回答
0

您可以在编译机中安排(例如每天一次或每周一次)“docker image prune”命令。 https://docs.docker.com/engine/reference/commandline/image_prune/

于 2019-09-23T07:17:10.357 回答