夕蛙のなく頃に

データアナリストとして学んだことや趣味で勉強し始めたIoTをアウトプットする

自分仕様にカスタマイズしたJupyter Notebookをdockerで構築する

モチベーション

ローカルでJupyter Notebookを動かしていたが、常に素早く分析環境を構築できるようにDockerを使いたい。

ローカルでJupyter Notebookを使う際は、cssやextensions・起動時に読み込むファイルなど自分仕様にカスタマイズしている。

そのカスタマイズをDocker環境にも反映させたい。

書くこと

  • css・extensions・起動時に読み込むファイルをDockerfileやdocker run時のオプションにどう書くか

書かないこと

  • 私が使っているcss・extensions・起動時に読み込むファイル
  • jupyter notebookのカスタマイズの方法
  • dockerコマンドの説明

ファイル構成

❯ tree -a .
.
├── Makefile                        # docker build, docker runコマンドを管理
└── jupyter
    ├── .ipython
    │   └── profile_default
    │       └── ipython_config.py   # notebook起動時のオプションを記述
    ├── .jupyter
    │   ├── custom
    │   │   ├── current_theme.txt   # jupyter notebookのthemeを記述
    │   │   └── custom.css          # notebookのcssを記述
    │   └── nbconfig
    │       └── notebook.json       # jupyter notebookのextensionを記述
    ├── Dockerfile
    └── requirements.txt            # docker環境内で追加でinstallしたいpythonライブラリ

Dockerfile

❯ cat jupyter/Dockerfile
FROM jupyter/datascience-notebook

# Install Jupyter Notebook extensions
RUN conda install -y -c conda-forge jupyter_contrib_nbextensions

# Install python library
COPY ./requirements.txt $HOME/requirements.txt
RUN pip install --upgrade pip
RUN pip install -r $HOME/requirements.txt

# Set up Jupyter Notebook config
RUN ipython profile create
COPY .jupyter/custom $HOME/.jupyter/custom
COPY .ipython/profile_default/ipython_config.py $HOME/.ipython/profile_default/ipython_config.py
ENV CONFIG /home/jovyan/.jupyter/jupyter_notebook_config.py
ENV CONFIG_IPYTHON /home/jovyan/.ipython/profile_default/ipython_config.py
COPY .jupyter/nbconfig $HOME/.jupyter/nbconfig

説明

  • 使用するDocker Imageを記述
  • extensionsが詰まったライブラリをインストール
  • docker環境内に追加したいpythonライブラリをインストール
    • jupyter_themeを使う場合は、少なくともjupyterthemesをインストールする必要がある
  • Jupyter Notebook用のconfigファイル群を作成し、手元のconfigファイルを所定のpathにcopy

Makefile

❯ cat Makefile
.PHONY: run
docker-build-jupyter:
    docker build -t $(DOCKER_IMAGE_NAME) jupyter

docker-run-jupyter:
    docker run \
        -it \
        -d \
        --name jupyter \
        -p 8888:8888 \
        -v $(JUPYTER_DOCKER_HOME_DIR):/home/jovyan/work \
        $(DOCKER_IMAGE_NAME) \
        start-notebook.sh \
        --NotebookApp.token='' \
        --NotebookApp.password=''

事前にやっておくこと

  • $(DOCKER_IMAGE_NAME): 作成するdocker imageの名前を環境変数化する
  • $(JUPYTER_DOCKER_HOME_DIR): 今回作成するのは、ローカルのデータを永続化したものを扱う(docker上で作成したファイルはローカルに作成される)ので、jupyter notebookを起動する際のトップディレクトリをローカルのどのディレクトリにするか指定する

説明

  • Jupyter Notebook起動にtokenもpasswordも使いたくないので、使わないよう空文字を入れている

Jupyter Notebookを使う

> make docker-build-jupyter
> make docker-run-jupyter

上記コマンドでdockerが立ち上がりました。 http://localhost:8888 にアクセスすることで、Jupyter Notebookが使えます!