全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

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

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

识别哪些镜像该清理

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

  • 跳过有 tag 且不是 : 的镜像(即正式发布的镜像)
  • 跳过被任意运行中容器引用的镜像(通过 docker ps --format '{{.Image}}' 或 API 获取容器列表比对)
  • 跳过创建时间在 N 天内的镜像(比如 7 天内拉取/构建的,用 Created 时间戳判断)
  • 优先清理悬空镜像(dangling=true),它们是构建缓存残留或旧层,无 tag 也无容器引用

用 Docker Engine API 安全操作

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

  • 初始化 client:用 client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation())
  • 列出镜像:cli.ImageList(ctx, types.ImageListOptions{All: true}),拿到每张镜像的 ID、RepoTags、Created、Size 等
  • 检查是否 dangling:len(img.RepoTags) == 1 && img.RepoTags[0] == ":"
  • 删除镜像:cli.ImageRemove(ctx, img.ID, types.ImageRemoveOptions{Force: false, PruneChildren: true}),设 Force: false 让它自动跳过被引用的镜像,更安全

加点实用控制逻辑

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

  • 命令行支持 flag:如 -dry-run(只打印将删哪些)、-keep-days 7-include-dangling
  • 统计清理收益:删前记录总大小,删后再次统计,最后输出 “释放 XXX MB”
  • 失败不中断:某镜像删失败(比如被占用),记录 warn 日志继续下一个,别 panic
  • 支持按仓库名过滤:如 -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。留痕、可控、可逆,才是自动化清理的底线。


# linux  # git  # go  # docker  # github  # golang  # app  # 工具  # amd  # NULL  # format  # include  # var  # len  # 自动化  # 镜像  # 跳过  # 的是  # 才是  # 不需要  # 也很  # 很简单  # 让它  # 关键在于  # 也别 


相关文章: 如何确认建站备案号应放置的具体位置?  如何通过可视化优化提升建站效果?  如何在Golang中指定模块版本_使用go.mod控制版本号  建站之星如何一键生成手机站?  如何快速打造个性化非模板自助建站?  如何在IIS中新建站点并解决端口绑定冲突?  定制建站方案优化指南:企业官网开发与建站费用解析  ,如何利用word制作宣传手册?  如何在阿里云部署织梦网站?  股票网站制作软件,网上股票怎么开户?  如何安全更换建站之星模板并保留数据?  高端建站三要素:定制模板、企业官网与响应式设计优化  如何生成腾讯云建站专用兑换码?  定制建站哪家更专业可靠?推荐榜单揭晓  建站VPS能否同时实现高效与安全翻墙?  武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?  电商网站制作公司有哪些,1688网是什么意思?  南京网站制作费用,南京远驱官方网站?  如何通过cPanel快速搭建网站?  建站主机默认首页配置指南:核心功能与访问路径优化  如何快速搭建高效香港服务器网站?  洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?  深圳网站制作平台,深圳市做网站好的公司有哪些?  建站主机选哪种环境更利于SEO优化?  如何快速搭建虚拟主机网站?新手必看指南  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  佛山网站制作系统,佛山企业变更地址网上办理步骤?  已有域名如何快速搭建专属网站?  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  如何制作一个表白网站视频,关于勇敢表白的小标题?  网站制作软件有哪些,制图软件有哪些?  盐城做公司网站,江苏电子版退休证办理流程?  专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?  c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】  c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】  如何选择靠谱的建站公司加盟品牌?  ,怎么在广州志愿者网站注册?  表情包在线制作网站免费,表情包怎么弄?  ,交易猫的商品怎么发布到网站上去?  微信小程序 五星评分(包括半颗星评分)实例代码  长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?  如何在万网主机上快速搭建网站?  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  用v-html解决Vue.js渲染中html标签不被解析的问题  官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站  高端智能建站公司优选:品牌定制与SEO优化一站式服务  南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?  如何快速使用云服务器搭建个人网站?  导航网站建站方案与优化指南:一站式高效搭建技巧解析  如何用花生壳三步快速搭建专属网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。