Jupyter Notebookが使いたくて、DockerでJupyterLabを立ち上げる。rocker/binderが便利だった
Pythonで統計処理をするためにJupyter Notebookを使いたくなり、どうせならDockerで立ち上げてやることにした。
やり方はいくつかありそうだったけど、最終的に私がたどり着いた方法を紹介する。
rocker/binderをベースにして作ることにする
dockerイメージでチョイスしたのは、rocker/binderだ。
Rocker Projectが作成しているイメージで、rockerをベースにJupyterLabを追加しているらしい。新しいキーワードが増えてきたぞ。
まず、Rocker Projectだが、そちらで開発されているdockerイメージ rocker はR Studioを立ち上げるときに使ったことがある。このサーバーは今でも稼働していて、安定して使えていると思う。
そんなRocker Projectでメンテしているものなら品質もよいだろうと期待して、rocker/binderを使うことにした。
続いて、JupyterLabというのは、公式サイトProject Jupyter曰く、
A Next-Generation Notebook Interface
だそうだ。
Jupyter Notebookを使うなら、これを使っておけってことなんだろう。
といったことが調べているうちにわかってきたので、rocker/binderを使ってサーバーを作ることにした。
Dockerfileを作る
Rocker Projectの rocker/binderについて紹介しているページによると、あまり考えないで起動したらいいらしい。
docker run --rm -ti -p 8888:8888 rocker/binder
これだけで普通に動く。
ただまあ、日本語ロケールやタイムゾーンを設定してやったりした方が良さそうな感じだったから、rocker/binderをベースにしたDockerfileを作ることにした。
FROM rocker/binder:latest
USER root
# ロケールとタイムゾーンの設定
RUN sed -i '$d' /etc/locale.gen \
&& echo "ja_JP.UTF-8 UTF-8" >> /etc/locale.gen \
&& locale-gen ja_JP.UTF-8 \
&& /usr/sbin/update-locale LANG=ja_JP.UTF-8 LANGUAGE="ja_JP:ja" \
&& ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
# 日本語環境をインストール
RUN pip install jupyterlab-language-pack-ja-JP
# 必要なライブラリを追加
RUN pip install numpy pandas
# 日本語フォントをインストール
RUN apt-get update && apt-get install -y \
fonts-ipaexfont \
fonts-noto-cjk
# Jupyter Labのデフォルトユーザー jovyan にする
USER jovyan
本当に必要になるのかはまだわからないが、日本語フォントなども入れておく。少なくとも、R Studioを作ったときはあった方がよかった。
途中で pip install しているのは、JupyterLabのインタフェースを日本語化するものや、統計処理に必要な numpy や pandas といったライブラリだ。この辺は使っているうちに、用途に合わせて変えていけばいいだろう。
ここでインストールしなくても、コンテナを作ったあとに入れることもできるしね。
Docker composeでビルド & 起動
あとはこのDockerfileでコンテナを作って起動するために、docker-compose.ymlを作る。
services:
binder:
build:
dockerfile: Dockerfile
restart: always
volumes:
- ./rstudio:/home/rstudio
- ./jovyan/work:/home/jovyan/work
ports:
- 8888:8888
environment:
JUPYTER_TOKEN: passwordmuzukashi
別に docker compose で作るほどでもないのかもしれないけど、私としては後々「このコンテナはどういう設定だったっけ?」とか思うくらいならスクリプトにしておいた方が便利かな、と思って docker compose で運用している。再現性もあるし。
volumesはどこをマウントしてやったらいいかまだわかってないので手探りだ。
JUPYTER_TOKENを設定しておくと、ログインするときにこの値をパスワードとして使える。Rocker Projectのページにも記載のある設定項目だ。インターネット上にさらすなら、起動時に発行されるtokenを自分で拾って使う方がよりセキュアかもしれないが、ローカルネットワーク内で動かすだけだし、運用上はこの方が便利かな。
ここまでできたら、Docker composeでコンテナをビルドして起動しよう。
docker compose up -d
うまく行けば、portで指定しているポートを使ってアクセスできる。ブラウザでURLを打ち込んで・・・
http://localhost:8888
ログイン画面が表示されたら成功だ。

「Password or token」の欄にJUPYTER_TOKENで設定した文字列を入力し、「Log in」をクリック。

できた!これがJupyterLabの画面かぁ。
メニューの日本語化がちゃんと適用されている。一部メニューは英語のままなところがあって、完全に日本語対応できているわけではなさそうだ。
画面を見ていると、いろいろな機能があるらしい。Notebook以外にもアレコレできそうだ。
上部メニューの 「ヘルプ > JupyterLabについて」をクリックすると、バージョン情報など見れた。

Jupyter Notebookを起動
ようやくJupyter Notebookを起動できる。JupyterLabの右ペイン上部の「Notebook」にある「Python 3 (ipykernel)」というアイコンをクリックしよう。

うん。いい感じだ。これでちょいちょいPythonプログラムを試すことができそうだ。
JupyterLabの細かいところはまだまだよくわかってないけど、ひとまずNotebookが使えるようになったからこれでよしとしよう。細かいところは必要に応じて使っていくべし。
おわりに
Jupyter Notebookを使うために、Dockerコンテナを作ってみた。
rocker/binderを使ったら、いい感じでJupyterLab環境を作ることができた。
こうして簡単に環境が作れるのがDockerの便利なところだ。
早速、ポチポチとPythonプログラムを打ち込んで遊んでみるとしよう。