# Docker + Conda + Jupyter 开发指南

149 阅读4分钟

Docker + Conda + Jupyter 三者关系

宿主机 → Docker容器 → Conda环境 → Jupyter Lab/Python服务
工具作用隔离级别比喻
Docker容器化平台系统级隔离整栋房子
CondaPython环境管理应用级隔离精装房间
Jupyter交互式计算环境无隔离办公桌

架构图

┌─────────────────────────────────────┐
│           宿主机 (YOUR_HOST_IP)      │
│  ┌─────────────────────────────────┐ │
│  │      Docker 容器 (commonService) │ │
│  │  ┌─────────────────────────────┐ │ │
│  │  │   Conda 环境 (your_env)      │ │ │
│  │  │                             │ │ │
│  │  │  ├─ Jupyter Lab :PORT       │ │ │
│  │  │  └─ Python service.py       │ │ │
│  │  └─────────────────────────────┘ │ │
│  └─────────────────────────────────┘ │
└─────────────────────────────────────┘

1、Docker 环境管理

容器的生命周期如下

创建 → 启动 → 运行 → 停止 → 删除
  ↓      ↓      ↓      ↓      ↓
create  start   exec   stop  remove

容器管理

# 创建并启动容器(带端口映射)
docker run -d --name commonService -p HOST_PORT:CONTAINER_PORT your_image

# 启动已存在的容器
docker start container_name

# 进入运行中的容器
docker exec -it container_name bash

# 查看容器状态
docker ps                # 运行中的容器
docker ps -a            # 所有容器

# 停止容器
docker stop container_name

# 删除容器
docker rm container_name

2. Conda 环境管理

基本操作

# 创建环境
conda create -n myproject python=3.9

# 激活环境
conda activate myproject

# 安装包
conda install numpy pandas matplotlib jupyter

# 查看环境列表
conda env list

Jupyter

在某些情况下,可以使用Jupyter-lab ,这么做的好处有:

  • 浏览器访问:通过浏览器即可访问,无需本地安装
  • 服务器部署:可以部署在服务器上,团队共享使用
  • 资源利用:可以利用服务器的强大计算资源

Jupyter Lab 配置

启动命令

# 查看所有 jupyter 服务
jupyter server list

# 启动 Jupyter Lab
jupyter-lab --no-browser --port=PORT --ip=0.0.0.0

参数说明

  • --no-browser:不自动打开浏览器(适合远程/容器环境)
  • --port=PORT:指定端口(避免冲突)
  • --ip=0.0.0.0:绑定所有网络接口(允许外部访问)

访问方式

http://服务器IP:端口/lab/
# 例如:http://YOUR_HOST_IP:PORT/lab/

另外,jupyter-lab可以在任意 conda环境中切换,原理是他的内核管理能力:

内核切换原理

Jupyter 采用客户端-服务器-内核架构:

Jupyter Lab (前端) ↔ Jupyter Server ↔ Kernel (Python解释器)

每个 conda 环境注册后都有独立的配置文件:

~/.local/share/jupyter/kernels/
├── env1/
│   └── kernel.json
├── env2/  
│   └── kernel.json
└── python3/
    └── kernel.json

6. 完整工作流程

开发环境启动

# 1. 进入容器
docker exec -it commonService bash

# 2. 激活 conda 环境
conda activate your_env_name

# 3. 启动 Jupyter Lab
jupyter-lab --no-browser --port=PORT --ip=0.0.0.0

# 4. 浏览器访问
# http://YOUR_HOST_IP:PORT/lab/

生产服务启动

# 1. 进入容器
docker exec -it commonService bash

# 2. 激活环境
conda activate your_env_name

# 3. 启动服务
python service.py

容器首次创建流程

# 1. 创建并启动容器
docker run -d --name commonService -p HOST_PORT:CONTAINER_PORT your_image

# 2. 进入容器
docker exec -it commonService bash

# 3. 配置环境
conda activate your_env_name
conda install jupyter ipykernel

# 4. 注册内核
python -m ipykernel install --user --name your_env_name --display-name "Python (your_env_name)"

# 5. 启动服务
jupyter-lab --no-browser --port=PORT --ip=0.0.0.0

7. 设计优势

环境隔离

  • Docker:系统级隔离,避免系统依赖冲突
  • Conda:Python包级隔离,避免依赖版本冲突

开发便利

  • 远程开发:通过浏览器访问容器内的 Jupyter Lab
  • 环境一致性:团队成员使用相同的容器环境
  • 可移植性:整个环境可以打包和部署

灵活性

  • 可以在任何 conda 环境中启动 Jupyter Lab
  • 支持多个内核切换
  • 支持多服务并行运行

8. 常见问题排查

容器无法启动

# 检查容器状态
docker ps -a

# 查看容器日志
docker logs container_name

# 检查端口占用
lsof -i :PORT

无法访问 Jupyter Lab

# 检查端口映射
docker port container_name

# 检查 Jupyter 服务
jupyter server list

# 检查防火墙
sudo ufw status

内核无法切换

# 检查已注册内核
jupyter kernelspec list

# 重新注册内核
python -m ipykernel install --user --name env_name --display-name "Display Name"

9. 常用命令速查

Docker 命令

docker ps                              # 查看运行容器
docker ps -a                          # 查看所有容器
docker exec -it container_name bash    # 进入容器
docker start container_name            # 启动容器
docker stop container_name             # 停止容器
docker logs container_name             # 查看日志

Conda 命令

conda env list                         # 查看环境
conda activate env_name               # 激活环境
conda deactivate                      # 退出环境
conda list                            # 查看已安装包

Jupyter 命令

jupyter server list                   # 查看服务
jupyter-lab --help                   # 查看帮助
jupyter kernelspec remove kernel_name # 删除内核
jupyter kernelspec list               # 查看内核

10. 最佳实践

开发建议

  1. 统一端口规划:避免端口冲突,建议使用 8888-8899 范围
  2. 环境命名规范:使用有意义的环境名,如 project_name_env
  3. 定期备份:导出环境配置文件 conda env export > environment.yml
  4. 文档记录:记录环境配置和依赖关系

安全建议

  1. 设置访问密码:生产环境必须设置密码
    jupyter-lab --generate-config
    # 编辑 ~/.jupyter/jupyter_lab_config.py
    # c.ServerApp.password = 'your_hashed_password'
    
  2. 限制访问IP:生产环境不要使用 0.0.0.0,指定具体IP
  3. 定期更新:保持软件版本更新
  4. 权限控制:合理设置文件和目录权限

性能优化

  1. 资源限制:为容器设置合理的内存和CPU限制
  2. 数据持久化:使用 Docker volumes 持久化重要数据
  3. 网络优化:合理配置网络,避免不必要的端口暴露