目次
概要
JupyterLab が使える Dockerfile の作り方を紹介します。
Dockerfile
内容
- ベースイメージは
ubuntu:18.04
- apt でインストールできる Python はバージョンが古いので、pyenv で Python 3.9.7 をインストールする
- pip で
requirements.txt
に記載された Python のライブラリをインストールする - JupyterLab の以下の拡張をインストールする
- ipywidgets: ノートブック上で使える GUI ウィジェット
- ryantam626/jupyterlab_code_formatter: コードの整形
- Tabnine: コードの入力補完
コンテナのビルド、作成方法
ソースは pystyle/docker/jupyterlab になります。
- Dockerfile をダウンロードします。
requirements.txt
にある Python ライブラリがpip
でインストールされるので、使いたいライブラリがある場合は適宜編集してください
- Dockerfile があるディレクトリ上で
docker-compose build
を実行し、コンテナをビルドします。 docker-compose up -d
でバックグラウンドでコンテナを起動します。- ブラウザで
<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 のライブラリをインストールする
- JupyterLab のホームディレクトリは
/notebook
にします。 cat requirements.txt | xargs -n 1 pip install -U --no-cache-dir
でrequirements.txt
に記載されているライブラリを上から順番にインストールします。pip -r requirements.txt
としない理由は、まず最初にpip
をアップグレードし、wheel
など他のライブラリをインストールをする際に必要となるライブラリを先にインストールするためです。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 になります。
- Dockerfile をダウンロードします。
- Dockerfile があるディレクトリ上で
docker-compose build
を実行し、コンテナをビルドします。 docker-compose up -d
でバックグラウンドでコンテナを起動します。- ブラウザで
<Docker が起動しているマシンのホスト>:8888/
にアクセスすると、JupyterLab が使用できます。
コメント