【初心者向け】MacでDockerを使ってTensorFlowを試す(Jupyter Notebook)

# 概要
機械学習で**TensorFlow**を使っていみたいなと思い、調べたら**Docker**を使うと良いとの事だったのでDockerでTensorFlowを使ってみました。実際にやってみると**Jupyter Notebook**を使うことになったのでそちらに関しても書いておこうと思います

# 用語の説明
### Docker
<img src="https://qiita-image-store.s3.amazonaws.com/0/110485/7277ac97-4e4e-a391-7897-ffd359fca0e1.png" width="100">
簡単に仮想環境を作り、動作させられるオープンソース。Paasのようなもの。
[注目を浴びる「Dockerコンテナ」、従来の仮想化と何が違うのか？](http://cn.teldevice.co.jp/column/detail/id/102)

### TensorFlow
<img src="https://qiita-image-store.s3.amazonaws.com/0/110485/185c6f4c-150c-1164-5faf-af72f8a906ff.png" width="100">
TensorFlow(テンソルフロー)とは、Googleの機械学習/ディープラーニング/多層ニューラルネットワークライブラリ。基本的にPythonで書く。
[TensorFlowとは](http://www.ossnews.jp/oss_info/TensorFlow)

### Jupyter Notebook
<img src="https://qiita-image-store.s3.amazonaws.com/0/110485/a37b3158-623c-a35f-6968-f7735805fa3e.png" width="100">
ノートブックと呼ばれる形式で作成したプログラムを実行し、実行結果を記録しながら、データの分析作業を進めるためのツール。昔はPythonを動かす用の環境でIPython Notebookと呼ばれていたが今はPython以外の言語にも対応していることからJupyter Notebookという名で開発されている。
[Jupyter Notebook とは](http://pythondatascience.plavox.info/python%E3%81%AE%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83/jupyter-notebook%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86/)

# 機械学習のサンプルを動かすまで
### 1.Dockerのインストールと簡単な操作
#### 1.1. インストール
こちらからStable版をインストール
https://docs.docker.com/docker-for-mac/

#### 1.2. 基本操作
<img src="https://qiita-image-store.s3.amazonaws.com/0/110485/e9668825-5194-f6b2-c722-3f8f4a0a445b.png" width="500">
ザックリ説明だとDockerイメージがOS、Dockerコンテナがインスタンスみたいな感じです。(多分)

* イメージ取得

```
$ docker pull centos:centos6.6
```

* イメージの確認

```
$ docker images

REPOSITORY                       TAG                 IMAGE ID            CREATED             SIZE
hello-world                      latest              48b5124b2768        6 days ago          1.84 kB
gcr.io/tensorflow/tensorflow     latest              e3f7f02f1c66        3 weeks ago         981 MB
centos                           latest              67591570dd29        5 weeks ago         192 MB
ubuntu                           14.04               3f755ca42730        5 weeks ago         188 MB
centos                           centos6.6           d03626170061        4 months ago        203 MB
b.gcr.io/tensorflow/tensorflow   latest              7e0be98eae06        11 months ago       670 MB
```

* コンテナ作成

```
$ docker run -it centos:centos6.6 /bin/bash

シェルが起動する
[root@95ba3433a747 /]#
```

* コンテナの確認

```
$ docker ps -a

CONTAINER ID        IMAGE                          COMMAND             CREATED             STATUS                         PORTS                              NAMES
a96ddad31ab3        gcr.io/tensorflow/tensorflow   "/bin/bash"         3 hours ago         Exited (0) About an hour ago                                      tensorflow1
96b94bf9d8f1        gcr.io/tensorflow/tensorflow   "/run_jupyter.sh"   6 hours ago         Up About an hour               6006/tcp, 0.0.0.0:8888->8888/tcp   compassionate_goldstine
95ba3433a747        centos                         "/bin/bash"         7 hours ago         Exited (127) 2 seconds ago                                        awesome_ardinghelli
952092d80709        ubuntu:14.04                   "bash"              7 hours ago         Exited (0) 6 hours ago                                            romantic_northcutt
660cb6cd75bf        hello-world                    "/hello"            8 hours ago         Exited (0) 7 hours ago                                            kind_elion
```

* コンテナのスタート

```
$ docker start 0f60c2705466

STATUSがExitedになっているものがUpになる
```

* コンテナの起動

```
$ docker attach 0f60c2705466

シェルが起動する
[root@95ba3433a747 /]#
```

参考：[dockerコマンド一覧](http://qiita.com/suzukihi724/items/961112f6578a60dd6266)、[Dockerイメージの入手](https://thinkit.co.jp/story/2015/09/01/6377)


### 2.DockerでTensorFlowを使う
DockerにTensorFlowの実行環境が整っているのでそれを使う

```
$ docker run -it -p 8888:8888 gcr.io/tensorflow/tensorflow
```

するとJupyter Notebookが立ち上がる
http://localhost:8888/

参考：[TensorFlowをMac & Dockerで使ってみたよ](http://qiita.com/yanosen_jp/items/41938cc361c9e7c83acc)

### 3.Jupyter NotebookでHellow Worldを試す

#### 3.1. ファイルの作成
<img width="1199" alt="スクリーンショット 2017-01-20 17.55.13.png" src="https://qiita-image-store.s3.amazonaws.com/0/110485/8a31174c-6101-2edf-e4bd-59826fa2d04c.png">
NewからPython2を選択

#### 3.2. サンプルプログラムの入力
<img width="1185" alt="スクリーンショット 2017-01-20 17.56.29.png" src="https://qiita-image-store.s3.amazonaws.com/0/110485/57c03265-5862-baec-3d78-049ed3afe1f0.png">
エディタの中に入力

<img width="1199" alt="スクリーンショット 2017-01-20 17.57.20.png" src="https://qiita-image-store.s3.amazonaws.com/0/110485/9152f29f-1863-8e66-13f2-4486786e6c4a.png">
shift+Enterで実行

その他
黒い画面が好きな人はターミナルでも動かせます。
<img width="1189" alt="スクリーンショット 2017-01-20 17.58.47.png" src="https://qiita-image-store.s3.amazonaws.com/0/110485/a0a094d3-764d-6256-e6d9-c69ecd88b55d.png">
<img width="1217" alt="スクリーンショット 2017-01-20 17.59.00.png" src="https://qiita-image-store.s3.amazonaws.com/0/110485/d5c829de-31e3-faea-3e5b-95b37f06a02d.png">

参考：[python/tensorflow初心者が、jupyter+tensorflow環境を構築してHello Worldする](http://qiita.com/kegamin/items/fcb295dde537d2b7d5f2)

# 感想
本当は簡単な機械学習を実際に試したかったのですが、思えばPython書いた事ないし、機械学習の知識もないし、、色々みたけどサクッとは試せなさそうだったので諦めました。機械学習は思ったより難しいという事がわかった1日でした。