✨Docker 目录介绍

📅 2026/7/3 2:40:05 👁️ 阅读次数 📝 编程学习
✨Docker 目录介绍

/var/lib/docker (Docker Engine 管理目录)

此目录是 Docker 守护进程(Docker Daemon)的高层管理空间,主要负责容器的生命周期管理、配置以及持久化存储。

  • Containers (容器元数据与日志):存储容器的配置文件(如config.v2.json)、运行时状态以及容器的标准输出日志(stdout/stderr,通常为 JSON 格式)。
  • Volumes (卷数据):默认情况下,用户创建的命名卷(Named Volumes)数据存储在volumes/子目录下。这是容器持久化数据的核心区域。
  • Image Metadata (镜像元数据):存储镜像的清单(Manifest)、层级关系索引以及本地标签信息,但不直接存储镜像的二进制文件系统层。
  • Buildkit (构建缓存):存储使用 Docker BuildKit 构建镜像时产生的中间缓存数据。
  • Network (网络配置):管理容器的虚拟网络(如 Bridge, Overlay, Macvlan)的配置及状态。

2. /var/lib/containerd (Containerd 运行时目录)

containerd是一个工业标准的容器运行时(Container Runtime),Docker 目前将其作为底层的核心组件。该目录负责处理最底层的存储和执行逻辑。

  • Content (镜像层内容):存储实际拉取回来的压缩镜像层文件(Blobs)。这是镜像数据物理存在的真正位置。
  • Snapshotter (快照与文件系统):这是占用空间最大的部分(如overlayfs)。它负责将压缩的镜像层解压并叠加,形成容器运行所需的根文件系统,并管理每个容器的可写层(Writable Layer)。
  • Metadata (元数据数据库):包含一个 BoltDB 或类似的数据库,用于记录镜像内容、快照以及命名空间(Namespaces)之间的关联。
  • IO Management:管理容器进程的输入输出流。

为什么要同时迁移这两个目录?

在早期的 Docker 版本中,镜像存储直接位于/var/lib/docker/overlay2。但在现代架构中,Docker 将底层存储和运行委派给了containerd

  1. 分工明确/var/lib/docker负责上层的业务逻辑(如卷管理、网络编排),而/var/lib/containerd负责底层的大规模二进制文件存储。
  2. 空间分布:大部分的磁盘占用来自于containerd的镜像快照和层数据。仅迁移docker目录通常无法解决根分区爆满的问题。
  3. 一致性:通过软链接或挂载方式将两者同时迁移到数据盘,可以确保容器环境的完整性,并避免因路径不一致导致的启动失败或配置冲突。

✨Linux 迁移 docker 目录

目前许多 Nvidia 的 LLM 框架都会提供一个 NGC 镜像

在使用 GPU 租赁平台使用 docker 时可能会遇到系统盘空间不足的情况

此时需要迁移 docker 目录

具体操作步骤如下

停止 docker 服务

sudo systemctl stop docker sudo systemctl stop docker.socket sudo systemctl stop containerd

迁移数据

使用rsync而不是mv,因为rsync能够更好地保留文件权限和层级结构,且万一中途出错,原始数据还在。

# 创建迁移目录 sudo mkdir -p /mnt/data/docker-data # 迁移 docker 目录 sudo rsync -avz /var/lib/docker/ /mnt/data/docker-data/docker/ # 迁移 containerd 目录 sudo rsync -avz /var/lib/containerd/ /mnt/data/docker-data/containerd/

清理原目录并建立软链接

sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/containerd sudo ln -s /mnt/data/docker-data/docker /var/lib/docker sudo ln -s /mnt/data/docker-data/containerd /var/lib/containerd

验证软链接状态

ls -ld /var/lib/docker /var/lib/containerd

预期输出:你会看到类似下方的结果,注意行首的l(代表 link)以及末尾的箭号->

lrwxrwxrwx 1 root root 26 Apr 9 14:30 /var/lib/containerd -> /mnt/data/docker-data/containerd lrwxrwxrwx 1 root root 22 Apr 9 14:30 /var/lib/docker -> /mnt/data/docker-data/docker

恢复 docker 服务

sudo systemctl start docker sudo systemctl start containerd