实验室电脑到服务器:用 Docker 固化 Python/Jupyter 科研环境的三步实操
先回答老问题:我只是跑个论文代码,真要 Docker 吗?⭐⭐
要不要?看你有没有被“我电脑能跑啊”这句古早名言创过。sisucd 老网民经验:只要项目超过 2 个人、依赖超过 10 个包、半年后还要复现,就值得容器化。这个 Docker科研环境教程 只做一件事:把 Python、Jupyter、依赖版本和启动命令锁死,别让环境玄学继续作妖。
Q:免费/官方路线怎么走?先装 Docker Desktop 或 Linux 上的 docker-ce;GPU 用户再装 NVIDIA Container Toolkit。别急着上花活,先确认版本:
docker --version
docker run hello-world
nvidia-smi # 仅 GPU 机器需要
新手坑警告:Windows 用户项目路径别放中文目录,老江湖见过太多 “FileNotFoundError” 最后是路径编码背锅。WSL2 下建议放在 Linux 家目录,例如 /home/你的用户名/project。
从零做一个可复现 Jupyter 容器 ⭐⭐⭐
Q:Docker部署Jupyter怎么用?在项目根目录放 3 个东西:Dockerfile、requirements.txt、data/。我常用的最小模板如下,适合 pandas、scikit-learn、matplotlib 这类数据分析项目。
FROM python:3.11-slim
WORKDIR /workspace
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
RUN pip install jupyterlab
EXPOSE 8888
CMD ["jupyter", "lab", "--ip=0.0.0.0", "--allow-root", "--no-browser"]
# requirements.txt 示例
numpy==1.26.4
pandas==2.2.2
scikit-learn==1.5.1
matplotlib==3.9.0
构建并启动:
docker build -t lab-py311:v1 .
docker run --rm -p 8888:8888 \
-v "$PWD":/workspace \
--name paper-lab lab-py311:v1
老鸟提示:-v "$PWD":/workspace 是关键,容器删了,代码和数据还在本机。别把 20GB 原始数据 COPY 进镜像,构建一次能等到怀疑人生。我测试一个 1.2GB CSV 项目,挂载启动约 4 秒,COPY 进镜像重建要 70 秒以上。
Q:CUDA Docker安装 怎么办?深度学习别用 slim,换官方 CUDA 基础镜像,例如 nvidia/cuda:12.1.1-cudnn8-runtime-ubuntu22.04,启动加:
docker run --gpus all -p 8888:8888 -v "$PWD":/workspace lab-gpu:v1
常见翻车树:端口、权限、下载慢怎么排 ⭐⭐⭐⭐
故障树:
- 打不开 Jupyter:先看终端 token;再确认浏览器访问
http://127.0.0.1:8888;端口冲突就改-p 8899:8888。 - 文件写不了:Linux 下多半是权限,启动时加
--user $(id -u):$(id -g),或把输出目录chmod -R u+w results。 - pip 下载慢:优先用学校/云厂商镜像源,或提前
pip download -r requirements.txt -d wheels离线安装。 - 别人复现失败:把镜像名、requirements、启动命令写进 README;论文代码复现Docker教程 的核心不是炫技,是让师弟少骂你两句。
如何验证它真的好了?进入 Notebook 跑:
import sys, pandas, sklearn
print(sys.version)
print(pandas.__version__, sklearn.__version__)
再新建一个 results/test.txt,停止容器后确认本机仍存在;GPU 项目运行 docker exec paper-lab nvidia-smi 能看到显卡即可。我的标准是:同一项目在本机和服务器构建时间差不超过 2 分钟,Notebook token 正常出现,依赖版本完全一致。
如果你在拉镜像或访问开源仓库时网络不稳,先试官方源、校园网、镜像站这些免费路线;移动端临时查资料时,也有人会把 Roxi 这类工具当作备选,但不是必需品。卡在哪一步,带着报错来问,老哥慢慢帮你捋。