LoginSignup
11
11

More than 5 years have passed since last update.

boot2dockerでIPython Notebook環境構築

Last updated at Posted at 2014-10-03

2016/6/5追記

今は Docker Toolbox と Jupyter Notebook を使うのがよさげなので書きました。ローカル環境でJupyter Notebookを動かすときの俺的ベストプラクティス

はじめに

データ解析とかの作業を日常的にやるようになってきていて、都度都度Pythonコードを書いているわけですが、案の定(自分のスペック的に)細かいコードが散らかってきてあとでどれを何に使ったのかわからなくなるわけです。

そこでIPython Notebookに関心が。院生の時に、データ解析のプログラムとそこから得られた分析結果をいっしょに並べておけば、プログラムへの理解補助になってうれしいんじゃない?みたいな話をやっていて、これをお手軽に実現できそうだなと。そんな流れで試してみたメモ。

目標

Windows環境でさっくりIPython Notebook環境を作って試す。
気持ちとしては、

  • Windows上に直接環境を作ってしまうと、後々パッケージを追加したくなった際にWindows固有のことで大変な目に遭いそう
  • IPython NotebookのDockerコンテナは色々あるみたいだしうまく活用しながらやりたい

ということで、

  1. Windows環境にboot2docker仮想環境を作る
    • boot2docker仮想環境とホストWindows環境のファイルはできるだけ簡単に共有する
  2. boot2docker仮想環境上にIPython Notebookコンテナを作る
    • boot2docker仮想環境を介してホストWindows環境のファイルもできるだけ簡単に共有する

みたいなやり方を考えてみる。

使うもの

作り方

作業フォルダは C:\test\boot2docker-vboxsf とする。

boot2docker仮想環境の作成

  1. 作業フォルダで 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が作業フォルダに生成される。

  2. 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"
    
  3. 作業フォルダで 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 にアクセスしてみる。

ipythonnotebook.png

ここでNotebook(たとえばHello)を作ると、C:\test\boot2docker-vboxsf\notebookHello.ipynb ができていることが確認できる。
また、解析対象のデータなどはこのフォルダ以下に置いておけば、適宜Notebook中のPythonコードから読み込むことができる。

あらためて、boot2dockerお手軽だなと。しばらくこの環境で遊んでみます。

11
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
11