【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

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

相关推荐
风落无尘2 小时前
Stable Diffusion WebUI & ComfyUI 完整安装教程:官方部署+一键整合包+Docker容器化(2026最新)
docker·容器·stable diffusion
小鹏linux3 小时前
Ubuntu 22.04 部署开源免费具有精美现代web页面的Casdoor账号管理系统
linux·前端·ubuntu·开源·堡垒机
在角落发呆3 小时前
Linux转发配置:解锁网络互联的核心密码
linux·运维·网络
齐潇宇4 小时前
Zabbix 7 概述与配置
linux·zabbix·监控告警
江公望5 小时前
Ubuntu htop命令,10分钟讲清楚
linux·服务器
哎呦,帅小伙哦5 小时前
Linux 时间:从原子钟到 clock_gettime 的每一面
linux·运维·服务器
张小姐的猫6 小时前
【Linux】多线程 —— 线程互斥
linux·运维·服务器·c++
CodeMartain6 小时前
Dify Windows 原生部署(无 Docker、纯本地)
运维·docker·容器
YuanDaima20486 小时前
Linux 进阶运维与 AI 环境实战:进程管理、网络排错与 GPU 监控
linux·运维·服务器·网络·人工智能
lolo大魔王8 小时前
Linux 数据文件处理实战:排序、搜索、压缩、归档一站式详解
linux·运维·服务器