容器镜像瘦身自动化脚本减少存储占用

为什么容器镜像会越用越占空间

Docker容器在不断拉取、构建、停止后,本地会堆积大量中间层镜像、悬空镜像(none标签)以及构建缓存。
如果团队频繁更新应用,磁盘空间很容易被撑满。
手动执行docker system prune虽然能临时释放,但无法针对特定项目做精细化清理。
因此,编写一个容器镜像瘦身自动化脚本,定期检查和清除无用资源,是减少存储占用的最直接方案。

准备工作:环境检查与状态快照

在动手写脚本前,先确认你的服务器已安装Docker,并且当前镜像目录空间足够。
执行以下命令查看目前的存储占用情况:

docker system df

输出会显示 Images、Containers、Local Volumes 的大小。
记下这个值,后面对比效果。

如果你使用的是宝塔面板,可以在“Docker - 管理”页面看到类似统计,但命令行更准确。

编写瘦身自动化脚本

以下脚本包含三个核心动作:

  1. 删除所有悬空镜像(:
  2. 清理停止的容器
  3. 清理构建缓存和未被使用的卷(可选)

完整脚本示例

#!/bin/bash
# docker-slim.sh: 自动清理无用Docker资源

LOG_FILE="/var/log/docker-slim.log"
echo "=== $(date) 开始镜像瘦身 ===" >> $LOG_FILE

# 删除悬空镜像
echo "删除悬空镜像..." >> $LOG_FILE
docker image prune -af >> $LOG_FILE 2>&1

# 删除停止容器
echo "删除停止的容器..." >> $LOG_FILE
docker container prune -f >> $LOG_FILE 2>&1

# 删除未被使用的卷(可选,谨慎使用)
echo "删除无用卷..." >> $LOG_FILE
docker volume prune -f >> $LOG_FILE 2>&1

echo "=== 结束 ===" >> $LOG_FILE

将脚本保存为 /opt/scripts/docker-slim.sh,并赋予执行权限:

chmod +x /opt/scripts/docker-slim.sh
避坑提醒docker image prune -af 会删除所有没有标签且没有被容器引用的镜像层。如果某些镜像被多个容器共用,删除前务必确认业务不受影响。建议先在测试环境运行。

配置定时任务实现自动化

直接手动运行脚本不够省心,搭配cron定时执行才能真正释放人力。

编辑crontab

crontab -e

添加以下一行,表示每天凌晨2点执行一次:

0 2 * * * /opt/scripts/docker-slim.sh

保存退出。
可通过crontab -l查看是否写入成功。

如果你使用宝塔面板,可以在“计划任务”中添加Shell脚本,周期设为每天,命令填完整路径。

效果验证与常见问题

验证方法

执行脚本前先记录磁盘占用,运行后再次运行docker system df对比。
示例输出:

TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          5         3         450MB     120MB (26%)
Containers      3         1         0B        0B
Local Volumes   2         1         200MB     50MB (25%)

如果RECLAIMABLE有明显变化,说明瘦身成功。

高频问题解答

Q:脚本运行后导致镜像丢失,容器启动失败怎么办?
A:只要镜像有标签(docker images中显示为:形式),不会被prune -af删除。如果误删,可以从远程仓库重新拉取。建议脚本执行前先做一次全量备份。

Q:我有些容器使用了无标签镜像作为依赖,怎么保留?
A:使用docker image prune -a会在删除悬空镜像的同时也删除未被引用的带标签镜像(如果没有任何容器使用)。保险做法:先执行docker ps -a列出的容器ID,然后用docker inspect查看所用镜像,确保它们有标签或手动加标签。

Q:能否只清理某个项目的镜像?
A:可以。在脚本中加入过滤条件,例如docker image prune --filter label=project=myapp。需要镜像构建时添加标签。

总结

通过上述自动化脚本和定时任务配置,你就能做到每周甚至每天自动清理容器镜像中的“垃圾”。
核心步骤只有三步:写脚本、赋权限、开定时。
后续根据业务需要可调整清理范围(比如只清理悬空镜像,保留中间构建缓存)。容器镜像瘦身自动化脚本能有效减少存储占用,尤其适合运维人员管理多台服务器时批量使用。
如果在实际执行中遇到问题,建议优先检查权限和日志文件,或回看本文的避坑说明。

分享到:
上一篇
静态资源合并压缩Nginx配置节省带宽
下一篇
多租户OneAPI权限分离杜绝数据互通泄露
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意