つまりなにしたの?
Jupyter Docker StacksというJupyterを起動できるDockerコンテナを使ってデータ分析環境を立ち上げてみることにした。
Jupyter Docker Stacksとは?
Jupyter Docker Stacksは、Jupyterのアプリケーションとブラウザのツール(インタラクティブコンピューティングツールというらしい)
を含むすぐに実行できるDockerイメージのセット。
これを使うとローカルDockerコンテナに個人用Jupyterノートブックサーバを起動できる。
JupyterHubを使ってチームのJupyterLabサーバーを実行したり、Dockerfileをそこから更に作って自分好みにカスタマイズもできる。
Dockerについて
すでにインストール済とする。
docs.docker.com
以降の環境は
Docker CE Version 18.06.0-ce-mac70 (26399) Engine: 18.06.0-ce Compose: 1.22.0 Machine: 0.15.0 Notary: 0.6.1 Credential Helper: 0.6.0 Kubernetes: v1.10.3
でできている。
なお、Dockerのバージョン確認は
ここからできる。
どんなスタックがあるのか
ベースはUbuntuでCondaを使って諸々が管理されている。
jupyter/base-notebook
共通的なJupyter Notebookのスタックで他のスタックのベースになっている。
他のスタックで満足できないときはこれをベースに自分で作る用っぽい。
一旦コレで実行例を出してみる。
% docker run -p 8888:8888 jupyter/base-notebook ### 色々ダウンロードして用意してくれる Copy/paste this URL into your browser when you connect for the first time, to login with a token: http://(aaaaaaaaaaa or 127.0.0.1):8888/?token=00000000000000000000000000000000000
で実行できた。(ポート番号8888を他のアプリが使っていないようにすること)
トークンをつけずにhttp://127.0.0.1:8888/にアクセスすると
こんなページが出てくるので
?token=ここの文字列
をPassword or tokenに入れてログインする。
これであとは普通にNotebookを作って開発を始められる。
Pythonのバージョンについて
import sys print(sys.version) 3.6.5 | packaged by conda-forge | (default, Apr 6 2018, 13:39:56) [GCC 4.8.2 20140120 (Red Hat 4.8.2-15)]
こんなバージョンが入っていた。
パッケージについて
!conda info -e # conda environments: # base * /opt/conda !conda list # packages in environment at /opt/conda: # # Name Version Build Channel alembic 0.9.9 py_0 conda-forge asn1crypto 0.24.0 py_1 conda-forge attrs 18.1.0 py_1 conda-forge automat 0.7.0 py36_0 conda-forge backcall 0.1.0 py_0 conda-forge bleach 2.1.3 py_0 conda-forge ca-certificates 2018.4.16 0 conda-forge certifi 2018.4.16 py36_0 conda-forge cffi 1.11.5 py36_0 conda-forge chardet 3.0.4 py36_2 conda-forge conda 4.5.8 py36_1 conda-forge conda-env 2.6.0 0 conda-forge configurable-http-proxy 3.1.0 node8_1 conda-forge constantly 15.1.0 py_0 conda-forge cryptography 2.2.1 py36hdffb7b8_1 conda-forge decorator 4.3.0 py_0 conda-forge entrypoints 0.2.3 py36_1 conda-forge gmp 6.1.2 hfc679d8_0 conda-forge html5lib 1.0.1 py_0 conda-forge hyperlink 17.3.1 py_0 conda-forge idna 2.7 py36_2 conda-forge incremental 17.5.0 py_0 conda-forge ipykernel 4.8.2 py36_0 conda-forge ipython 6.4.0 py36_0 conda-forge ipython_genutils 0.2.0 py_1 conda-forge jedi 0.12.1 py36_0 conda-forge jinja2 2.10 py_1 conda-forge jsonschema 2.6.0 py36_1 conda-forge jupyter_client 5.2.3 py_1 conda-forge jupyter_core 4.4.0 py_0 conda-forge jupyterhub 0.8.1 py36_0 conda-forge jupyterlab 0.32.1 py36_0 conda-forge jupyterlab_launcher 0.10.5 py36_0 conda-forge libedit 3.1.20170329 0 conda-forge libffi 3.2.1 3 conda-forge libgcc 7.2.0 h69d50b8_2 defaults libgcc-ng 7.2.0 hdf63c60_3 defaults libsodium 1.0.16 0 conda-forge libstdcxx-ng 7.2.0 hdf63c60_3 defaults mako 1.0.7 py_1 conda-forge markupsafe 1.0 py36_0 conda-forge mistune 0.8.3 py36_1 conda-forge nbconvert 5.3.1 py_1 conda-forge nbformat 4.4.0 py_1 conda-forge ncurses 5.9 10 conda-forge nodejs 8.10.0 0 conda-forge notebook 5.6.0 py36_0 conda-forge openssl 1.0.2o 0 conda-forge pamela 0.3.0 py36_0 conda-forge pandoc 2.2.2 1 conda-forge pandocfilters 1.4.2 py_1 conda-forge parso 0.3.0 py_0 conda-forge pexpect 4.6.0 py36_0 conda-forge pickleshare 0.7.4 py36_0 conda-forge pip 9.0.3 py36_0 conda-forge prometheus_client 0.2.0 py36_0 conda-forge prompt_toolkit 1.0.15 py36_0 conda-forge ptyprocess 0.6.0 py36_0 conda-forge pycosat 0.6.3 py36_0 conda-forge pycparser 2.18 py_1 conda-forge pygments 2.2.0 py_1 conda-forge pyopenssl 18.0.0 py36_0 conda-forge pysocks 1.6.8 py36_1 conda-forge python 3.6.5 1 conda-forge python-dateutil 2.7.3 py_0 conda-forge python-editor 1.0.3 py36_0 conda-forge python-oauth2 1.0.1 py36_0 conda-forge pyzmq 17.1.0 py36hae99301_0 conda-forge readline 7.0 0 conda-forge requests 2.19.1 py36_1 conda-forge ruamel_yaml 0.15.44 py36h470a237_0 conda-forge send2trash 1.5.0 py_0 conda-forge setuptools 40.0.0 py36_0 conda-forge simplegeneric 0.8.1 py_1 conda-forge six 1.11.0 py36_1 conda-forge sqlalchemy 1.2.10 py36_0 conda-forge sqlite 3.20.1 2 conda-forge terminado 0.8.1 py36_0 conda-forge testpath 0.3.1 py36_0 conda-forge tini 0.18.0 h470a237_1 conda-forge tk 8.6.8 0 conda-forge tornado 5.1 py36_0 conda-forge traitlets 4.3.2 py36_0 conda-forge twisted 17.5.0 py36_0 defaults urllib3 1.23 py36_0 conda-forge wcwidth 0.1.7 py_1 conda-forge webencodings 0.5 py36_0 conda-forge wheel 0.31.1 py36_0 conda-forge xz 5.2.3 0 conda-forge yaml 0.1.7 0 conda-forge zeromq 4.2.5 hfc679d8_3 conda-forge zlib 1.2.11 h470a237_3 conda-forge zope.interface 4.5.0 py36h470a237_0 conda-forge
確かに分析系のパッケージは入っていなくてNotebookをインストールしたままのような感じ。
jupyter/minimal-notebook
base-notebookにくわえてNotebookの文書変換のためのPandocとTeX Liveや
git、emacs、jed、vim、unzipが更に入っているみたい。
コレでもまだ分析環境とは言えない。
jupyter/r-notebook
R言語が扱えるNotebookを作ることができる。
もちろんプロットに必要なパッケージや分析に使えるRandomforestなども入っているみたい。
Rで分析を行うときはこれを立ち上げれば良い。
jupyter/scipy-notebook
Pythonの分析環境としてNotebookを作ることができる。
Pandas,numpy,scipy,scikit-learn,scikit-image,matplotlibなどPythonをデータ分析言語たらしめるものたちが入っている。
bokehやseabornなどのきれいな可視化ツールもあるのでそのまま素敵なNotebookが作れる。
baseでRequsetsも入っていてBeautifulSoupもこれに含まれているので、スクレイピングもできる様子。
jupyter/tensorflow-notebook
みんな大好きDeepLearning用のNotebookを作ることができる。
NvidiaDockerではないっぽいのでGPUは使えない。scipy-notebookに加えてTensorFlowとKerasが使える。
jupyter/datascience-notebook
Pythonのscipy-notebook, r-notebookに加えてJuliaの環境が追加される。
データ解析何でも来いってかんじのNotebook。僕は欲張りなので普段遣いはこれにしようと思った。
jupyter/pyspark-notebook
scipy-notebookに加えてPythonをサポートしたApacheSpark、Hadoopが含まれている。
あまり大きなデータを扱ったことがなかったのでSparkを使ったことが無いけど、
だからこそこういうNotebookから使ってみるのが良さそう。
jupyter/all-spark-notebook
pyspark-notebookに加えてRやScalaもサポートしている。
Spark関連全部のせっぽい。使いこなせる気がしない。
作業を開始・中断・再開する方法
% docker run -p 8888:8888 jupyter/base-notebook Copy/paste this URL into your browser when you connect for the first time, to login with a token: # Ctrl+Cでコンテナを落として中断する。 # 落ちているコンテナを確認 % docker ps -a docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 30fe4575a2b1 jupyter/base-notebook "tini -g -- start-no…" 3 minutes ago Exited (0) 51 seconds ago xenodochial_lewin # 作成されたイメージを確認 % docker images REPOSITORY TAG IMAGE ID CREATED SIZE jupyter/base-notebook latest 786c009bc5ad 4 days ago 718MB # コンテナを再開する ## ファイルが残っていることを確認する。新たに立ち上げると別の環境になるのでstartを使う % docker start -a xenodochial_lewin Completing containers xenodochial_lewin 30fe4575a2b1 -- 6 minutes, jupyter/base-notebook
環境を削除する方法
Docker削除の手順と同じで、
# コンテナを停止する Ctrl+c # コンテナを削除する ## 停止済みプロセスを確認して削除 ## Notebook等は別途バックアップしないとここで消える % docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 30fe4575a2b1 jupyter/base-notebook "tini -g -- start-no…" 8 minutes ago Exited (0) 6 seconds ago xenodochial_lewin % docker rm xenodochial_lewin # イメージを削除する ## 当分使わないなと思ったImageを削除する。 ## base-notebookを使わなくなったけどdatascience-notebookに入れ替えるならほとんど共用なので消さないほうが良い % docker images REPOSITORY TAG IMAGE ID CREATED SIZE jupyter/base-notebook latest 786c009bc5ad 4 days ago 718MB % docker rmi jupyter/base-notebook:latest
おわりに
これで自分の環境を汚さずに一通り環境を作って作業できる状態になりました。