【Docker】Linux 迁移 docker 目录(软链接)

✨Docker 目录介绍

在现代的容器化架构中,Docker 已经从一个单一的工具演变为一个多层级的架构。在 Linux 系统中,其核心数据分布在以下两个主要目录中:

1. /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 服务

bash 复制代码
sudo systemctl stop docker
sudo systemctl stop docker.socket
sudo systemctl stop containerd

迁移数据

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

bash 复制代码
# 创建迁移目录
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/

清理原目录并建立软链接

bash 复制代码
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

验证软链接状态

bash 复制代码
ls -ld /var/lib/docker /var/lib/containerd

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

bash 复制代码
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 服务

bash 复制代码
sudo systemctl start docker
sudo systemctl start containerd

⭐转载请注明出处

本文作者:双份浓缩馥芮白

原文链接:https://www.cnblogs.com/Flat-White/p/19840978

版权所有,如需转载请注明出处。

相关推荐
蜡台6 小时前
Python包管理工具pip完全指南-----2
linux·windows·python
Ujimatsu6 小时前
虚拟机安装Debian 13.x及其常用软件(2026.4)
linux·运维·ubuntu
千百元6 小时前
zookeeper启不来了
linux·zookeeper·debian
AnalogElectronic8 小时前
linux 测试网络和端口是否连通的命令详解
linux·网络·php
Edward111111119 小时前
4月28日防火墙问题
linux·运维·服务器
子琦啊9 小时前
【算法复习】字符串 | 两个底层直觉,吃透高频题
linux·运维·算法
AOwhisky10 小时前
Kubernetes 学习笔记:集群管理、命名空间与 Pod 基础
linux·运维·笔记·学习·云原生·kubernetes
小龙在慢慢变强..11 小时前
目录结构(FHS 标准)
linux·运维·服务器
2035去旅行11 小时前
嵌入式开发,如何选择C标准库
linux·arm开发
刘延林.11 小时前
win11系统下通过 WSL2 安装Ubuntu 24.04 使用RTX 5080 GPU
linux·运维·ubuntu