Python
docker

Docker で IPython Notebook を動かす

More than 3 years have passed since last update.

Docker で Python 3.4 を使えるようにして IPython Notebook を動かしてみます。
Python 3.4 に対応し切れていないライブラリもいくつかありますが、徐々に移行は進んでいますので、これから書くなら Python 3.4 が良いでしょう。ライブラリの対応状況は Python 3 Wall of Superpowers で確認できます。

Docker を使う理由は:

  • Python 3.4 を使うときに、一手間かかることもある
  • numpyscipy などを使うときはインストールが大変なこともある (特にWindows)
  • 計算量が増えるときは EC2 でインスタンスタイプを変えられると便利

IPython Notebook でデータ分析を進める理由はこの辺が分かりやすいと思います。

公開イメージ

Python や IPython の Docker イメージは Docker Hub に登録されていたり、Github で公開されています。まだ決定版が無いような気がしますので、いくつかの Dockerfile を読み比べてくると良さそうです。

基本的には Ubuntu ベースで構築されていますが、Python のどのモジュールを使うかで依存する C ライブラリなどが異なります。 大雑把には、 numpy などの数値演算を想定したものと、PostgreSQL などのデータベース接続を想定したものがあります。
なお、そもそもの Python のバージョンも2系と3系で異なります。

レポジトリ Python 簡単な説明
ipython/notebook (Docker Hub) Python 2.x IPython notebook in a docker container.
micktwomey/ipython3.4-notebook (Docker Hub) Python 3.4 Docker IPython 2.0 Notebook (micktwomey/ipython3.4) + Python 3.4 (micktwomey/python3.4) image
unfairbanks/docker-ipython-notebook (Docker Hub) Python 2.x Docker container image capable of running an iPython notebook server
dckc/ipython-docker (Github) Python 2.x docker container for ipython notebook
crosbymichael/python-docker (Github) Python 2.x Dockerfile for python on debian
mingfang/docker-ipython (Github) Python 2.x Run IPython, Pattern, NLTK, Pandas, NumPy, SciPy, Numba, Biopython inside Docker

自作イメージと使い方

今回は、自分の勉強がてらと、各ライブラリの最新バージョンを使うために、Docker イメージを手作りして Docker Hub に登録してみました。Github と連携した Automated Build で作成しておくと、イメージのビルドは自動で進めてくれて便利です。

イメージを指定してコンテナを立ち上げると、IPython Notebook が8888番ポートで起動します。 -p オプションでホストマシンから転送するポート番号を指定できます。(ここでは、指定方法が分かるようにポート番号を変えています)

$ docker run -d -p 8080:8888 skitazaki/python34-ipython

ホストマシンとファイルを共有したい場合は、 /notebook をマウントします。

$ docker run -d -p 8080:8888 -v $PWD:/notebook skitazaki/python34-ipython

ブラウザで8080番ポートにアクセスすると、IPython Notebook が使えるようになっています。

Home.png

「New Notebook」をクリックすると新規にノートブックを作成できます。
pylab (※今後は matplotlib だけの方が行儀が良いらしい) を有効にし、 pandas を使ってグラフを描画できることが確認できます。

Untitled0.png

EC2 で起動するときは80番ポートを公開しても良いですし、SSHのトンネリングでも利用できます。対象となるデータに合わせて、セキュリティグループや公開範囲を設定しましょう。

ノートブックの編集が終わったら、HTML 形式で出力することも可能ですし、画面上から Python ソースコードも IPython Notebook のソースコードもダウンロードできます。ピボットテーブルなどでデータの概要を確認してグラフを描く用途には、これで十分なことも多いでしょう。IPython Notebook では Markdown 形式で説明も追加できますので、単なるソースコードよりも管理に便利だと思います。

単なるインタラクティブシェルを使いたい場合は以下のようにコンテナを立ち上げます。

$ docker run -it skitazaki/python34-ipython ipython

Python のライブラリを追加でインストールしたい場合は、コマンドに /bin/bash を指定し、pip3 install {LIBNAME} でインストールしてください。インストールが終わったら、以下のコマンドで IPython Notebook サーバーを起動できます。

コンテナ
root% ipython-notebook-startup.sh /notebook

その他

Python の有用なライブラリはこちらにまとめられています。たまに眺めてみると新たな発見があるかもしれません。

Docker を使うときはチートシート (wsargent/docker-cheat-sheet) に書いてあるエイリアスを設定しておくと便利です。 .bashrc/.zshrc などに追記しておきましょう。

.bashrc
alias dl='docker ps -l -q'

Docker の導入編としては以下の記事が分かりやすいと思います。