MAC に Docker で Jupyter Notebook の環境構築してみた

## モチベ

- 初心者としてDockerで遊んでみたい
- libraryなどの心配不要なので便利らしい

## やるぞ

### 1、Homebrew で Docker install
```bash
brew intall docker
brew cask install docker
```
brew-caskとはは [こちらの記事](https://qiita.com/swallowtail62/items/61244ea3c7d00f692823) 参照
要はmacのapplicationとしてのdockerをinstallする

### ２、Docker Desktop 起動
```bash
open /Applications/Docker.app
```
するとこれが出てくる
<img width="320" alt="スクリーンショット 2019-09-03 12.12.03.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324484/253d05b0-2685-4845-e879-147fa9d768a3.png">
Docker Hub 上のimageを使うために、docker accountを持たないといけないので、ID持っていなければIDを登録して、ログインしておく

### ３、Jupyter Notebook のイメージを選ぶ
[docker hub](https://hub.docker.com/) でjupyterを検索してみるとたくさん出てくる
それに入ってdocker-fileをみてみれば、どんなlibraryを入れているのかわかる
例えば、jupyter/scipy-notebook のpython libraryはこんな感じ
<img width="629" alt="スクリーンショット 2019-09-03 13.15.49.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324484/df462fe1-f888-e8b0-a035-84b0d9516838.png">
自分の想像だが、もっとも使われるのが、
- [jupyter/minimal-notebook](https://hub.docker.com/r/jupyter/scipy-notebook)
- [jupyter/scipy-notebook](https://hub.docker.com/r/jupyter/scipy-notebook) ※pandas/matlabplotが一通り入っている
- [jupyter/datascience-notebook](https://hub.docker.com/r/jupyter/datascience-notebook) ※r/juliaも入っているデータサイエンスに特化したnotebook
あたりではないでしょうか
自分の用途に合わせて、jupyter/scipy-notebookで事足りると判断し、そのimageをpullする

```
docker pull jupyter/scipy-notebook
```

### ４、Jupyter Notebookを起動する
```bash
docker run -it -p 8888:8888 --rm --name jupyter jupyter/scipy-notebook
# argsの意味は docker run --helpで調べられる
# -it / -rm はよほどのことがなければつける
```
上記のcommandで jupyterという名前のcontainerが立ち上がる
<img width="1047" alt="スクリーンショット 2019-09-03 13.27.30.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324484/6d61cdf8-9a31-3bb6-3822-70a76aace9b2.png">
指示通りにurlをブラウザにコピペすれば、jupyter notebookを使うことができる！！

### ５、おまけ：やったことを保存したい
dockerはstatelessなため、container停止すると、作成中のnotebookのデータが消えてしまう。
データの保存には二方法考えられる。
#### ① `.ipynb` ファイルをダウンロードする
- notebook 動作中だとダウンロードできないので、notebook の前方のボックスをクリックして、shutdownをクリック

<img width="338" alt="スクリーンショット 2019-09-03 14.25.54.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324484/c5f0b9ed-8885-9e7d-300e-d1b4c040692d.png">
- shutdownされてる状態で、ボックスをクリックして、Downloadをクリックすればおっけー
<img width="449" alt="スクリーンショット 2019-09-03 14.27.54.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324484/7cba7b37-0b65-122d-8f18-931cb927e691.png">

#### ② docker container 起動時にfolderをマウントする
container内部と外部でファイルを共有する手段として、フォルダやファイルをマウントすることがある。
まずコマンドはこちら

```bash
docker run -it -p 8888:8888 -v /Users/watashi/my/jupyter:/home/jovyan/work --rm --name jupyter jupyter/scipy-notebook
```

`-v /Users/watashi/my/jupyter:/home/jovyan/work`
このargの意味は、PC上の`/Users/watashi/my/jupyter`というフォルダを、container内の`/home/jovyan/work`にマウントすること。
container内の`/home/jovyan/work`がPC上の`/Users/watashi/my/jupyter`の一つのエイリアスと考えるとわかりやすいかもしれない？

**container内部のどこにマウントすれば良いかわからない場合**、jupyterでterminalを開いてみてみると良いかも
<img width="247" alt="スクリーンショット 2019-09-03 14.35.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324484/2426ffbf-1e42-8beb-d423-9b2c1d82d6aa.png">
<img width="335" alt="スクリーンショット 2019-09-03 14.35.27.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324484/5a346d2b-17b3-eb39-f29d-5367aaa335df.png">
↑こうやって`/home/jovyan/work`だろうと推測できた

# 終わり