自动清理docker build缓存的脚本

wen 实用脚本 1

本文目录导读:

自动清理docker build缓存的脚本

  1. 方案一:基础清理脚本(最常用)
  2. 方案二:保留最近 N 小时的缓存
  3. 方案三:自动清理 + 日志记录
  4. 方案四:带参数的高级版本
  5. 方案五:定时任务脚本(配合 cron)
  6. 使用方式
  7. 注意事项

这里有几个自动清理 Docker build 缓存的脚本方案,根据你的使用场景选择:

基础清理脚本(最常用)

#!/bin/bash
# docker-cleanup.sh
echo "🔍 开始清理 Docker Build 缓存..."
# 显示当前缓存大小(可选)
echo "当前 build 缓存大小:"
docker system df
echo "🗑️  清理 build 缓存..."
# 清理所有未使用的 build 缓存
docker builder prune -a -f
# 额外清理:移除所有未使用的容器、网络、镜像(慎用)
# docker system prune -a -f
echo "✅ 清理完成!"
echo ""
echo "清理后磁盘使用情况:"
docker system df

保留最近 N 小时的缓存

#!/bin/bash
# docker-cleanup-recent.sh
# 保留最近24小时的缓存,清理更早的
HOURS=24
echo "🕐 清理 ${HOURS} 小时前的 build 缓存..."
# 清理超过指定时间的缓存
docker builder prune --filter "until=${HOURS}h" -f
echo "✅ 清理完成"

自动清理 + 日志记录

#!/bin/bash
# docker-cleanup-with-log.sh
LOG_FILE="/var/log/docker-cleanup.log"
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
echo "[${TIMESTAMP}] 开始清理 Docker build 缓存" | tee -a ${LOG_FILE}
# 记录清理前的状态
echo "清理前磁盘使用:" | tee -a ${LOG_FILE}
docker system df >> ${LOG_FILE}
# 执行清理
echo "正在清理..." | tee -a ${LOG_FILE}
docker builder prune -a -f >> ${LOG_FILE} 2>&1
# 记录清理后的状态
echo "清理后磁盘使用:" | tee -a ${LOG_FILE}
docker system df >> ${LOG_FILE}
echo "[${TIMESTAMP}] 清理完成" | tee -a ${LOG_FILE}
echo "----------------------------------------" >> ${LOG_FILE}

带参数的高级版本

#!/bin/bash
# docker-cleanup-advanced.sh
usage() {
    echo "用法: $0 [选项]"
    echo "选项:"
    echo "  -a, --all       清理所有 build 缓存"
    echo "  -d, --days N    清理 N 天前的缓存"
    echo "  -f, --force     强制清理(跳过确认)"
    echo "  -v, --verbose   显示详细信息"
    exit 1
}
ALL=false
DAYS=""
FORCE=false
VERBOSE=false
while [[ $# -gt 0 ]]; do
    case $1 in
        -a|--all)
            ALL=true
            shift
            ;;
        -d|--days)
            DAYS="$2"
            shift 2
            ;;
        -f|--force)
            FORCE=true
            shift
            ;;
        -v|--verbose)
            VERBOSE=true
            shift
            ;;
        *)
            usage
            ;;
    esac
done
echo "🐳 Docker Build 缓存清理工具"
echo "================================"
if [ "$VERBOSE" = true ]; then
    echo "当前 build 缓存状态:"
    docker system df | head -n 10
    echo ""
fi
if [ "$ALL" = true ]; then
    echo "🗑️  清理所有 build 缓存..."
    if [ "$FORCE" = true ]; then
        docker builder prune -a -f
    else
        docker builder prune -a
    fi
elif [ -n "$DAYS" ]; then
    echo "🗑️  清理 ${DAYS} 天前的 build 缓存..."
    docker builder prune --filter "until=${DAYS}d" -f
else
    echo "🗑️  清理未使用的 build 缓存..."
    docker builder prune -f
fi
echo "✅ 清理完成"

定时任务脚本(配合 cron)

#!/bin/bash
# docker-cleanup-cron.sh
# 配合 cron 定时执行
# 每隔2小时清理一次过期的缓存
# 0 */2 * * * /path/to/docker-cleanup-cron.sh
MAX_CACHE_AGE=2  # 保留最近2小时的缓存
docker builder prune --filter "until=${MAX_CACHE_AGE}h" -f > /dev/null 2>&1
# 每周日凌晨3点清理所有缓存
if [ "$(date +%u)" -eq 7 ] && [ "$(date +%H)" -eq 3 ]; then
    docker builder prune -a -f > /dev/null 2>&1
fi

使用方式

  1. 保存脚本nano docker-cleanup.sh

  2. 添加执行权限chmod +x docker-cleanup.sh

  3. 运行脚本

    # 基础清理
    ./docker-cleanup.sh
    # 高级版本
    ./docker-cleanup-advanced.sh -a -v
    ./docker-cleanup-advanced.sh -d 7
  4. 设置定时任务(可选):

    crontab -e
    # 添加以下行:每天凌晨2点清理
    0 2 * * * /path/to/docker-cleanup.sh

注意事项

  • 谨慎使用 -a 参数:会删除所有 build 缓存,包括正在使用的,下次构建时会重新下载依赖
  • CI/CD 环境建议:保留至少最近几小时的缓存,加速构建
  • 生产环境:使用带日志记录的版本,方便排查问题

选择哪个脚本取决于你的具体需求,建议从基础版本开始,逐步完善。

抱歉,评论功能暂时关闭!