2016/6/5追記
今は Docker Toolbox と Jupyter Notebook を使うのがよさげなので書きました。ローカル環境でJupyter Notebookを動かすときの俺的ベストプラクティス
はじめに
データ解析とかの作業を日常的にやるようになってきていて、都度都度Pythonコードを書いているわけですが、案の定(自分のスペック的に)細かいコードが散らかってきてあとでどれを何に使ったのかわからなくなるわけです。
そこでIPython Notebookに関心が。院生の時に、データ解析のプログラムとそこから得られた分析結果をいっしょに並べておけば、プログラムへの理解補助になってうれしいんじゃない?みたいな話をやっていて、これをお手軽に実現できそうだなと。そんな流れで試してみたメモ。
#目標
Windows環境でさっくりIPython Notebook環境を作って試す。
気持ちとしては、
- Windows上に直接環境を作ってしまうと、後々パッケージを追加したくなった際にWindows固有のことで大変な目に遭いそう
- IPython NotebookのDockerコンテナは色々あるみたいだしうまく活用しながらやりたい
ということで、
- Windows環境にboot2docker仮想環境を作る
- boot2docker仮想環境とホストWindows環境のファイルはできるだけ簡単に共有する
- boot2docker仮想環境上にIPython Notebookコンテナを作る
- boot2docker仮想環境を介してホストWindows環境のファイルもできるだけ簡単に共有する
みたいなやり方を考えてみる。
#使うもの
- すでに手持ち環境にインストール済み
- VirtualBox 4.3.12
- Vagrant 1.6.5
- vagrant-multi-putty 1.4.4 ... Windows環境でVagrantいじるときにすごくうれしい
- 今回使ってみるもの
#作り方
作業フォルダは C:\test\boot2docker-vboxsf
とする。
###boot2docker仮想環境の作成
-
作業フォルダで
vagrant init
する> vagrant init dduportal/boot2docker A `Vagrantfile` has been placed in this directory. You are now ready to `vagrant up` your first virtual environment! Please read the comments in the Vagrantfile as well as documentation on `vagrantup.com` for more information on using Vagrant.
dduportal/boot2dockerを利用するためのVagrantfileが作業フォルダに生成される。
-
Vagrantfileのネットワーク設定を書き換える
今回はboot2docker環境をポートフォワードではなく、ホストからのアクセス限定で利用することとし、今回は192.168.33.11
を振ってみる。
もともとコメントアウトされている箇所を以下のように変更。Vagrantfile# Create a private network, which allows host-only access to the machine # using a specific IP. config.vm.network "private_network", ip: "192.168.33.11"
-
作業フォルダで
vagrant up
して仮想環境を作成、起動する> vagrant up Bringing machine 'default' up with 'virtualbox' provider... ==> default: Importing base box 'dduportal/boot2docker'... ==> default: Matching MAC address for NAT networking... ==> default: Checking if box 'dduportal/boot2docker' is up to date... ==> default: Setting the name of the VM: boot2docker-vboxsf_default_1412262151282_87930 ==> default: Fixed port collision for 2375 => 2375. Now on port 2200. ==> default: Fixed port collision for 22 => 2222. Now on port 2201. ==> default: Clearing any previously set network interfaces... ==> default: Preparing network interfaces based on configuration... default: Adapter 1: nat default: Adapter 2: hostonly ==> default: Forwarding ports... default: 2375 => 2200 (adapter 1) default: 22 => 2201 (adapter 1) ==> default: Running 'pre-boot' VM customizations... ==> default: Booting VM... ==> default: Waiting for machine to boot. This may take a few minutes... default: SSH address: 127.0.0.1:2201 default: SSH username: docker default: SSH auth method: private key default: Warning: Connection timeout. Retrying... ==> default: Machine booted and ready! ==> default: Checking for guest additions in VM... ==> default: Configuring and enabling network interfaces... ==> default: Mounting shared folders... default: /vagrant => C:/test/boot2docker-vboxsf
最後のメッセージのように、boot2docker仮想環境上の
/vagrant
がホストのC:\test\boot2docker-vboxsf
と自動的に共有される。
これでboot2docker環境の起動完了。vagrant putty
とかすると仮想環境にSSHできる。
Using username "docker".
Authenticating with public key "imported-openssh-key"
## .
## ## ## ==
## ## ## ## ===
/""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\______/
_ _ ____ _ _
| |__ ___ ___ | |_|___ \ __| | ___ ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__| < __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
boot2docker: 1.2.0
master : e75396e - Fri Aug 22 06:03:48 UTC 2014
docker@boot2docker:~$ ls -la /vagrant
total 5
drwxrwxrwx 1 docker staff 0 Oct 2 15:02 ./
drwxr-xr-x 17 root root 400 Oct 2 15:03 ../
drwxrwxrwx 1 docker staff 0 Oct 2 15:02 .vagrant/
-rwxrwxrwx 1 docker staff 4951 Oct 2 15:02 Vagrantfile
docker@boot2docker:~$
ディレクトリ /vagrant
から C:\test\boot2docker-vboxsf
の内容が見えていて、変更が互いに反映されることを確認。
###IPython Notebookコンテナの起動
boot2dockerにIPython Notebookコンテナを作ってみる。
ここでは、
-
C:\test\boot2docker-vboxsf\notebook
(/vagrant/notebook
) がIPython Notebookのデータディレクトリとして機能するようにする - IPython Notebookのポートは
8080
としてみる。boot2docker環境上で以下のコマンドを実行する。
docker@boot2docker:~$ mkdir /vagrant/notebook
docker@boot2docker:~$ docker run -d -p 8080:8888 -v /vagrant/notebook:/notebook skitazaki/python34-ipython
Unable to find image 'skitazaki/python34-ipython' locally
Pulling repository skitazaki/python34-ipython
...
3f1228b888bd: Download complete
(コンテナID)
docker@boot2docker:~$
これで、IPython Notebookコンテナの /notebook
として、boot2docker環境内の /vagrant/notebook
が対応づき、これにWindowsホストの C:\test\boot2docker-vboxsf\notebook
が対応づく形になる。
特にエラーなどなければこれで起動は完了。念のため docker ps
とかして、コンテナが実行されていることを確認。
###動作確認
ブラウザから http://192.168.33.11:8080
にアクセスしてみる。
ここでNotebook(たとえばHello)を作ると、C:\test\boot2docker-vboxsf\notebook
に Hello.ipynb
ができていることが確認できる。
また、解析対象のデータなどはこのフォルダ以下に置いておけば、適宜Notebook中のPythonコードから読み込むことができる。
あらためて、boot2dockerお手軽だなと。しばらくこの環境で遊んでみます。