Jupyter Docker Stacksのコンテナをカスタマイズする

2021.07.29

データアナリティクス事業本部の鈴木です。

私はJupyter Notebookを使いたいときは、Jupyter Docker Stacksdatascience-notebookのコンテナを使っています。 そのままでも十分に使いやすいのですが、ライブラリや拡張機能を入れたり、テーマを変えたりして、あらかじめカスタマイズしておいたイメージが欲しくなったので試してみました。

検証の詳細

検証すること

以下が実施済のイメージを作成します。

  • 追加のライブラリをpipでインストールする。
  • 拡張機能のRISEjupyterthemesをインストールする。
  • jupyterthemesを使ってテーマを変える。

ライブラリと拡張機能をインストールするため、以下のrequirements.txtを作成しました。

requirements.txt

jupyterthemes == 0.20.0
plotly == 5.0.0
RISE == 5.7.1
wordcloud == 1.8.1

検証環境

  • Docker Desktop Version 3.4.0 (3.4.0.5223)
  • macOS Catalina バージョン10.15.7

やってみた

今回は、Jupyter Docker StacksのドキュメントのContributed Recipesページのうち、Using pip install or conda install in a Child Docker imageを参考に進めていきました。

Dockerfileを作成する

まず、jupyter/datascience-notebookイメージをカスタマイズしたイメージを作るため、Dockerfileを作成しました。

大きくは以下の2点を行いました。

  • pip install -rでrequirements.txt記載のライブラリと拡張機能をインストールする。
  • インストールしたjupyterthemesでテーマを設定する。

作成したDockerfileは以下です。イメージのタグは適宜変更してください。

Dockerfile

FROM jupyter/datascience-notebook:514883dc662a
# 追加モジュールのインストール
COPY --chown=${NB_UID}:${NB_GID} requirements.txt /tmp/
RUN pip install --quiet --no-cache-dir --requirement /tmp/requirements.txt && \
    fix-permissions "${CONDA_DIR}" && \
    fix-permissions "/home/${NB_USER}"
# テーマの設定
 RUN jt -t chesterish -T -N

WORKDIR "${HOME}"

補足

  • COPYでrequirements.txtをコンテナにコピーする際には実行ユーザーであるjovyanの所有になるようにしておきます。NB_UIDとNB_GIDはjovyanのユーザーIDとグループIDです。

  • ユーザーIDとグループIDは、コンテナを起動して、docker exec -it コンテナ名 /bin/bashでコンテナに入り、echoコマンドか/etc/passwdの内容から確認することができます。

  • fix-permissionsはコンテナ内にあるシェルスクリプトです。fix-permissionsのコード を確認すると、インストールを行なった後は実行するようにコメントがあるため、それにならいました。

Dockerfileをビルドする

Dockerfileがあるディレクトリで以下コマンドを実行し、ビルドしました。

docker build --rm -t my-datascience-notebook .

終了すれば、docker imagesでイメージができていることを確認しておきます。

コンテナを起動する

以下のようにdocker-compose.ymlを作成しDocker Conposeで起動しました。

docker-compose.yml

version: "3"
services:
    my-datascience-notebook:
        build: .
        volumes: 
            - ${PWD}/:/home/jovyan/work
        ports:
            - 8888:8888
        container_name: my-datascience-notebook

docker-compose.ymlがあるディレクトリで下記コマンドを実行すると、コンテナが起動します。

docker-compose up

結果を確認する

起動したコンテナにアクセスして、設定が反映されていることを確認しました。

Jupyter Notebookにアクセスすると、テーマがjupyterthemesで設定したchesterishになっていることが分かります。

ホーム画面

また、ノートを開いて、追加したモジュールが使えるか確認します。plotlyをインストールしていたので、plotly.expressが動作するか確認します。

追加したモジュールの動作確認

バッチリ動いていますね。

ツールバーにRISE用のボタンも表示されています。

RISEのインストール結果

最後に

Dockerfileを作成し、カスタマイズしたdatascience-notebookイメージを作成しました。

よく使うライブラリなどを追加したイメージが欲しい方の、参考になれば幸いです。