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

用 Golang 写个轻量、可控的镜像清理工具,比直接敲 docker system prune -a 更安全、更精准——关键在于:只删明确过期/未被使用的镜像,保留带标签的、正在运行容器依赖的、或最近几天拉取过的镜像。
清理前先“看清楚”,避免误删。Golang 可调用 Docker API(推荐)或解析 docker images 命令输出(简单场景可用):
<none>:<none></none></none> 的镜像(即正式发布的镜像)docker ps --format '{{.Image}}' 或 API 获取容器列表比对)Created 时间戳判断)比 exec.Command 调 shell 更稳定、可读性更好。引入官方 SDK:github.com/docker/docker/api/types 和 github.com/docker/docker/client
client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation())
cli.ImageList(ctx, types.ImageListOptions{All: true}),拿到每张镜像的 ID、RepoTags、Created、Size 等len(img.RepoTags) == 1 && img.RepoTags[0] == "<none>:<none>"</none></none>
cli.ImageRemove(ctx, img.ID, types.ImageRemoveOptions{Force: false, PruneChildren: true}),设 Force: false 让它自动跳过被引用的镜像,更安全真正落地时,需要开关和确认机制,避免“一键删光”:
立即学习“go语言免费学习笔记(深入)”;
-dry-run(只打印将删哪些)、-keep-days 7、-include-dangling
-repo-prefix "myapp",只清理自己项目相关的临时镜像编译为单二进制(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。留痕、可控、可逆,才是自动化清理的底线。
以上就是如何使用Golang实现自动化镜像清理_减少磁盘占用的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号