将正在使用的 Linux 系统转换为 Docker 镜像并迁移到新系统
- 步骤 1: 创建 Linux 根文件系统的 tar 备份
- 步骤 2: 将 rootfs.tar 导入为 Docker 镜像
- 步骤 3: 测试镜像是否可用
- 步骤 4: 导出 Docker 镜像
- 步骤 5: 将 Docker 镜像传输到新系统
- 步骤 6: 在新系统上导入 Docker 镜像
- 步骤 7: 确保 CUDA 和 NVIDIA GPU 兼容
- 总结

在某些情况下, 我们可能希望将一个正在使用的 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 / |
| 旧系统: 导入 Docker | docker 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 Toolkit | sudo apt install -y nvidia-container-toolkit |
| 新系统: 运行 GPU 容器 | docker run --gpus all -it my-linux-image /bin/bash |
| 新系统: 测试 CUDA | python -c "import torch; print(torch.cuda.is_available())" |
按照以上步骤, 可以顺利地将一个正在使用的 Linux 系统转换为 Docker 镜像, 并在新系统上无缝运行 CUDA 相关任务! 🚀