Jupyter Notebook Docker 部署完整教程

这个教程基于你的服务器环境(阿里云 VM,root 用户,Docker 已安装),使用你现有的 jupyter/scipy-notebook 镜像。从部署、配置、使用到备份,一步步详细说明。整个过程假设你是通过 SSH 连接服务器操作。如果你是初学者,建议一步步复制命令执行。

前提条件

  • Docker 已安装并运行(从你的 docker images 输出看,已有)。
  • 服务器有公网 IP(从登录日志看,如 120.228.142.193),并确保防火墙/安全组允许 8888 端口(阿里云控制台 > 安全组 > 添加入站规则:TCP 8888,来源 0.0.0.0/0)。
  • 如果端口未开,运行:
    firewall-cmd --add-port=8888/tcp --permanent
    firewall-cmd --reload
    
    (如果用 ufw:ufw allow 8888)。

步骤 1: 部署 Jupyter 容器

使用 Docker 运行容器,支持数据持久化和权限修复。默认镜像使用 jupyter/scipy-notebook(你的列表中有)。

  1. 创建数据目录并修复权限

    • Jupyter 容器用户是 jovyan (UID=1000),主机目录需匹配权限。
    mkdir -p /root/jupyter_data
    chown -R 1000:1000 /root/jupyter_data
    
  2. 运行容器(后台模式,带挂载和工作目录)

    docker run -d -p 8888:8888 --name jupyter-notebook -v /root/jupyter_data:/home/jovyan/work -w /home/jovyan/work jupyter/scipy-notebook
    
    • 解释
      • -d:后台运行。
      • -p 8888:8888:端口映射。
      • --name jupyter-notebook:容器名。
      • -v /root/jupyter_data:/home/jovyan/work:挂载主机目录到容器 /home/jovyan/work,数据持久化。
      • -w /home/jovyan/work:设置默认工作目录,避免文件保存到非持久化根目录。
    • 如果想以 root 运行(简化权限,但不推荐):
      --user rootdocker run -d -p 8888:8888 --name jupyter-notebook -v /root/jupyter_data:/home/jovyan/work --user root jupyter/scipy-notebook
  3. 检查容器状态

    docker ps
    
    • 看到 jupyter-notebook 在 running 状态即可。
  4. 获取访问令牌(token)

    docker logs jupyter-notebook
    
    • 日志中找类似 http://127.0.0.1:8888/lab?token=xxxxxxxxxxxxxxx 的行,复制 token(如 4ed3ea6fe25563f9b61c83550319241dcf01264f27e6f856)。

步骤 2: 访问 Jupyter Lab

Jupyter 默认启动 Lab 接口(现代版 Notebook)。

  1. 从远程浏览器访问(推荐,非服务器本地):

    • 直接公网访问
      • 浏览器打开:http://你的服务器公网IP:8888/lab?token=你的token
      • 获取公网 IP:curl ifconfig.me
    • SSH 端口转发(更安全,无需暴露公网端口)
      • 在本地终端运行:
        ssh -L 8888:localhost:8888 root@你的服务器IP
        
      • 然后本地浏览器打开:http://localhost:8888/lab?token=你的token
  2. 登录后界面

    • 你会看到文件浏览器,默认在 “work” 目录(挂载的持久化目录)。
    • 如果看到权限错误(如 “Permission denied”),参考步骤1的权限修复,重启容器。
  3. 自定义配置(可选)

    • 无 token 登录:启动时加 --NotebookApp.token=''(不安全,仅本地用)。
    • 设置密码:启动时加 --NotebookApp.password='sha1:你的哈希'(先用 Python 生成哈希:from notebook.auth import passwd; passwd('你的密码'))。
    • 示例命令:docker run -d -p 8888:8888 --name jupyter-notebook -v /root/jupyter_data:/home/jovyan/work -w /home/jovyan/work --NotebookApp.token='' jupyter/scipy-notebook

步骤 3: 基本使用 Jupyter

  1. 创建和编辑 Notebook

    • 在文件浏览器,点击 “New” > “Notebook” > 选择内核(如 Python 3)。
    • 在单元格写代码(如 print("Hello World")),按 Shift+Enter 执行。
    • 保存:Ctrl+S,或自动保存。文件会保存在 /root/jupyter_data(主机查看 ls /root/jupyter_data)。
  2. 上传/下载文件

    • 上传:文件浏览器 > “Upload” 按钮,选择文件上传到 “work” 目录。
    • 下载:右键文件 > “Download”。
  3. 安装包(容器内)

    • 进入容器:docker exec -it jupyter-notebook bash
    • 安装:pip install 包名(如 pip install numpy),但镜像已有 scipy 等。
    • 退出:exit
  4. 内核管理

    • 支持 Python、R 等(取决于镜像)。重启内核:Kernel > Restart。
  5. 常见操作

    • Markdown 单元格:写文档,按 Shift+Enter 渲染。
    • 命令模式:Esc 进入,添加/删除单元格 (a/b/dd)。
    • 扩展:镜像已有 scipy,支持数据分析、绘图等。
  6. 停止/重启容器

    • 停止:docker stop jupyter-notebook
    • 重启:docker start jupyter-notebook(token 可能变,查日志)。
    • 删除:docker rm jupyter-notebook(数据在主机安全)。

步骤 4: トラブルシューティング(常见问题)

  • 权限 denied:如步骤1,chown -R 1000:1000 /root/jupyter_data
  • 无数据在主机:确保文件保存到 “work” 目录。根目录文件不持久化。
  • 端口冲突:改端口,如 -p 8889:8888,访问用 8889。
  • 日志查看docker logs -f jupyter-notebook(实时)。
  • 镜像更新:拉新版 docker pull jupyter/scipy-notebook
  • 资源不足:加内存/CPU 参数,如 --memory=4g --cpus=2

步骤 5: 备份数据

数据在 /root/jupyter_data,定期备份以防丢失。

  1. 手动备份

    docker stop jupyter-notebook
    tar -czf /root/jupyter_backup_$(date +%Y%m%d).tar.gz /root/jupyter_data
    docker start jupyter-notebook
    
    • 下载备份:从本地 scp root@服务器IP:/root/jupyter_backup_*.tar.gz .
  2. 自动化备份

    • 创建脚本 /root/backup_jupyter.sh
      #!/bin/bash
      docker stop jupyter-notebook
      tar -czf /root/jupyter_backup_$(date +%Y%m%d).tar.gz /root/jupyter_data
      docker start jupyter-notebook
      
    • 权限:chmod +x /root/backup_jupyter.sh
    • 定时:crontab -e,加 0 2 * * * /root/backup_jupyter.sh(每天2点)。
  3. 恢复

    docker stop jupyter-notebook
    rm -rf /root/jupyter_data/*  # 清空旧数据
    tar -xzf /root/jupyter_backup_*.tar.gz -C /root/
    chown -R 1000:1000 /root/jupyter_data
    docker start jupyter-notebook
    

高级扩展(可选)

  • 多用户:用 JupyterHub 镜像代替。
  • GPU 支持:用 jupyter/tensorflow-notebook 等镜像,如果服务器有 GPU。
  • 自定义镜像:创建 Dockerfile 基于现有,添加包。
  • 集成 VS Code:用 code-server,或 Jupyter 的 VS Code 扩展。

这个教程覆盖从零到备份的全流程。如果遇到具体错误,贴日志或截图,我再帮调试!

写文章用