April 1, 2025
By: Kevin

将正在使用的 Linux 系统转换为 Docker 镜像并迁移到新系统

  1. 步骤 1: 创建 Linux 根文件系统的 tar 备份
  2. 步骤 2: 将 rootfs.tar 导入为 Docker 镜像
  3. 步骤 3: 测试镜像是否可用
  4. 步骤 4: 导出 Docker 镜像
  5. 步骤 5: 将 Docker 镜像传输到新系统
    1. 方法 1: 使用 scp 远程拷贝
    2. 方法 2: 使用 rsync(更快, 更稳定)
    3. 方法 3: 使用 U 盘或移动硬盘
  6. 步骤 6: 在新系统上导入 Docker 镜像
  7. 步骤 7: 确保 CUDA 和 NVIDIA GPU 兼容
    1. 检查 NVIDIA 驱动
    2. 安装 NVIDIA Container Toolkit
    3. 运行 Docker 并使用 GPU
  8. 总结

img

在某些情况下, 我们可能希望将一个正在使用的 Linux 系统转换为 Docker 镜像, 并在另一台计算机上使用该镜像运行容器. 本指南将详细介绍如何完成这一过程, 包括如何将 Linux 系统打包为 Docker 镜像, 如何导出该镜像, 以及如何在新系统上导入并运行该镜像.

步骤 1: 创建 Linux 根文件系统的 tar 备份

我们首先需要备份当前 Linux 系统的根文件系统, 但要排除一些不需要的目录, 如 /proc, /sys, /dev, /mnt, /media, /run/tmp, 以避免不必要的数据进入.

在终端执行以下命令:

sudo tar --numeric-owner \
    --exclude=/proc --exclude=/sys --exclude=/dev \
    --exclude=/mnt --exclude=/media --exclude=/run --exclude=/tmp \
    --exclude=/var/lib/docker -cvpzf rootfs.tar /

如果你的系统中运行着 Docker, 建议排除 /var/lib/docker 目录, 以避免无用的数据进入.

步骤 2: 将 rootfs.tar 导入为 Docker 镜像

在备份完成后, 我们可以使用 docker import 将其转换为 Docker 镜像:

cat rootfs.tar | docker import - my-linux-image

或者使用:

docker import rootfs.tar my-linux-image

这样, 我们的 Linux 系统就会被导入为 my-linux-image, 可以在 Docker 中运行了.


步骤 3: 测试镜像是否可用

为了确保我们创建的 Docker 镜像可以正常工作, 可以运行以下命令启动一个基于该镜像的容器:

docker run -it my-linux-image /bin/bash

如果容器成功启动并且可以正常使用 bash, 则说明镜像创建成功.

步骤 4: 导出 Docker 镜像

接下来, 我们需要将 my-linux-image 作为 Docker 镜像导出为 .tar 文件, 以便在新系统上导入.

在终端执行以下命令:

docker save -o my-linux-image.tar my-linux-image

这样, 我们的 my-linux-image 就会被保存成 my-linux-image.tar 文件.

可以通过以下命令检查 .tar 文件是否创建成功:

ls -lh my-linux-image.tar

步骤 5: 将 Docker 镜像传输到新系统

方法 1: 使用 scp 远程拷贝

如果新系统可以通过 SSH 访问, 可以使用 scp 命令将 .tar 文件拷贝到目标机器:

scp my-linux-image.tar user@new-system:/path/to/destination/

然后, 在新系统上进入该目录:

cd /path/to/destination/

方法 2: 使用 rsync(更快, 更稳定)

如果你希望传输过程中支持断点续传, 可以使用 rsync:

rsync -avz my-linux-image.tar user@new-system:/path/to/destination/

方法 3: 使用 U 盘或移动硬盘

如果两台计算机没有网络连接, 你可以把 my-linux-image.tar 复制到 U 盘:

cp my-linux-image.tar /mnt/usb-drive/

然后在新系统上拷贝出来.

步骤 6: 在新系统上导入 Docker 镜像

在新系统上, 我们可以使用 docker load 重新导入镜像:

docker load -i my-linux-image.tar

然后, 可以运行以下命令验证镜像是否成功导入:

docker images

应该会看到 my-linux-image 出现在镜像列表中.

步骤 7: 确保 CUDA 和 NVIDIA GPU 兼容

如果你的 Docker 镜像依赖 CUDA 和 NVIDIA GPU, 迁移后需要确保新系统能够正确运行 CUDA 程序.

检查 NVIDIA 驱动

在新系统上运行:

nvidia-smi

如果能看到 GPU 信息, 说明驱动已正确安装.

安装 NVIDIA Container Toolkit

如果 nvidia-docker 未安装, 执行以下命令:

sudo apt install -y nvidia-container-toolkit
sudo systemctl restart docker

运行 Docker 并使用 GPU

docker run --gpus all -it my-linux-image /bin/bash

在容器内运行:

nvidia-smi
python -c "import torch; print(torch.cuda.is_available())"

如果 True, 说明 CUDA 在容器中可用.

总结

步骤命令
旧系统: 创建 tar 备份sudo tar --numeric-owner --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/mnt --exclude=/media --exclude=/run --exclude=/tmp --exclude=/var/lib/docker -cvpzf rootfs.tar /
旧系统: 导入 Dockerdocker import rootfs.tar my-linux-image
旧系统: 测试镜像docker run -it my-linux-image /bin/bash
旧系统: 导出镜像docker save -o my-linux-image.tar my-linux-image
传输 .tar 文件scp, rsync, U 盘等
新系统: 导入 Docker 镜像docker load -i my-linux-image.tar
新系统: 运行容器docker run -it my-linux-image /bin/bash
新系统: 检查 NVIDIA 驱动nvidia-smi
新系统: 安装 NVIDIA Container Toolkitsudo apt install -y nvidia-container-toolkit
新系统: 运行 GPU 容器docker run --gpus all -it my-linux-image /bin/bash
新系统: 测试 CUDApython -c "import torch; print(torch.cuda.is_available())"

按照以上步骤, 可以顺利地将一个正在使用的 Linux 系统转换为 Docker 镜像, 并在新系统上无缝运行 CUDA 相关任务! 🚀

Tags: Linux Docker