docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > Docker磁盘占用排查与迁移

Docker磁盘占用排查与迁移的完整复盘过程

作者:黑风风

这篇文章主要介绍了Docker磁盘占用排查与迁移的完整复盘过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

本文记录了一次 Docker 磁盘占用排查与迁移的完整复盘。

一、问题背景

服务器磁盘分布大致如下:

初始现象是:

二、Docker 磁盘占用的正确查看方式

1. 系统层面(df)

df -h

如果看到类似:

overlay 40G 20G 18G 54% /var/lib/docker/overlay2/.../merged

不要误判

这并不是 Docker 独占 40G,而是 overlayfs 映射了宿主机根分区

2. Docker 视角(关键命令)

基础统计

docker system df

详细拆分(强烈推荐)

docker system df -v

你可以精确看到:

每个镜像的:

构建缓存(Build Cache)的真实占用

容器自身的写层大小

三、为什么会看到大量<none>镜像?

示例:

<none>  <none>  554MB
<none>  <none>  554MB
...

这些并不是“异常镜像”,而是悬空镜像(dangling images)

产生原因总结

  1. 多次 docker build,旧镜像标签被新镜像覆盖
  2. 构建中间层未被任何镜像引用
  3. CI / 自动构建未做清理策略

本质上:

Docker 很保守,不会自动删除历史构建产物

四、Docker 构建缓存(Build Cache)才是“隐形大户”

在一次排查中发现:

Build cache usage: 11.56GB

而镜像 + 容器加起来不到 1GB。

这类缓存来自:

清理方式

docker builder prune

如果你想彻底清:

docker system prune -a

⚠️ 注意:

这会删除所有未被容器使用的镜像

五、Docker 数据目录迁移的正确姿势(简版)

以下步骤在 Docker 已停止 的前提下进行

1. 停止 Docker

systemctl stop docker

2. 拷贝数据(推荐 rsync)

rsync -a /var/lib/docker/ /data/docker/

3. 修改配置

vim /etc/docker/daemon.json
{
  "data-root": "/data/docker"
}

4. 启动 Docker

systemctl start docker

5. 验证

docker info | grep "Docker Root Dir"

参考资料:

1.Docker 官方文档 · 磁盘使用分析(docker system df)

2.Docker 官方文档 · 清理未使用资源(prune)

3.Docker 官方文档 · BuildKit 与构建缓存

解释 Build Cache 的来源、生命周期以及为何会大量占用磁盘。

https://docs.docker.com/build/cache/

4.Docker 官方文档 · daemon.json 配置项说明

包含 data-root(Docker 数据目录迁移)的官方定义与示例。

https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-fil

六、总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文