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