jupyter notebook 環境を手っ取り早くローカルに作って試す(vagrant + centos7 + docker)

# jupyter notebook 環境を手っ取り早くローカルに作って試す(vagrant + centos7 + docker)

## 目的

* jupyter notebook を試してみたい! ( => http://jupyter.org/)
* できるだけ手早く! ( => vagrant)
* デプロイも可能なように! ( => docker)

## 環境

* mackbook air
  * macOS Sierra
  * virtual box
  * vagrant

## add box

```shell-session:if_needed
% vagrant box list | grep "centos/7"
% vagrant box add centos/7
% vagrant box update --box centos/7
```

```shell-session
% mkdir -p ./vagrant/docker/centos7/jupyter
% cd ./vagrant/docker/centos7/jupyter
% vagrant init centos/7 -m
```
ref. https://www.vagrantup.com/docs/networking/private_network.html

```shell-session:insert_line_to_Vagrantfile
config.vm.network "private_network", type: "dhcp"
```
```shell-session:sample
Vagrant.configure(2) do |config|
  config.vm.box = "centos/7"
  config.vm.network "private_network", type: "dhcp"
end
```
```shell-session
% vagrant up
% vagrant ssh
```

## install docker

ref. https://docs.docker.com/engine/installation/linux/centos/

```shell-session
$ sudo yum update -y
```
```shell-session:add_docker_yum_repo
$ sudo tee /etc/yum.repos.d/docker.repo <<-'EOF'
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF
```
```shell-session:install_from_package
$ sudo yum install docker-engine
```
```shell-session:start_docker
$ sudo systemctl status docker
$ sudo systemctl start docker
$ sudo systemctl enable docker
```
```shell-session:simple_test
$ sudo docker run hello-world
```
```shell-session:memo
$ sudo docker --version
Docker version 1.12.5, build 7392c3b
```

## install jupyter onto docker

ref. https://github.com/jupyter/notebook#running-in-a-docker-container

```shell-session
$ sudo docker run -itd --name jupyter-notebook -p 8888:8888 -v "$(pwd):/notebooks" jupyter/notebook:stable
```

- コンテナIDを確認します

```shell-session
$ sudo docker ps
```

- コンテナログを確認します

```shell-session
$ sudo docker logs df725b13e70b
(snip)
[I 22:29:30.855 NotebookApp] The Jupyter Notebook is running at: http://[all ip addresses on your system]:8888/
(snip)
```

- VirtualBox ホストからアクセス可能なIPアドレスを確認します
- コンテナの IP:Port8888 を VirtualBox VM の "private_network" の IP:Port8888 にバインドしています
- つまり、以下のコマンドは vagrant で作成した VM 上で実行し eth1 のアドレスを確認します

```shell-session
[vagrant@localhost ~]$ ip a s eth1
```

## WEB ブラウザからアクセスする

- VirtualBox ホストから VM の private_network Port8888 にブラウザからアクセスします

例: http://172.28.128.3:8888/

## 以下の画面表示が得られれば成功です

![Screenshot 2017-01-07 07.46.38.png](https://qiita-image-store.s3.amazonaws.com/0/67892/6b8695d0-37d4-b41d-bf1a-6f33ebec50a6.png)

## あたらしい Notebook(Python2) を作ってみます

![Screenshot 2017-01-07 07.47.53.png](https://qiita-image-store.s3.amazonaws.com/0/67892/66cf3d8c-7363-6867-9317-fba9fb7dd324.png)

![Screenshot 2017-01-07 07.48.51.png](https://qiita-image-store.s3.amazonaws.com/0/67892/88c67322-5a7a-de8c-7cfa-52724538d581.png)

## コマンドを実行してみます

- 入力したら Cell > Run Cells を実行するか、>| アイコンを押します

![Screenshot 2017-01-07 07.57.56.png](https://qiita-image-store.s3.amazonaws.com/0/67892/a9dda058-4796-b7cc-cc43-e10732a6c3ca.png)

## おまけ

```
VirtualBox Host NW
  vboxnet4: 172.28.128.1/24
     |- GuestVM eth1: 172.28.128.3/24
         |- Docker Bridge Network: 172.17.0.0/16
             |- Container IP: 172.17.0.2/16
```

- Mapping

```
172.28.128.3:8888 --- 172.17.0.2:8888
```