背景
最近新买了一台笔记本,心血来潮想要研究一下机器学习有关的代码,但是又怕环境污染了现有的系统导致杂乱不堪,于是乎便想到了使用 Docker 来创建一个代码环境。本文是基于文章 https://www.cnblogs.com/cmxcxd1314/p/19073044 的实践笔记。
前提条件
- Windows 10 或 Windows 11(版本 21H2 或更高)
- 已安装 Docker Desktop for Windows
- 支持 CUDA 的 NVIDIA GPU
- 已安装 NVIDIA 显卡驱动(版本 516.xx 或更高)
- 已安装 WSL 2(Windows Subsystem for Linux 2)
你可以通过以下命令查看你的 GPU 支持的 CUDA 版本:
nvidia-smi
步骤
1. 安装 NVIDIA Container Toolkit
前往 NVIDIA 官网页面:
https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html
按照 Windows 安装指南进行操作。
2. 配置 Docker Desktop
打开 Docker Desktop,确保 Settings → Docker Engine 中包含如下内容:
{"runtimes": {"nvidia": {"path": "nvidia-container-runtime.exe","runtimeArgs": []}}
}
如果你不确定这一段代码放在哪里,可以参考我的完整配置:
{"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false,"fixed-cidr-v6": "","ipv6": false,"runtimes": {"nvidia": {"path": "nvidia-container-runtime.exe","runtimeArgs": null}}
}
3. 创建项目文件
新建一个文件夹,在其中创建以下两个文件。
Dockerfile
官方 CUDA 镜像版本的选择可以前往 NVIDIA Docker Hub 页面查找:
https://hub.docker.com/r/nvidia/cuda/tags
# 使用官方 CUDA 镜像作为基础
FROM nvidia/cuda:13.0.3-cudnn-devel-ubuntu24.04# 避免安装过程中交互式提示
ENV DEBIAN_FRONTEND=noninteractive# 配置 Ubuntu 使用清华源
RUN sed -i 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list && \sed -i 's/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list# 安装系统依赖和开发工具,包括 SSH 服务器
RUN apt-get update && apt-get install -y \curl \wget \git \build-essential \openssh-server \python3 \python3-pip \python3-venv \sudo \iputils-ping \nano \htop \&& rm -rf /var/lib/apt/lists/*# 为 VS Code 创建用户并设置密码
RUN useradd -m -s /bin/bash vscode && \echo "vscode:vscode" | chpasswd && \usermod -aG sudo vscode && \echo "vscode ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers# 配置 SSH
RUN mkdir /var/run/sshd && \sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config && \sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_configUSER vscode
WORKDIR /home/vscode# 1. 创建 Python 虚拟环境
RUN python3 -m venv /home/vscode/venv# 2. 设置 PATH,使后续 pip 和 python 默认指向虚拟环境
ENV PATH="/home/vscode/venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"# 3. 现在可以安全安装包(将安装到虚拟环境)
RUN pip install --upgrade pipRUN pip install numpy pandasRUN pip install torch torchvision torchaudio \--index-url https://download.pytorch.org/whl/cu130RUN echo 'export PATH="/home/vscode/venv/bin:$PATH"' >> /home/vscode/.bashrc
RUN echo 'source /home/vscode/venv/bin/activate' >> /home/vscode/.bashrc# ----- 验证安装 -----
RUN python -c "import torch; print(torch.__version__); print(torch.cuda.is_available())"# 暴露 SSH 端口
EXPOSE 22# 启动 SSH 服务
USER root
CMD ["/usr/sbin/sshd", "-D"]
docker-compose.yml
services:cuda-dev:build:context: .dockerfile: Dockerfilecontainer_name: cuda-devports:- "2222:22" # 将容器的SSH端口映射到宿主机的2222端口- "8888:8888"runtime: nvidia # 使用NVIDIA容器运行时以支持GPUdeploy:resources:reservations:devices:- driver: nvidiacount: allcapabilities: [gpu]restart: unless-stoppedvolumes:- ./workspace:/home/vscode/workspace # 可选:挂载工作目录以便持久化代码- D:\code\Model:/home/vscode/model- D:\code\Data:/home/vscode/dataenvironment:- NVIDIA_VISIBLE_DEVICES=all
说明:
- 这里暴露
8888端口是因为我后续安装了 Unsloth Web 进行模型训练,不需要的可以删去。- 挂载目录需要根据实际情况修改,我这里是方便容器访问下载好的模型和数据集。
构建与启动
打开 PowerShell,执行以下命令构建容器:
docker-compose build
如果遇到网络问题,你可以打开网络代理,先执行
docker pull nvidia/cuda:13.0.3-cudnn-devel-ubuntu24.04拉取基础镜像,再构建容器。
启动容器:
docker-compose up -d
4. 测试和连接容器
查看已启动的容器:
docker ps
测试 SSH 连接:
ssh -p 2222 vscode@localhost
密码是 vscode
测试 CUDA 是否可用:
python3 -c "import torch; print(torch.cuda.is_available())"
使用建议
- 可以使用 VS Code 的 Remote - SSH 扩展连接到容器
- 将代码放在
workspace目录中以便持久化存储 - 如需其他 Python 包,可以修改 Dockerfile 中的
pip install命令
Happy Coding! 🚀