第二部分:Docker GPU 容器实战指南

📝 前言

欢迎来到《云原生之旅第二部分》的第四篇文章。

在前三篇中,我们已经一起探索了 Docker 的基础知识和进阶功能:

现在,我们将继续 Docker 在 AI 领域的应用。

🧭 背景介绍

随着AI大模型、深度学习、视频处理等对计算性能需求的不断提升,GPU 计算已成为容器化部署中的重要一环。

相比 CPU,GPU 在大规模并行计算方面具有极高的效率,因此在 AI 模型训练与推理、图像渲染等场景中扮演关键角色。

但在传统的 Docker 容器中,默认并不支持直接访问宿主机的 GPU 资源。

为了解决这个问题,NVIDIA 提供了**NVIDIA Container Toolkit**,使得我们可以轻松将 GPU 功能集成到 Docker 容器中。

本篇文章将详细介绍如何在 Docker 容器中使用 NVIDIA GPU。

🧠 本章知识卡片

🔍 使用场景

Docker GPU 容器广泛应用于以下场景:

  • 深度学习模型的训练与推理(TensorFlow、PyTorch)
  • 部署与微调开源大模型(如 DeepSeek 系列)
  • 视频处理与转码(FFmpeg + NVENC)
  • 图像渲染与 3D 计算(如 Blender 渲染)

📋 前提条件

在正式进入实战之前,请确保你已经具备以下条件:

🚀 本章小节

1️⃣ GPU 容器基础概念

GPU 容器是指 支持 GPU 加速的 Docker 容器,通过共享主机的 GPU 硬件和驱动,使容器内的应用(如 PyTorch、TensorFlow)能够直接调用 GPU 计算资源。

在 Docker 中使用 GPU 资源,并不是“开箱即用”,默认情况下,Docker 容器对 GPU 是不可见的。

因此 NVIDIA 提供了以下支持方案:

  • nvidia-container-runtime:将 NVIDIA GPU 驱动桥接到容器运行时。
  • –gpus all / device=0:通过命令参数指定使用的 GPU。

NVIDIA Docker 容器运行架构图如下:

—— 来源:https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/arch-overview.html

2️⃣ GPU 容器环境搭建

这里以 Ubuntu 系统为例,先安装 NVIDIA 驱动,然后再安装 NVIDIA Container Toolkit,该工具包含:

  • nvidia-container-runtime:核心的 nvidia 容器运行时
  • nvidia-ctk: NVIDIA Container Toolkit 命令行工具
  • nvidia-cdi-hook:NVIDIA CDI(容器设备接口)挂载点
  • nvidia-container-runtime-hook:NVIDIA 容器运行时挂载点
  • nvidia-container-cli:NVIDIA Container 命令行工具
  • libnvidia-container1:NVIDIA 容器库

首先安装驱动

1
2
3
4
5
6
7
8
9
10
11
12
# 查看服务器 GPU 型号
lspci |grep -i nvidia

# 下载驱动文件,官方下载地址
https://www.nvidia.com/en-us/drivers

# 安装驱动
chmod a+x NVIDIA-Linux-x86_64-570.172.08.run
sudo ./NVIDIA-Linux-x86_64-570.172.08.run

# 测试驱动
nvidia-smi

打印类似以下内容则表示驱动安装成功:

安装 NVIDIA Container Toolkit

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
**# 配置生产仓库**
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-get update

# **安装 NVIDIA 容器工具包**
export NVIDIA_CONTAINER_TOOLKIT_VERSION=1.17.8-1
sudo apt-get install -y \
nvidia-container-toolkit=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
nvidia-container-toolkit-base=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
libnvidia-container-tools=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
libnvidia-container1=${NVIDIA_CONTAINER_TOOLKIT_VERSION}

配置 Docker

安装完成后,使用nvidia-ctk工具配置 Docker:

1
sudo nvidia-ctk runtime configure --runtime=docker

执行完以上命令后,会自动在/etc/docker/daemon.json文件中添加以下配置信息:

1
2
3
4
5
6
"runtimes": {
"nvidia": {
"args": [],
"path": "nvidia-container-runtime"
}
}

有了这个配置,Docker 才能使用 NVIDIA 容器运行时。

重启 Docker

1
2
# 重启 Docker 服务生效
sudo systemctl restart docker

测试 GPU 容器是否可用

1
2
3
sudo docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi

# 打印内容同上面的 nvidia-smi 测试驱动类似则表示已在容器内成功使用了 GPU 资源

3️⃣ GPU 容器化实践

有了 GPU 容器的支持,那么我们可以做哪些事情呢?

可以通过容器化开发部署 GPU 应用,也可以快速部署推理大模型。

这里我们以一个简单的 PyTorch 项目作为示例。

项目源码地址:https://github.com/lusyoe/pytorch-docker-demo

使用 Docker 进行构建并运行:

1
2
3
4
5
# 构建镜像
docker build -t pytorch-example-gpu .

# 使用GPU资源运行容器
docker run --gpus all pytorch-example-gpu

4️⃣ GPU 容器调试与资源管理

使用 GPU 容器时,调试与资源隔离非常重要,最常用的调试就是打印 GPU 信息,如:

1
docker exec -it <container_id> nvidia-smi

GPU 资源是非常宝贵的,为了提高资源利用率,通常需要将资源进行隔离限制,如:

1
2
# 限制容器使用的 GPU 数量(例如仅使用 1 块 GPU)
docker run --gpus '"device=0"' <image_name>

需要注意的是,Docker 本身目前不支持直接限制显存大小,但可以通过 NVIDIA 提供的 vGPU(虚拟 GPU)技术实现显存配额管理。

✅ 总结

本文从基础概念出发,带你逐步完成 GPU 容器化的环境搭建、镜像构建、运行与调试全流程。

通过 Docker 使用 GPU 资源,不仅能显著加速计算任务,还能提高部署的一致性与可移植性。

在实际项目中,推荐:

  • 使用官方 CUDA 镜像作为基础镜像
  • 合理设置--gpus参数控制资源
  • 在构建镜像时考虑使用多阶段构建优化体积