Docker容器镜像瘦身自动化脚本减少存储占用空间
随着使用 Docker 的时间变长,本地磁盘上会堆积大量无标签镜像(
手动清理不仅低效,还容易漏掉。
本文提供一套自动化脚本方案,帮你定期扫地出门,恢复磁盘可用容量。
先确认你的环境是否适合自动化清理
- 系统:主流 Linux 发行版(CentOS 7+、Ubuntu 18+)
- 已安装:Docker 已运行,并且
docker prune类命令可用 - 注意:确认当前没有重要容器依赖临时镜像(例如正在构建的测试环境),避免误删
编写一个轻量级的镜像瘦身脚本
创建 /opt/clean_docker.sh,粘贴以下内容:
#!/bin/bash
# 清理停止的容器
docker container prune -f
# 清理无标签悬挂镜像
docker image prune -f
# 清理无用构建缓存
docker builder prune -f
# 可选:删除所有未被使用的镜像(更激进,建议先观察)
# docker image prune -a -f
保存后赋予执行权限:
chmod +x /opt/clean_docker.sh
配置定时任务实现全自动化
编辑 crontab:
crontab -e
添加一行,例如每周日凌晨 3 点执行:
0 3 * * 0 /opt/clean_docker.sh >> /var/log/docker_clean.log 2>&1
保存后检查日志是否有输出,确保任务生效。
避开这几个坑,脚本才不会误删
- 确认无依赖:在启用
docker image prune -a前先用docker ps -a确认所有容器都已停止或者不需要保留的镜像。 - 避开业务高峰:清理过程中如果同时拉取镜像,可能冲突,建议选在低负载时段执行。
- 先试运行:可以加
--filter "until=24h"只清理 24 小时前的镜像,降低风险。 - 日志目录存在:确保
/var/log/可写,否则定时任务会静默失败,排错困难。
验证脚本效果——数字会说话
执行脚本后运行 docker system df,对比清理前后的镜像、容器和构建缓存占用。
一般脚本首次运行就能释放 1-10 GB,长期积累的甚至更多。
常见问题解答
- Q:脚本删除运行中的容器吗?
A:不会,docker container prune 只删已停止的容器,运行中的不受影响。
- Q:如何保留最近几天的镜像?
A:在 docker image prune 后加 --filter "until=24h" 即可只清理一天前的悬挂镜像。
- Q:清理了构建缓存,后续构建会变慢吗?
A:是的,但空间收益明显,可根据磁盘情况决定是否每次都清理缓存。
如果你正在处理 Docker 镜像占用过高的问题,建议先按本文步骤配置自动化瘦身脚本,并根据实际环境微调筛选参数。
遇到异常时,优先查看避坑部分和日志文件。