容器磁盘占用
容器列表中的 磁盘 列显示每个容器占用了多少磁盘空间,运行中和已停止的容器都会显示。它把 Docker 能测量的两部分加在一起:容器向自身文件系统写入的数据,以及它挂载的 Docker 卷。把鼠标悬停在数值上可以看到每一部分。
大小以二进制单位显示,所以 Docker 的 20.5kB 在这里显示为 20 KB。
统计范围
- 可写层:容器在挂载点之外创建或修改的所有文件,例如临时文件、缓存或启动后安装的软件包。它是
docker ps -s中SIZE列的第一个值。 - 卷,包括容器挂载的命名卷和匿名卷。这些就是
docker system df -v列出的大小。被多个容器使用的卷会计入每个容器,提示中会注明它是共享的。
以下内容不计入:
- 绑定挂载,例如
./data:/var/lib/postgresql/data - 镜像,即容器运行所用的镜像,由该镜像的所有容器共享
- Docker 自己为该容器保存的日志文件
- 没有任何容器使用的卷,因为没有可以显示它们的行。它们会计入主机的 可回收空间。
绑定挂载
Docker 对绑定挂载的主机目录里有什么一无所知,要测量这样的目录就得遍历其中的每个文件,而 Dozzle 不会这样做。把数据放在绑定挂载里的数据库,即使存有很多 GB 数据,在这里也只显示几 KB。要测量这样的目录,请在主机上运行:
du -sh /data/postgres要监控这些目录所在的磁盘,请按照 主机指标 中的说明,把它挂载到主机卡片上。
可回收空间
主机卡片会在磁盘指示旁显示 可回收:没有任何容器使用的内容所占的空间,与 docker system df 中 RECLAIMABLE 列的总数相同。把鼠标悬停在上面,可以看到未使用的镜像、未使用的卷、已停止的容器和构建缓存各占多少。它和卷一起刷新,所以最多每 20 分钟刷新一次。
清理
启用 操作 后,同一个弹出框可以删除它列出的内容。勾选要删除的类型,然后点击 清理。Dozzle 会先列出将被删除的内容并在删除前确认,删除后立即重新测量主机,让数字马上更新。
每种类型执行对应的 prune 命令:
- 未使用的镜像:
docker image prune -a。已停止的 stack 下次启动时会重新拉取镜像。 - 未使用的卷:
docker volume prune -a,命名卷也会被删除。它们默认不勾选,并且需要再次确认,因为当前没有容器使用的卷,仍可能存放着某个只是为了重新部署而被移除的容器的数据库。 - 已停止的容器:
docker container prune - 构建缓存:
docker builder prune -a
比它所连接的 Dozzle 更旧的 agent 无法清理,弹出框会说明这一点。
定时清理
在同一弹出框底部的 自动清理 中,选择每天或每周(周日)以及一个时间,时间使用服务器的时区。默认关闭。到点后,Dozzle 会依次清理每台已连接的主机:未使用的镜像、已停止的容器和构建缓存。定时清理永远不会删除卷。弹出框会显示上次运行释放了多少空间。
该计划与 自动更新 设置一起保存在 dozzle.yml 中,无需重启即可生效。它只在服务器模式下运行,并会先等待正在进行的容器更新完成。设置 DOZZLE_AUTO_CLEANUP 或 DOZZLE_AUTO_CLEANUP_TIME 会固定该计划,弹出框此时只显示它。
何时更新
Docker 不会在任何地方保存这些值。每次被询问时,它都会遍历文件来计算,所以 Dozzle 很少询问。
可写层的测量时机:
- Dozzle 启动后不久,对每个容器测量一次
- 容器停止时再测量一次,因为此后它的可写层不会再变化
- 对于运行中的容器,在它写入约 100 MB 之后测量,或者只要它写入过任何数据,每 5 分钟测量一次
卷在第一次测量之后立即测量,之后最多每 20 分钟测量一次。Docker 只能一次性测量所有卷,所以每次刷新都会遍历主机上的每个卷。在两次刷新之间创建的容器会在下一次刷新时显示它的卷。
第一次测量之后的所有测量只在有人打开 Dozzle 时进行。容器在首次测量之前显示 –。