前言

Docker是一个非常强大的工具,可以帮助我们快速部署和运行各种应用。在本文中,我将分享如何使用Docker和Docker Compose创建并运行一个包含Python和JavaScript内核的JupyterLab。

配置文件

首先,我们来看docker-compose.yml文件的内容:

version: '3.7'

services:
  jupyterlab:
    # image: jupyter/base-notebook:latest
    build:
      context: ./jupyterlab  # Dockerfile 所在的目录,这里假设它在与 docker-compose.yml 文件相同的目录中
      dockerfile: Dockerfile  # Dockerfile 文件的名称
    ports:
      - "18888:8888"
    restart: unless-stopped
    volumes:
      - ./data:/home/jovyan/work
    environment:
      - JUPYTER_ENABLE_LAB=yes
      - JUPYTER_TOKEN=happen
      # - JUPYTER_RUNTIME_DIR=/tmp/jupyter_runtime
      - NB_UID=1000
      - NB_GID=1000
      - CHOWN_HOME=yes
      - CHOWN_HOME_OPTS=-R
    command: start-notebook.sh --notebook-dir='/home/jovyan/work'
# --NotebookApp.token='' 可以去掉密码
volumes:
  data: {}

上述配置文件定义了一个服务jupyterlab,并指定了构建Docker镜像所需的上下文和Dockerfile。同时,我们还定义了一些其他参数,如端口映射、持久化存储卷等。

接下来,我们来看jupyterlab/Dockerfile文件的内容:

# 使用官方的Jupyter基础镜像
FROM jupyter/base-notebook:latest

# 使用root用户安装必要的软件包
USER root

# 修改APT源为阿里云源以加速下载
RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list && \
    apt-get update && \
    apt-get install -y wget curl build-essential && \
    # 下载并安装Node.js
    wget https://npmmirror.com/mirrors/node/v18.16.1/node-v18.16.1-linux-x64.tar.xz && \
    tar -xf node-v18.16.1-linux-x64.tar.xz && \
    mv node-v18.16.1-linux-x64 /usr/local/node && \
    rm node-v18.16.1-linux-x64.tar.xz && \
    # 将Node.js添加到PATH
    echo 'PATH="/usr/local/node/bin:$PATH"' >> /etc/environment && \
    # 设置 npm 的镜像为淘宝的镜像
    npm config set registry https://registry.npm.taobao.org && \
    # 安装JavaScript内核
    npm install -g --unsafe-perm ijavascript && \
    # 运行 ijsinstall 命令安装 JavaScript 内核
    ijsinstall --install=global && \
    # 预先创建所需的目录并赋予适当的权限
    mkdir -p /home/jovyan/.local/share/jupyter/runtime && \
    chown -R $NB_UID:$NB_GID /home/jovyan/.local && \
    # 清理APT缓存
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

# 切换回原来的用户
USER $NB_UID

# 设置 pip 的镜像为清华的镜像,并安装 numpy
ENV PIP_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple
ENV PIP_TRUSTED_HOST=pypi.tuna.tsinghua.edu.cn

# Install PyTorch
RUN pip install torch==1.13.0+cpu torchvision -f https://download.pytorch.org/whl/torch_stable.html && \
    pip install d2l && \
    # 验证内核安装成功
    jupyter kernelspec list
    # 清理pip缓存
    # rm -rf /root/.cache/pip

在这个Dockerfile中,我们从jupyter/base-notebook:latest基础镜像开始,并进行了以下操作:

  1. 切换到root用户。
  2. 修改APT源为阿里云,加速软件包下载。
  3. 安装Node.js。
  4. 安装JavaScript内核。
  5. 切换回Jupyter默认用户。
  6. 设置pip为清华大学的镜像源。
  7. 安装PyTorch和其他Python库。

使用方法

  1. 将上述的docker-compose.ymljupyterlab/Dockerfile保存到相同的目录中。
  2. 在命令行中,进入该目录,并运行以下命令启动JupyterLab:
docker-compose up
  1. 打开浏览器,访问http://localhost:18888,使用happen作为token登录。

结论

使用Docker和Docker Compose可以非常简单地部署和运行各种应用,特别是像JupyterLab这样的数据科学工具。希望本文能够帮助你更容易地使用这些工具,从而提高你的工作效率。