Docker 化 AI 开发环境:从零搭建可复用的 AI 开发容器,让队友也能一键起飞
TL;DR:「在我电脑上能跑」是团队协作最大的敌人。Docker 化 AI 开发环境,让新成员一条命令搞定所有配置。本文包含:AI 开发容器设计原则、多环境配置(Python/Node/Go)、GPU 支持、docker-compose 一键启动完整示例。
1. 为什么 AI 开发需要 Docker 化
AI 开发环境的痛苦:
- Python 版本冲突(3.8 / 3.9 / 3.10 / 3.11,每个项目要求不一样)
- CUDA 版本和 PyTorch 版本要匹配
- Node.js 全局安装了一堆 CLI 工具,队友电脑上找不到
- 换了电脑要从头配一遍,两天过去了还没开始写代码
- AI 开发依赖动不动几十个,环境重建一次要半小时
Docker 化之后:
- 一条命令,所有人的环境完全一致
- 5 分钟内从零搭建完成,开始写代码
- 换电脑 / 新成员加入 = 0 配置成本
- 环境坏了?删掉重来,30 秒满血复活
2. 项目结构设计
ai-project/ ├── .devcontainer/ # VS Code 远程开发配置 │ ├── devcontainer.json # 容器定义 │ └── Dockerfile # 容器镜像 ├── docker/ # Docker 配置 │ ├── Dockerfile # 主镜像 │ ├── Dockerfile.gpu # GPU 版本 │ └── requirements.txt # Python 依赖 ├── docker-compose.yml # 一键启动 ├── .env.example # 环境变量模板 └── README.md # 启动说明
3. 基础版 AI 开发容器
3.1 Dockerfile
Dockerfile
# AI 开发基础镜像:Python 3.11 + CUDA 12.1 + Node 20
FROM nvidia/cuda:12.1.1-cudnn8-runtime-ubuntu22.04
# 避免交互式安装
ENV DEBIAN_FRONTEND=noninteractive
# 安装系统依赖
RUN apt-get update && apt-get install -y \
python3.11 python3.11-dev python3-pip \
nodejs npm \
git curl wget vim htop \
build-essential libpq-dev \
&& rm -rf /var/lib/apt/lists/*
# 设置 Python 默认版本
RUN update-alternatives --install /usr/bin/python python /usr/bin/python3.11 1
RUN update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 1
# 安装 uv(比 pip 更快的包管理器)
RUN curl -LsSf https://astral.sh/uv/install.sh | sh
ENV PATH="/root/.local/bin:$PATH"
# 创建工作目录
WORKDIR /workspace
# 复制依赖文件(利用 Docker 缓存)
COPY requirements.txt /workspace/
# 安装 Python 依赖(使用 uv 加速)
RUN uv pip install --system -r requirements.txt
# 安装 Node 全局工具
RUN npm install -g pnpm typescript ts-node @nestjs/cli
# 复制项目代码
COPY . /workspace/
# 暴露端口
EXPOSE 3000 8000 5173
# 默认命令
CMD ["/bin/bash"]
3.2 requirements.txt
requirements.txt
# AI / ML 依赖
torch==2.2.0
transformers==4.38.0
accelerate==0.27.0
sentence-transformers==2.3.1
faiss-cpu==1.8.0
openai==1.12.0
# Web 框架
fastapi==0.109.0
uvicorn[standard]==0.27.0
gradio==4.19.0
streamlit==1.32.0
# 数据处理
pandas==2.2.0
numpy==1.26.3
pydantic==2.6.0
# 开发工具
jupyterlab==4.1.0
ipykernel==6.29.0
black==24.1.1
ruff==0.2.0
pytest==8.0.0
httpx==0.26.0
4. GPU 支持配置
AI 开发几乎都需要 GPU。Docker GPU 支持分两种场景:
4.1 NVIDIA GPU(CUDA)
安装 NVIDIA Container Toolkit:
bash - 安装 NVIDIA Container Toolkit
# 添加 NVIDIA 仓库
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -fsSL https://nvidia.github.io/nvidia-docker/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-docker.gpg
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-docker.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-docker.list
# 安装 nvidia-container-toolkit
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker
Dockerfile.gpu
# GPU 专用镜像(使用 PyTorch 官方 GPU 镜像作为基础)
FROM pytorch/pytorch:2.2.0-cuda12.1-cudnn8-runtime
# 验证 GPU 可用
RUN python -c "import torch; print(f'CUDA available: {torch.cuda.is_available()}')"
# 其余依赖安装同上...
4.2 Docker Compose 一键启动(GPU 版)
docker-compose.yml
version: '3.9'
services:
# AI 开发容器(GPU 版本)
ai-dev:
build:
context: .
dockerfile: docker/Dockerfile.gpu
volumes:
- .:/workspace # 代码目录映射
- ~/.cache:/root/.cache # pip/uv 缓存复用
- ~/.cache/huggingface:/root/.cache/huggingface # 模型缓存
environment:
- CUDA_VISIBLE_DEVICES=0
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
ports:
- "8000:8000" # FastAPI
- "5173:5173" # Vite
- "8888:8888" # JupyterLab
working_dir: /workspace
command: sleep infinity # 保持容器运行
# Qdrant 向量数据库
qdrant:
image: qdrant/qdrant:latest
ports:
- "6333:6333"
- "6334:6334"
volumes:
- qdrant_data:/qdrant/storage
# Redis(用于缓存和消息队列)
redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
- redis_data:/data
volumes:
qdrant_data:
redis_data:
5. VS Code 远程开发配置
有了 Docker 容器,还需要让 VS Code 直接连进去开发。
.devcontainer/devcontainer.json
{
"name": "AI Dev Environment",
"build": {
"dockerfile": "Dockerfile"
},
"features": {
"ghcr.io/devcontainers/features/github-cli": {}
},
"forwardPorts": [8000, 5173, 8888],
"postCreateCommand": "bash .devcontainer/setup.sh",
"customizations": {
"vscode": {
"extensions": [
"ms-python.python",
"ms-toolsai.jupyter",
"esbenp.prettier-vscode",
"rust-lang.rust-analyzer",
"golang.go",
"bradlc.vscode-tailwindcss"
],
"settings": {
"python.defaultInterpreterPath": "/usr/bin/python",
"python.linting.enabled": true,
"python.formatting.provider": "black"
}
}
}
}
.devcontainer/setup.sh
#!/bin/bash
set -e
# 安装 Python 开发工具
pip install --upgrade pip
pip install ipykernel
python -m ipykernel install --user --name=ai-dev
# 初始化 Git 子模块(如果有)
git submodule update --init --recursive
# 预下载常用模型(可选)
# python -c "from sentence_transformers import SentenceTransformer; SentenceTransformer('all-MiniLM-L6-v2')"
echo "✅ 环境初始化完成!"
6. 一键启动脚本
把复杂的启动流程封装成一个脚本,新成员只需要运行它。
start-dev.sh
#!/bin/bash
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
echo_step() {
echo -e "${GREEN}➜ $1${NC}"
}
echo_error() {
echo -e "${RED}✗ $1${NC}"
}
# 检查 Docker
check_docker() {
if ! command -v docker &> /dev/null; then
echo_error "Docker 未安装,请先安装 Docker"
exit 1
fi
if ! docker info &> /dev/null; then
echo_error "Docker 未运行,请先启动 Docker"
exit 1
fi
}
# 检查 NVIDIA GPU
check_gpu() {
if command -v nvidia-smi &> /dev/null; then
echo_step "检测到 NVIDIA GPU:"
nvidia-smi --query-gpu=name,memory.total --format=csv,noheader
else
echo_step "未检测到 NVIDIA GPU,将使用 CPU 模式"
fi
}
# 复制环境变量
setup_env() {
if [ ! -f .env ]; then
echo_step "创建 .env 文件..."
cp .env.example .env
echo_error "请编辑 .env 文件填入你的 API Key"
exit 1
fi
}
# 主流程
main() {
echo -e "${YELLOW}=== AI 开发环境启动脚本 ===${NC}\n"
check_docker
check_gpu
setup_env
echo_step "构建并启动容器..."
docker-compose up -d --build
echo_step "安装 VS Code 扩展..."
docker exec ai-project-ai-dev-1 code --install-extension ms-python.python
echo -e "\n${GREEN}✅ 启动完成!${NC}"
echo "- 访问 FastAPI:http://localhost:8000"
echo "- 访问 JupyterLab:http://localhost:8888"
echo "- 使用 VS Code 连接容器开发"
}
main "$@"
7. 团队使用流程
新成员加入 → clone 代码 → 运行 ./start-dev.sh → 5 分钟后开始写代码
实测数据(MacBook Pro M2 + 16GB + Docker):
- 首次构建镜像:约 8 分钟
- 再次启动(利用 Docker 缓存):约 30 秒
- 新成员环境搭建时间:从 2 天 → 5 分钟
- 环境一致性:100%(所有人的容器环境完全相同)
8. 常见问题
Q1:Mac M 系列芯片用 Docker 有 GPU 加速吗?
不能直接用 NVIDIA GPU。Mac Docker 用的是虚拟化方案,有性能损耗。建议:本地开发用 CPU 版本,生产环境用云服务器跑 GPU。
Q2:模型文件太大,无法打包进镜像怎么办?
不要把模型文件放进 Docker 镜像。用 volume 挂载或从 HuggingFace 自动下载:
docker-compose.yml(模型自动下载)
ai-dev:
volumes:
- ./models:/workspace/models
- ~/.cache/huggingface:/root/.cache/huggingface # 复用缓存
Q3:Docker 里面跑 JupyterLab 慢吗?
数据处理和模型推理在 CPU 模式下会慢一些(尤其 Mac)。但用 GPU 版本或远程服务器,体验和本地一致。
9. 总结
| 痛点 | 传统方式 | Docker 化后 |
|---|---|---|
| 环境搭建 | 2 天手动配置 | 5 分钟一键启动 |
| 环境一致性 | 各机器不同 | 100% 一致 |
| 新成员加入 | 看 README 手动配 | 一条命令搞定 |
| 环境损坏 | 重装系统 | 删容器重来 |
| GPU 支持 | 手动装 CUDA | 一行配置 |
AI 开发用 Docker 化最大的价值:让团队把时间花在写代码上,而不是配环境上。
如果对你有帮助,欢迎在评论区分享你的 AI 开发环境配置经验。
更多推荐

所有评论(0)