Caching 如何在持续集成中删除旧docker映像以节省磁盘空间

Caching 如何在持续集成中删除旧docker映像以节省磁盘空间,caching,docker,Caching,Docker,在连续集成环境中构建docker映像时,磁盘空间很快就会用完,需要删除旧映像。但是,您不能删除所有旧图像,包括中间图像,因为这会中断缓存 如何在不中断缓存的情况下避免生成代理上的磁盘空间耗尽?我的解决方案是在生成新映像后删除以前版本的映像。这可以确保缓存的映像可用于加速构建,但可以避免旧映像堆积和占用磁盘空间。此方法依赖于具有唯一标记的图像的每个版本 这是我的剧本(要点): #/usr/bin/env bash 用法(){ # ==================================

在连续集成环境中构建docker映像时,磁盘空间很快就会用完,需要删除旧映像。但是,您不能删除所有旧图像,包括中间图像,因为这会中断缓存


如何在不中断缓存的情况下避免生成代理上的磁盘空间耗尽?

我的解决方案是在生成新映像后删除以前版本的映像。这可以确保缓存的映像可用于加速构建,但可以避免旧映像堆积和占用磁盘空间。此方法依赖于具有唯一标记的图像的每个版本

这是我的剧本(要点):

#/usr/bin/env bash
用法(){
# ============================================================
echo此脚本将删除同一存储库的所有图像并
从docker实例回显早于提供的图像。
回声
echo这将清除旧图像,但保留来自
echo提供的映像,可用于缓存。
回声
回声使用:
回声
echo“$./delete-images-before.sh:”
出口1
# ============================================================
}
[$#-ne 1]]&用法
IMAGE=$(echo$1 | awk-F:'{print$1}')
TAG=$(echo$1 | awk-F:'{print$2}')
FOUND=$(docker图像--格式{{.Repository}}:{{.Tag}}}{124; grep${IMAGE}:${Tag})
如果![${FOUND}]]
然后
回显映像${image}:${TAG}不存在
出口2
fi
docker图像--之前的过滤器=${IMAGE}:${TAG}\
|grep${IMAGE}\
|awk“{print$3}”\
|xargs——如果为空,则不运行\
docker--log level=warn rmi--force | | true

我们用来处理这个问题的工具是(dcgc)

建议保留一个要保留的图像列表,不要清理,并将其传递给
--exclude image
(如果您使用
puppet
或其他资源管理系统,将包含图像模式的文件写入磁盘,而使用
--exclude image file
,可能更有用)

#!/usr/bin/env bash

usage(){
# ============================================================
echo This script removes all images of the same repository and
echo older than the provided image from the docker instance.
echo
echo This cleans up older images, but retains layers from the
echo provided image, which makes them available for caching.
echo
echo Usage:
echo
echo '$ ./delete-images-before.sh <image-name>:<tag>'
exit 1
# ============================================================
}

[[ $# -ne 1 ]] && usage

IMAGE=$(echo $1 | awk -F: '{ print $1 }')
TAG=$(echo $1 | awk -F: '{ print $2 }')

FOUND=$(docker images --format '{{.Repository}}:{{.Tag}}' | grep ${IMAGE}:${TAG})

if ! [[ ${FOUND} ]]
then
    echo The image ${IMAGE}:${TAG} does not exist
    exit 2
fi

docker images --filter before=${IMAGE}:${TAG} \
    | grep ${IMAGE} \
    | awk '{ print $3 }' \
    | xargs --no-run-if-empty \
    docker --log-level=warn rmi --force || true