Docker – JupyterLab がすぐに使える Docker コンテナの作り方

目次

概要

JupyterLab が使える Dockerfile の作り方を紹介します。

Dockerfile

内容

  • ベースイメージは ubuntu:18.04
  • apt でインストールできる Python はバージョンが古いので、pyenv で Python 3.9.7 をインストールする
  • pip で requirements.txt に記載された Python のライブラリをインストールする
  • JupyterLab の以下の拡張をインストールする

コンテナのビルド、作成方法

ソースは pystyle/docker/jupyterlab になります。

  1. Dockerfile をダウンロードします。
    • requirements.txt にある Python ライブラリが pip でインストールされるので、使いたいライブラリがある場合は適宜編集してください
  2. Dockerfile があるディレクトリ上で docker-compose build を実行し、コンテナをビルドします。
  3. docker-compose up -d でバックグラウンドでコンテナを起動します。
  4. ブラウザで <Docker が起動しているマシンのホスト>:8888/ にアクセスすると、JupyterLab が使用できます。

Dockerfile の中身解説

docker/jupyterlab/Dockerfile の中身について解説します。

1. 環境変数を定義する

ENV LC_ALL C.UTF-8
ENV PATH "/root/.pyenv/bin:${PATH}"
ARG PYTHON_VERSION="3.9.7"

2. 必要なライブラリをインストールする

RUN apt-get update && \
    DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
    # pyenv requirements: https://github.com/pyenv/pyenv/wiki#suggested-build-environment
    build-essential \
    curl \
    git \
    libbz2-dev \
    libffi-dev \
    liblzma-dev \
    libncurses5-dev \
    libncursesw5-dev \
    libreadline-dev \
    libsqlite3-dev \
    libssl-dev \
    libxml2-dev \
    libxmlsec1-dev \
    llvm \
    make \
    tk-dev \
    wget \
    xz-utils \
    zlib1g-dev \
    # git clone need CA certificates
    ca-certificates \
    # OpenCV need libGL.so.1
    libgl1

# Install nodejs for JupyterLab extension
RUN curl -sL https://deb.nodesource.com/setup_current.x | bash - && \
    apt-get install -y --no-install-recommends nodejs && \
    rm -rf /var/lib/apt/lists/*

2. pyenv で Python をインストールする

apt-get install python3 でインストールされる Python はバージョンが 3.6 と古いので、pyenv を使用して Python 3.9.7 をインストールします。

RUN git clone https://github.com/pyenv/pyenv.git ~/.pyenv && \
    pyenv install $PYTHON_VERSION && \
    pyenv global $PYTHON_VERSION

3. Python のライブラリをインストールする

  1. JupyterLab のホームディレクトリは /notebook にします。
  2. cat requirements.txt | xargs -n 1 pip install -U --no-cache-dirrequirements.txt に記載されているライブラリを上から順番にインストールします。pip -r requirements.txt としない理由は、まず最初に pip をアップグレードし、wheel など他のライブラリをインストールをする際に必要となるライブラリを先にインストールするためです。
  3. COPY jupyter_lab_config.py /root/.jupyter/ で JupyterLab の設定ファイル jupyter_lab_config.py をコンテナにコピーします。
WORKDIR /notebook
COPY requirements.txt .
RUN eval "$(pyenv init --path)" && \
    cat requirements.txt | xargs -n 1 pip install -U --no-cache-dir && \
    jupyter notebook --generate-config -y && \
    # fix issue about black https://github.com/psf/black/issues/1143
    mkdir -p /root/.cache/black/21.9b0/ && \
    rm requirements.txt
COPY jupyter_lab_config.py /root/.jupyter/

以下のライブラリがインストールされます。

  • 他のライブラリのインストールに必要なライブラリ
    • pip
    • wheel
  • JupyterLab の拡張機能及びその依存ライブラリ
    • jupyterlab: JupyterLab 本体
    • ipywidgets: ノートブック上で使える GUI ウィジェット
    • jupyterlab_tabnine: コードの入力補完
    • jupyterlab_code_formatter: コードの整形
    • black: jupyterlab_code_formatter で使用
    • isort: jupyterlab_code_formatter で使用
  • データサイエンス系のライブラリ (ここは好みで変えてください)
    • beautifulsoup4: HTML、XMLパーサー
    • lxml: HTML、XMLパーサー
    • matplotlib: グラフ作成
    • more-itertools: 標準ライブラリの itertools の拡張
    • networkx: グラフ
    • numpy: 数値計算
    • opencv-contrib-python: 画像処理
    • openpyxl: Excel ファイルの処理
    • pandas: 表計算
    • pillow: 画像処理
    • pyyaml: yaml パーサー
    • requests: HTTPライブラリ
    • scikit-image: 画像処理
    • scikit-learn: 機械学習
    • scipy: 数値計算
    • seaborn: グラフ作成
    • statsmodels: 統計処理
    • sympy: 数値計算
    • tabulate: 表作成
    • tqdm: 進捗表示

4. ポート及びコマンド

  • デフォルトでは 8888 (ホスト側) -> 8888 (コンテナ側) にポートフォーワーディングされます。
    • 変更したい場合は、docker-compose.yml の ports を変更してください。
    • 例: 30000 (ホスト側) -> 8888 (コンテナ側) にするには、30000:8888
  • eval "$(pyenv init --path)" で pyenv の Python 環境を有効にして、jupyter lab で JupyterLab を起動しています。
EXPOSE 8888
CMD eval "$(pyenv init --path)" && jupyter lab

Pytorch 用の Dockerfile

ディープラーニングライブラリの Pytorch 用の Dockerfile も用意しました。 上記との違いは、以下になります。

  • ベースイメージを nvidia/cuda:10.2-cudnn7-devel-ubuntu18.04 に変更
  • torch、torchvision、torchaudio を追加

実行には以下の環境が必要です。

  • Nvidia 製の GPU
  • Nvidia Driver 440.33 以上
  • docker-compose 1.28.0 以上

ソースは pystyle/docker/jupyterlab_dl になります。

  1. Dockerfile をダウンロードします。
  2. Dockerfile があるディレクトリ上で docker-compose build を実行し、コンテナをビルドします。
  3. docker-compose up -d でバックグラウンドでコンテナを起動します。
  4. ブラウザで <Docker が起動しているマシンのホスト>:8888/ にアクセスすると、JupyterLab が使用できます。

コメント

コメントする

目次