Docker 部署方案:8×RTX 4090 分配给 4 个容器(每个 2 卡)
方案类型:Docker + NVIDIA Container Toolkit(GPU 容器化) GPU 规划:8 张 RTX 4090,分配给 4 个容器,每个容器 2 张 宿主系统:Linux(推荐 Ubuntu Server 22.04 / 24.04) 适用业务:AI 训练/推理、CUDA 计算、深度学习、Linux 渲染/转码等 文档版本:v1.0 | 日期:2026-06-03
一、方案概述
宿主机(Linux)安装一套 NVIDIA 驱动,通过 NVIDIA Container Toolkit 让 Docker 容器直接调用物理 GPU。为 4 个容器各分配 2 张 4090,容器内即可使用 GPU 进行计算。
核心优势(相比 VM 透传)
容器规划
⚠️ 前提说明
容器只能跑 Linux(共享宿主内核),无法在容器内运行 Windows。
容器共享宿主内核,隔离性弱于 VM;自用/可信业务足够,强多租户隔离需求建议 VM。
宿主机的 NVIDIA 驱动版本对所有容器生效(容器内只带 CUDA runtime,不带驱动)。
二、整体流程
①宿主机装 Linux(Ubuntu Server)
↓
②宿主机安装 NVIDIA 官方驱动(识别 8 张 4090)
↓
③安装 Docker Engine
↓
④安装 NVIDIA Container Toolkit
↓
⑤验证容器能访问 GPU
↓
⑥创建 4 个容器,各分配 2 张卡
↓
⑦容器内验证 nvidia-smi 正常三、第一步:宿主机安装 Linux
安装 Ubuntu Server 22.04 LTS 或 24.04 LTS(驱动/生态支持最好)。
配置静态 IP、主机名、SSH。
更新系统:
sudo apt update && sudo apt -y upgrade
四、第二步:安装 NVIDIA 驱动(宿主机)
1. 禁用开源 nouveau 驱动
echo -e "blacklist nouveau\noptions nouveau modeset=0" | sudo tee /etc/modprobe.d/blacklist-nouveau.conf
sudo update-initramfs -u
sudo reboot2. 安装官方驱动
方式 A:Ubuntu 仓库(简单)
# 自动推荐
sudo ubuntu-drivers devices
# 安装推荐版本(或指定,如 nvidia-driver-550 及以上以支持 4090)
sudo apt install -y nvidia-driver-550
sudo reboot方式 B:NVIDIA 官网 .run 包(拿最新版) 从 nvidia.com 下载对应 4090 的最新数据中心/桌面驱动安装。
3. 验证宿主机识别 8 张卡
nvidia-smi应列出 8 张 RTX 4090(GPU 0~7)及显存、温度等。
✅ 这一步成功,意味着最难的硬件层全部就绪——后面只是软件配置。
五、第三步:安装 Docker Engine
# 卸载旧版本(如有)
sudo apt remove -y docker docker-engine docker.io containerd runc 2>/dev/null
# 安装依赖并添加官方源
sudo apt update
sudo apt install -y ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装 Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 验证
sudo docker run hello-world六、第四步:安装 NVIDIA Container Toolkit
这是让 Docker 用上 GPU 的关键组件。
# 添加 NVIDIA Container Toolkit 源
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \
sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
# 安装
sudo apt update
sudo apt install -y nvidia-container-toolkit
# 配置 Docker 使用 NVIDIA runtime
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker七、第五步:验证容器能访问 GPU
# 在容器里跑 nvidia-smi,应看到全部 8 张卡
sudo docker run --rm --gpus all nvidia/cuda:12.4.1-base-ubuntu22.04 nvidia-smi八、第六步:创建 4 个容器,各分配 2 张卡
方式 A:docker run 直接起(4 条命令)
# 容器 app01 → GPU 0,1
docker run -d --name app01 --gpus '"device=0,1"' \
--restart unless-stopped \
-v /data/app01:/workspace \
nvidia/cuda:12.4.1-base-ubuntu22.04 sleep infinity
# 容器 app02 → GPU 2,3
docker run -d --name app02 --gpus '"device=2,3"' \
--restart unless-stopped \
-v /data/app02:/workspace \
nvidia/cuda:12.4.1-base-ubuntu22.04 sleep infinity
# 容器 app03 → GPU 4,5
docker run -d --name app03 --gpus '"device=4,5"' \
--restart unless-stopped \
-v /data/app03:/workspace \
nvidia/cuda:12.4.1-base-ubuntu22.04 sleep infinity
# 容器 app04 → GPU 6,7
docker run -d --name app04 --gpus '"device=6,7"' \
--restart unless-stopped \
-v /data/app04:/workspace \
nvidia/cuda:12.4.1-base-ubuntu22.04 sleep infinity--gpus '"device=0,1"':指定该容器只能看到 0、1 号卡(注意引号写法)--restart unless-stopped:宿主重启后容器自动拉起-v:挂载宿主目录做数据持久化实际镜像换成你的业务镜像(如 pytorch/pytorch、tensorflow 等)
方式 B:docker-compose(推荐,便于管理)
新建 docker-compose.yml:
services:
app01:
image: nvidia/cuda:12.4.1-base-ubuntu22.04
container_name: app01
command: sleep infinity
restart: unless-stopped
volumes:
- /data/app01:/workspace
deploy:
resources:
reservations:
devices:
- driver: nvidia
device_ids: ["0", "1"]
capabilities: [gpu]
app02:
image: nvidia/cuda:12.4.1-base-ubuntu22.04
container_name: app02
command: sleep infinity
restart: unless-stopped
volumes:
- /data/app02:/workspace
deploy:
resources:
reservations:
devices:
- driver: nvidia
device_ids: ["2", "3"]
capabilities: [gpu]
app03:
image: nvidia/cuda:12.4.1-base-ubuntu22.04
container_name: app03
command: sleep infinity
restart: unless-stopped
volumes:
- /data/app03:/workspace
deploy:
resources:
reservations:
devices:
- driver: nvidia
device_ids: ["4", "5"]
capabilities: [gpu]
app04:
image: nvidia/cuda:12.4.1-base-ubuntu22.04
container_name: app04
command: sleep infinity
restart: unless-stopped
volumes:
- /data/app04:/workspace
deploy:
resources:
reservations:
devices:
- driver: nvidia
device_ids: ["6", "7"]
capabilities: [gpu]services:启动:
docker compose up -d九、第七步:验证每个容器的 GPU 分配
# 逐个容器查看,应各自只看到 2 张卡
docker exec app01 nvidia-smi -L
docker exec app02 nvidia-smi -L
docker exec app03 nvidia-smi -L
docker exec app04 nvidia-smi -L每个容器应只列出属于自己的 2 张 4090。
验证清单
not done宿主机
nvidia-smi显示全部 8 张卡not done测试容器
--gpus all能看到 8 张卡not done4 个容器各自只看到分配的 2 张卡
not done容器内可正常跑 CUDA 程序 / 框架(如
torch.cuda.is_available()为 True)not done宿主重启后容器自动恢复
not doneGPU 负载/压力测试通过
十、日常管理常用命令
# 查看容器状态
docker ps
# 查看宿主所有 GPU 实时占用
nvidia-smi
watch -n1 nvidia-smi # 实时刷新
# 进入容器
docker exec -it app01 bash
# 重启 / 停止 / 删除容器
docker restart app01
docker stop app01
docker rm -f app01
# 查看某容器日志
docker logs app01十一、进阶能力(Docker 的灵活性)
Docker 在 GPU 分配上比 VM 灵活得多,按需可用:
💡 相比 VM 透传"一张卡焊死给一台机",Docker 可以随时重新分配 GPU,运维灵活性高一个量级。
十二、注意事项
驱动版本统一:宿主装一套驱动对所有容器生效,需选支持 4090 的较新版本(建议 550+)。容器镜像里的 CUDA 版本需 ≤ 宿主驱动支持的 CUDA 版本。
隔离性:容器共享宿主内核,安全边界弱于 VM;多租户强隔离场景再考虑 VM。
R720 平台:Docker 不依赖透传,老平台适配无障碍;但 PCIe 3.0 与老 CPU 仍可能在高吞吐场景成为瓶颈(与方案无关,是硬件本身)。
NVIDIA 驱动授权:GeForce 驱动用于数据中心/商业场景仍有 EULA 限制,商用生产请核对 NVIDIA 许可条款(这点与是否用 Docker 无关)。
数据持久化:容器删除即丢失内部数据,重要数据务必用
-v挂载到宿主目录或数据卷。散热/供电:8 卡满载的物理条件你已验证通过,沿用即可。
十三、三方案最终对比(备查)
文档结束。确定业务镜像(PyTorch / TensorFlow / 自有镜像等)后,可把基础镜像替换为实际业务镜像并补充端口映射、环境变量等配置。