舒服,删了 NAS 130G垃圾!又能下电影了!极空间部署PruneMate
极空间最近终于优化了 Docker 应用,在容器编辑、镜像更新上增加了一些功能,大致如下:
1️⃣ 编辑后新建容器 —— 主要场景针对的是复制现有容器配置到新容器,比如 Jellyfin 到 Emby 保留端口和影片路径,只修改镜像。
2️⃣无损编辑 —— 对应的是修改当前容器的少部分配置,页面逻辑上不再和以前一样需要复制再删除,现在对使用者来说是无感的了。

3️⃣镜像更新 —— 现在支持手动更新单个容器镜像,如果是 Compose 部署的,则还是可以使用 Compose 拉新镜像去更新。

但是对于我这个 docker 的重度用户来说,这些界面的更新还不能满足我的“大胃口”,尤其是在空悬镜像管理、容器卷管理上,目前极空间前端页面还是空白,需要官方进一步优化。
很多人可能对 docker 的空悬镜像和容器卷不是很了解,所以今天趁着极空间更新 docker 这个引子,我把这两块给大家做个详细介绍,也顺便给大家提供一套管理的工具,可以帮助我们清理极空间里被 docker 占用的空间。
温馨提示:任何清理类指令都有可能删除你的数据,你需要明确知晓空悬镜像、容器卷的意义,以及你这样操作会导致的后果,否则不建议你一键清除!
什么是空悬镜像?
空悬镜像,本质上就是 image:tag 为 的镜像,它在极空间镜像里表现为sha256:xxx这样的 image 长编码模式。

什么是容器卷?
我们平时使用的-v /极空间路径:/app 这样的属于 bind 挂载,将容器存储挂载到文件目录里。
而docker volume 是将容器存储挂载到专门的容器卷里,它的优势是不存在权限问题,而且无需准备挂载文件。
在极空间里的路径为/data_s004/data/udata/real/zdocker/volumes/卷名/_data,属于页面无法管理,清理不干净又占用空间的东西。

为什么会是它们占用了 NAS 空间?
登录极空间 SSH 后台,我们使用 docker system df 来看一下 docker 的存储空间构成。
大头部分其实就是容器镜像,占据了 174.2GB 空间,容器卷占据了 2GB,然后容器本身只占据 1.7GB 空间。

使用指令docker system df -v来看某一部分的具体构成,可以看到大头的镜像里,有很多标签为的空悬镜像。

我统计了一下它们所占用的空间,指令docker images --filter "dangling=true" --format "{{.ID}} {{.Size}}" 查询镜像id 和镜像存储。
表格拉出来统计了一下,大概共有 82个 空悬镜像,占用 NAS 空间约 105 GB。

极空间部署 prunemate
为了解决这些空悬镜像,以及未使用的镜像、存储卷,最好的方法就是一个个通过删,精准但是耗时耗力。
其次就是通过docker volume/image prune批量删除,一次性解决,但是需要定期去执行。
不过我最近发现一款可以定时执行prune任务的应用 —— prunemate,它不仅可以定时清理本机的空闲 docker 资源,更是远程管理其它 NAS 上的 docker 空闲资源,真正实现了 docker 数据清理的快捷、方便。
打开 docker - compose 页面,将下方的 yaml 代码复制到黑框内,然后替换代码中的【路径】字符。

🔻yaml代码
services:
prunemate:
image: anoniemerd/prunemate:latest
container_name: prunemate
user: '0:0'
ports:
- "7676:8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- 路径/logs:/var/log
- 路径/config:/config
environment:
- PRUNEMATE_TZ=Asia/Shanghai
- PRUNEMATE_TIME_24H=true
restart: unless-stopped
路径替换方法,点击黑框上面的路径查询,然后找到你想配置存储的位置,点击复制路径即可。

容器部署完成以后,切换到容器标签页,点击容器右侧的远程访问按钮,随时随地都可以访问家中极空间的容器页面,便捷度100hun。

项目的整体页面十分简单,最上方是历史清理的数据记录,包括了存储空间、清理次数、清理容器数、清理镜像数、清理网络数、清理卷数。

中间是 Corn 规则,默认的是每天凌晨 3点清理,支持每日、每周、每月等常用 Cron 规则,一般建议每周清理一次就够了,常清常新。

第三块区域是清理内容,包括容器(未运行的)、镜像、网络、卷。一般建议大家开镜像和卷就行了。

第四块区域是管理外部 Docker 主机的,需要使用docker-socket-proxy将外部主机的 docker 2375 TCP 端口映射后才能用,一般不需要开。

最后一个区域是通知管理,目前支持 gotify 和ntfy 两种通知方式,如果不需要的,也可以通过极空间的容器页面去看日志了解清理状态。

部署完容器以后,我直接运行了一次清理工作,给我清理了 377 个镜像,以及 131.1 GB 空间。这里的 377 个镜像,应该指的是 image 的 377 层,而不是实际镜像数量,无视即可。有的时候镜像数据也会不准,毕竟项目还比较新,统计上可能有问题。

再次使用docker system df去查看 docker 占用空间,可以看到镜像已经从 174.2GB 降低到了 43.15GB,这样就省出来 130GB 空间,又能存下 5、6 部 4K原盘!

总结
通过 prunemate 的部署,极空间用户可以更轻松的清理长期被 docker 占用的额外存储,释放更多资源来给其它场景使用。
希望后续极空间可以加大 docker 应用上的细节优化,增加如检索、排序、空悬镜像清理、存储卷管理等功能,增加用户对 docker 的管理能力。
温馨提示:任何清理类指令都有可能删除你的数据,你需要明确知晓空悬镜像、容器卷的意义,以及你这样操作会导致的后果,否则不建议你一键清除!
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

帅的一塌糊涂Orz
校验提示文案
Philboy
校验提示文案
詹三叔
校验提示文案
值友6949820478
校验提示文案
值友6949820478
校验提示文案
詹三叔
校验提示文案
帅的一塌糊涂Orz
校验提示文案
Philboy
校验提示文案