2016/8/5追記
紹介したDocker Image https://hub.docker.com/r/jupyter/notebook/ はDeprecatedとなってしまったようです・・・ https://github.com/jupyter/docker-stacks を使えということなので、ちょっと試してみて書き換えようと考え中
Jupyter Notebookは簡単に処理を試したり、試した経過を簡単に記録しておけたりするので、お仕事だけでなく、社会人博士での活動の上でも、なくてはならない存在です。
ただ一方で、Jupyterは現在もがんがん開発が進んでいる状態ですので、より改善されたバージョンを常に追わねばならず骨が折れます。
個人的には、どのバージョンからどのバージョンへアップデートするかとかを気にするのはツラいので、Dockerを使ってJupyter Notebookがイチからインストールされた状態をDocker Imageとして保ちたいところです。そうすれば、コンテナの状態そのものには気をつかわず、Notebookファイルや関連するリソースのみに気をつかえばよくなるはず・・・
適当なサーバにDockerをインストールしてJupyter Notebookを起動しておいてもよかったのですが、ネットワーク接続がない環境でも使えるようにしたかったので、ローカル環境にDocker ToolboxをインストールしてJupyter Notebookを動かすことにしました。これが結構楽だったのでメモ。
TL;DR
- 最新のJupyter Notebookを使い続けるには、Docker上でJupyter公式のDocker Imageを使うのがよさげ
- ローカルでDockerを簡単に使うには、Docker ToolboxのQuickstart Terminalを使うのがよさげ
ローカルへのDocker Toolboxのインストール
ローカル環境でのDockerの実行は、自分は一昔前はVirtualBoxインストールしてvagrantでboot2dockerしてみたいなことをしましたが、今はDocker Toolboxのインストーラ一発でできるのでクッソ楽です。
ということで、Docker Toolboxのページからインストーラをダウンロード・実行します。自身はWindows環境、Mac環境ともに特につまづいたポイントはない感じでしたが、以下を参考に・・・。
インターフェースは、自分は特にこだわりはないので Docker Quickstart Terminal を使うようにしています。Docker Toolboxをインストールして、Quickstart Terminalを起動したら、whalesayを実行してみてコンテナが起動できることを確認します。
$ docker run docker/whalesay cowsay boo
_____
< boo >
-----
\
\
\
## .
## ## ## ==
## ## ## ## ===
/""""""""""""""""___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\______/
Moby Dockは業務ですさんだ心を癒してくれますね。
ローカルDockerでのJupyter Notebookの起動
Jupyterのイメージはいろいろあるわけですが、今後もメンテされ続けると期待できそうなものとしては、Jupyter公式のDocker Imageが、シンプルですが最も使いまわしがしやすそうな感じです。
次点として、 https://github.com/jupyter/docker-stacks もありますが、ツールが豊富にインストールされているイメージを含む代わりに、仕様が管理しきれている感じではなく、継続的に使うには怖い感じがあります。
自分がコンテナに与えているパラメータは以下のような感じ。
- コンテナ名 ...
jupyter
- Jupyter Notebookを起動するポート ...
8888
- Notebookディレクトリ ... Notebookファイル(.ipynb)などを保存するローカル環境のディレクトリを絶対パスで指定する
- Macの場合: ローカルのファイルパスをそのまま記述できる
- Windowsの場合: 例えばCドライブのユーザーフォルダならば
/c/Users/
みたいな感じで指定できる
Quickstart Terminalで以下のようにタイプすればJupyter Notebookが起動します。
$ docker run -d --name jupyter -p 8888:8888 -v Notebookディレクトリ:/notebooks jupyter/notebook:4.2.0
現在のところ、Docker ImageのTagはJupyterのバージョンを明示する(
4.2.0
など)のがよさそう。
latest
だと起動してくれなかったり、stable
だと4.2.0.dev
が起動したりとちょっと怪しげ・・・
これで起動完了。http://DockerホストVMのIPアドレス:8888
をブラウザで開けばJupyter Notebookを使うことができます。
なお、DockerホストVMのアドレスは、Quickstart Terminalを開いた時のメッセージで知るのが一番楽かもしれません。
この場合は http://192.168.99.100:8888
をブラウザで開けば、Notebookのリストが現れます。
[New]メニューからNotebookを作ることができ、Notebookのファイルは、先に指定したNotebookディレクトリに保存されます。
コンテナの停止・再開
Jupyterの使用を終えて、コンテナを停止する場合は、コンテナ名を指定してdocker stop
すればOK。
$ docker stop jupyter
コンテナを再開する場合は以下のようにする。
$ docker start jupyter
コンテナの削除
Jupyterコンテナを削除する場合は、コンテナ名を指定してdocker rm
すればOK。
このコンテナにインストールしたパッケージなどの情報もあわせて削除される。
$ docker rm jupyter
Jupyterイメージのカスタマイズ
Jupyter NotebookイメージはUbuntu 14.04ベースなので、例えばnumpyがほしければ、Notebookのセルに !apt-get update && apt-get install -y python-numpy
とか書いて実行すればインストールできます。
ただ、例えば公式のDocker Imageのバージョンが上がって、新たに最新Docker Imageで起動するなどとした場合、改めてnumpyをインストールする必要があります。こんな場合は、 Dockerfileを書いて、公式Docker Imageをベースに独自のDocker Imageを作って管理するのがよいかもしれません。
例えば、 https://github.com/yacchin1205/research-notebook/blob/master/Dockerfile のように、公式イメージをFROM
とし、自分が必要とするパッケージをインストールするようなDockerfileを書いておき、このファイルがあるディレクトリで、
$ docker build -t yacchin1205/research-notebook .
とかすれば、
$ docker run -d --name jupyter -p 8888:8888 -v Notebookディレクトリ:/notebooks yacchin1205/research-notebook
とするだけで、独自Docker ImageをベースとしたNotebookを実行することができるようになります。
Docker Hubをつかえば、この辺の管理がもっと楽になると思いますが、ここでは説明は割愛・・・
まとめ
こんな感じで、作業に必要なJupyter Notebookの環境をDockerfileで定義して、ローカル環境上で起動し、業務や計算処理に使っています。Jupyter Notebookのバージョンが上がってもこの形なら追い続けられるかなと。
また、Docker Imageに作業環境をまとめてあるので、同じ作業環境をもうちょっとリッチなクラウド上のマシンで起動する、みたいなことも簡単にできるので、ローカルでは手狭となったら割と簡単に移せるかなと。
そんな感じで、Jupyter Notebookを活用していろいろかしこく回していきたいですね、というところで。