目的
国立情報学研究所(NII)の Jupyter Notebookを用いた文芸的インフラ運用のススメを試してみるために、NII の公開している Docker コンテナをお手軽に起動する。
また、個人的にちょっと使いにくく感じている部分を修正する。
参考: Jupyter notebook を用いた文芸的インフラ運用のススメ
作業端末
ここからの作業は、以下の環境を想定する。
作業端末では以下のツールが動作する。
- docker サーバー
- docker-compose
- jupyter notebook 接続用のWeb ブラウザー
- openssl
必要なファイルの作成
参参考: jupyter-for-infrastructure
この作業は作業端末のdockerユーザーで行う。
作業ディレクトリの作成
LC_DIR=/opt/docker/jupyter-LC
sudo mkdir -p ${LC_DIR}/{conf,notebooks,notebooks/.ansible}
cd ${LC_DIR}
Ansible の設定
Ansible の設定ファイルを作成する。
ここでは最低限の設定を行っているので ここを参考に
必要に応じて変更する。
cat <<EOF |sudo tee ${LC_DIR}/conf/ansible.cfg
[defaults]
forks = 3
remote_user = ansible
private_key_file = /notebooks/.ansible/ansible_id_ed25519
ansible_ssh_user = ansible
inventory = /notebooks/.ansible/inventory
EOF
Inventory ファイルの作成
Ansible の対象サーバーを指定する inventory ファイルの雛形を作成しておく。
echo "[TARGETS]" | sudo tee ${LC_DIR}/notebooks/.ansible/inventory
公開鍵の生成
Ansible の ssh 接続で利用する公開鍵を作成する。
sudo ssh-keygen -f ${LC_DIR}/notebooks/.ansible/ansible_id_ed25519 -t ed25519 -N ""
Jupyter Notebook の設定
Jupyter-LC の設定のままではパスワードを平文で記述する必要があるため、パスワードをハッシュで渡せるように変更する。
cat <<EOF |sudo tee ${LC_DIR}/conf/jupyter_notebook_config.py
import os
c.NotebookApp.ip = '*'
c.MultiKernelManager.kernel_manager_class = 'lc_wrapper.LCWrapperKernelManager'
c.KernelManager.shutdown_wait_time = 10.0
if 'PASSWORD' in os.environ:
c.NotebookApp.password = os.environ['PASSWORD']
EOF
docker-composeの設定
Jupyter-LC 用の docker-compose.yml を作成する。
cat <<EOF |sudo tee ${LC_DIR}/docker-compose.yml
version: '2'
services:
notebook:
image: niicloudoperation/notebook
environment:
TZ: Asia/Tokyo
ports:
- 127.0.0.1:8888:8888
volumes:
- ./notebooks:/notebooks
- ./conf/jupyter_notebook_config.py:/home/bit_kun/.jupyter/jupyter_notebook_config.py
- ./conf/ansible.cfg:/etc/ansible/ansible.cfg
environment:
- PASSWORD=sha1:3703d242f3a6:04ef6e0984039af6fc1d9ec054e583898cedd500
restart: always
EOF
権限の設定
Jupyter-LC_dockerのDockerfileでは
uid=1000 gid=100 となっているので、ディレクトリの所有者とグループを設定する。
sudo chown 1000:100 -R $LC_DIR
Jupyter Notebook コンテナの起動
ここまでの作業でコンテナを起動する準備が整ったので、docker-compose で起動する。
cd $LC_DIR
docker-compose up -d
jupyter notebook コンテナの起動後は、Webブラウザでhttp://localhost:8888/ を開く。
上記の設定例ではパスワードを聞かれたら「PASSWORD」と入力する。
おまけ
パスワードのハッシュ値は Jupyter Notebook のセルに次のように記述して実行すれば得られる。
この値を docker-compose ファイルの PASSWORD に設定して、コンテナを再起動する。
from notebook.auth import passwd
print(passwd())