Docker-GC 项目详解:自动化清理Docker容器与镜像的实用指南
2025-07-08 03:51:04作者:邵娇湘
项目概述
Docker-GC 是一个用于自动化清理Docker容器和镜像的Shell脚本工具。它通过智能识别并删除不再使用的Docker资源,帮助用户有效管理磁盘空间,避免因长期积累的废弃容器和镜像导致的存储问题。
核心功能
- 容器清理:自动删除已停止运行超过指定时间(默认1小时)的容器
- 镜像清理:自动删除未被任何容器使用且创建时间超过阈值的镜像
- 卷清理:可选功能,可清理未被任何容器使用的数据卷
- 排除机制:支持配置白名单,保护特定容器和镜像不被清理
工作原理
容器清理流程
- 获取所有容器列表
- 识别正在运行的容器
- 排除配置文件中指定的容器
- 检查已停止容器的停止时间
- 删除超过宽限期(GRACE_PERIOD_SECONDS)的容器
镜像清理流程
- 获取所有镜像列表
- 识别正在被使用的镜像
- 排除配置文件中指定的镜像
- 检查镜像的创建时间
- 删除未被使用且超过宽限期的镜像
关键配置参数
参数名 | 默认值 | 说明 |
---|---|---|
GRACE_PERIOD_SECONDS | 3600 | 宽限期(秒),超过此时长的资源将被清理 |
STATE_DIR | /var/lib/docker-gc | 状态文件存储目录 |
EXCLUDE_FROM_GC | /etc/docker-gc-exclude | 镜像排除列表文件 |
EXCLUDE_CONTAINERS_FROM_GC | /etc/docker-gc-exclude-containers | 容器排除列表文件 |
REMOVE_VOLUMES | 0 | 是否清理未使用的数据卷 |
DRY_RUN | 0 | 试运行模式,只显示将被清理的资源而不实际执行 |
使用场景
生产环境维护
在长期运行的Docker环境中,定期执行docker-gc可以:
- 防止因日志、临时文件等导致的磁盘空间耗尽
- 保持系统整洁,提高管理效率
- 避免旧版本镜像占用过多存储空间
CI/CD流水线
在持续集成/持续部署环境中:
- 每次构建后自动清理测试容器
- 保留必要的基础镜像,删除中间构建层
- 控制构建节点的存储使用量
高级功能
- 最小保留镜像数:通过MINIMUM_IMAGES_TO_SAVE参数,可确保每个镜像至少保留指定数量的版本
- 强制删除:FORCE_CONTAINER_REMOVAL和FORCE_IMAGE_REMOVAL参数可强制删除资源
- 日志记录:支持输出到系统日志或标准输出
- 排他性执行:通过PID文件确保同一时间只有一个实例运行
最佳实践
- 配置排除列表:将关键容器和基础镜像加入排除列表,避免误删
- 调整宽限期:根据实际需求调整GRACE_PERIOD_SECONDS,平衡存储使用和安全性
- 定期执行:通过cron设置定期任务,如每天凌晨执行清理
- 监控日志:定期检查清理日志,确认符合预期
注意事项
- 清理操作不可逆,建议先在DRY_RUN模式下测试
- 对于生产环境,应谨慎设置宽限期和排除列表
- 数据卷清理需特别小心,确保不删除重要数据
- 不同Docker版本可能存在兼容性问题,建议测试后再部署
Docker-GC作为一个轻量级的维护工具,能够有效解决Docker环境中的资源积累问题,合理配置和使用可以显著提升Docker环境的稳定性和管理效率。