Docker + GPU 容器:容器化部署 AI 服务
Docker + GPU 容器:容器化部署 AI 服务
写在前面
把 AI 服务装进 Docker 容器,最大的好处是环境一致:同一份镜像在任何机器上跑出的结果一样,不用再为「在我电脑上好好的」这种问题头疼。本教程带你在 Linux 上完成三件事:装 Docker → 配置 NVIDIA Container Toolkit 让容器能用 GPU → 跑一个真实的 GPU 容器验证。
本篇面向有 NVIDIA 显卡的用户;没有 NVIDIA 显卡也没关系,前两步装 Docker 的部分同样适用(纯 CPU 容器不需要 Toolkit)。
环境要求
- 一个 Linux 系统(Ubuntu / Debian / Fedora 等)
- NVIDIA 显卡 + 官方驱动(
nvidia-smi能正常输出) - 磁盘:至少 10GB 可用空间(镜像 + 模型)
注意:Docker Desktop(Windows/macOS 上的 Docker 图形版)无法直接透传物理 GPU,本教程针对 Linux 上的原生 Docker Engine。
第一步:安装 Docker Engine
Ubuntu / Debian 官方源安装:
# 安装依赖
sudo apt update
sudo apt install -y ca-certificates curl
# 添加 Docker 官方 GPG 密钥与仓库
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
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
让当前用户免 sudo 使用 docker(重新登录后生效):
sudo usermod -aG docker $USER
验证:
sudo systemctl enable --now docker
docker --version
国内网络拉镜像慢的话,可在
/etc/docker/daemon.json配置镜像加速器(如阿里云、腾讯云容器镜像服务提供的地址),然后sudo systemctl restart docker。
第二步:安装 NVIDIA Container Toolkit
NVIDIA Container Toolkit 是让 Docker 容器调用宿主 GPU 的标准方案(旧方案 nvidia-docker2 已弃用,新装环境直接用 Toolkit):
# 添加 NVIDIA 仓库
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
验证配置生效:
docker info | grep -i runtime
国内网络访问
nvidia.github.io不稳定时,可把仓库地址换成中科大镜像https://mirrors.ustc.edu.cn/libnvidia-container(其余命令不变)。
第三步:验证 GPU 容器
跑一个 CUDA 官方镜像,在容器里执行 nvidia-smi:
docker run --rm --gpus all nvidia/cuda:12.6-base-ubuntu24.04 nvidia-smi
能输出显卡型号、驱动版本、CUDA 版本即说明 GPU 已成功透传进容器。
指定某张卡(多卡机器):
docker run --rm --gpus '"device=0"' nvidia/cuda:12.6-base-ubuntu24.04 nvidia-smi
第四步:实战——容器里跑 Ollama
Ollama 官方镜像自带 GPU 支持,这是验证「容器 + GPU + AI」最直观的例子:
docker run -d --name ollama --gpus all \
-v ollama:/root/.ollama \
-p 11434:11434 \
ollama/ollama
--gpus all:容器可访问全部 GPU-v ollama:/root/.ollama:模型存到数据卷,删容器不丢模型-p 11434:11434:暴露 API 端口
进入容器拉模型(以 Qwen3 4B 为例):
docker exec -it ollama ollama pull qwen3:4b
从宿主机调用容器里的模型:
curl http://localhost:11434/api/generate -d '{"model": "qwen3:4b", "prompt": "用一句话介绍 Linux"}'
常用命令速查
| 命令 | 作用 |
|---|---|
docker ps | 查看运行中的容器 |
docker logs <容器名> | 查看容器日志 |
docker stop <容器名> / docker start <容器名> | 停止 / 启动容器 |
docker rm -f <容器名> | 强制删除容器(数据卷里的模型保留) |
docker volume ls | 查看数据卷 |
nvidia-smi | 宿主机查看 GPU 占用(容器占用也会显示) |
常见问题
docker run --gpus all 报错 “could not select device driver”?
说明 NVIDIA Container Toolkit 未正确安装或 Docker 未重启。依次检查:nvidia-ctk runtime configure --runtime=docker → sudo systemctl restart docker → docker info | grep -i runtime 应能看到 nvidia。
容器里 nvidia-smi 提示找不到命令?
选错了镜像。基础镜像(如 ubuntu、python)不带 nvidia-smi,改用 nvidia/cuda 系列或 PyTorch 官方镜像(自带 CUDA 环境)。
没有 NVIDIA 显卡想练手?
跳过 Toolkit 两步,用纯 CPU 镜像即可,命令去掉 --gpus all 照常运行。
重启后容器没了?
容器本身不会自动开机启动。创建时加 --restart unless-stopped 参数即可(已有容器可 docker update --restart unless-stopped <容器名>)。
下一步
- 在容器里部署推理服务:vLLM 高吞吐推理(教程整理中)
- 生图方向:Stable Diffusion 本地部署(教程整理中)
- 先玩过包管理器游戏再来容器?terminal-game 一分钟热个身
提示:涉及系统安装、驱动、分区等操作前,请务必备份重要数据。容器与工具均免费开源,模型商用前请查看对应模型主页的许可说明。
评论
评论区由 GitHub Discussions 驱动,使用 GitHub 账号即可参与讨论。