Jupyter Docker Stacksのコンテナをカスタマイズする
データアナリティクス事業本部の鈴木です。
私はJupyter Notebookを使いたいときは、Jupyter Docker Stacksのdatascience-notebookのコンテナを使っています。 そのままでも十分に使いやすいのですが、ライブラリや拡張機能を入れたり、テーマを変えたりして、あらかじめカスタマイズしておいたイメージが欲しくなったので試してみました。
検証の詳細
検証すること
以下が実施済のイメージを作成します。
- 追加のライブラリをpipでインストールする。
- 拡張機能のRISEとjupyterthemesをインストールする。
- jupyterthemesを使ってテーマを変える。
ライブラリと拡張機能をインストールするため、以下の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は以下です。イメージのタグは適宜変更してください。
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で起動しました。
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用のボタンも表示されています。
最後に
Dockerfileを作成し、カスタマイズしたdatascience-notebookイメージを作成しました。
よく使うライブラリなどを追加したイメージが欲しい方の、参考になれば幸いです。