贝利信息

如何使用Golang实现自动化镜像清理_减少磁盘占用

日期:2025-12-17 00:00 / 作者:P粉602998670
Golang轻量镜像清理工具通过Docker API安全精准清理:跳过有标签、被运行容器引用或7天内创建的镜像,优先删悬空镜像;支持dry-run、keep-days、repo-prefix等控制参数,记录日志与释放空间统计,避免误删。

用 Golang 写个轻量、可控的镜像清理工具,比直接敲 docker system prune -a 更安全、更精准——关键在于:只删明确过期/未被使用的镜像,保留带标签的、正在运行容器依赖的、或最近几天拉取过的镜像。

识别哪些镜像该清理

清理前先“看清楚”,避免误删。Golang 可调用 Docker API(推荐)或解析 docker images 命令输出(简单场景可用):

用 Docker Engine API 安全操作

比 exec.Command 调 shell 更稳定、可读性更好。引入官方 SDK:github.com/docker/docker/api/typesgithub.com/docker/docker/client

加点实用控制逻辑

真正落地时,需要开关和确认机制,避免“一键删光”:

部署成定时任务很简单

编译为单二进制(GOOS=linux GOARCH=amd64 go build -o docker-clean),扔进服务器 crontab:

0 3 * * * /opt/bin/docker-clean -keep-days 5 -include-dangling -log-file /var/log/docker-clean.log >> /dev/null 2>&1

配合 systemd timer 或 GitHub Actions(CI 构建后自动清理构建节点)也很自然。不需要额外依赖,一个二进制 + Docker daemon 就够了。

基本上就这些。不复杂但容易忽略的是:别绕过 API 直接 rm /var/lib/docker,也别在生产环境默认开 --force。留痕、可控、可逆,才是自动化清理的底线。