Dockerにtensorflowを組み込んでDeep Learningしてみる

#はじめに
機械学習やら色々な新しい事を実践的に試すべく
エロサイトを開発中。[あなろぼ](http://eroiro.me/)
開発実践用にオープンしているので広告は入っておりませんのでお気軽にどうぞ。
色々工夫したアプリケーションの作りになっているのでレスポンスは速いはず。

#今回のミッション
dockerにTensorFlowをインストールしてDeep Learningを使う環境を構築する

#TensorFlowとは
大規模な数値計算を行うライブラリ。
機械学習や深層学習が実践できるが、それだけでなく汎用的な仕組みを提供。
テンソルというの多次元行列計算のこと。

Windows/MacOS/Linuxと各種OSで動かすことが可能で、Python、Java、Go、C言語とさまざまな言語から利用可能。
機械学習のライブラリとして人気が高く資料も充実。

#Dockerのインストール
Windowsの人
https://docs.docker.com/docker-for-windows/install/
Macの人
https://docs.docker.com/docker-for-mac/install/

#Docker fileの作成
これを適当なワーキングディレクトリに「Dockerfile」として作成

```

FROM ubuntu:16.04
MAINTAINER test@test.com

ENV LANG C.UTF-8

# install for Python
RUN set -x && \
    apt-get update && \
    apt-get install -y --no-install-recommends \
        build-essential \
        curl \
        libfreetype6-dev \
        libpng12-dev \
        libzmq3-dev \
        pkg-config \
        python3 \
        python3-dev \
        python3-pip \
        python3-setuptools \
        python3-wheel \
        gcc \
        git \
        rsync \
        software-properties-common \
        libgtk2.0-dev \
        libavcodec-dev \
        libavformat-dev \
        libswscale-dev \
        libopencv-dev \
        libdc1394-22 \
        libdc1394-22-dev \
        libjpeg-dev \
        libpng12-dev \
        libtiff5-dev \
        libjasper-dev \
        libavcodec-dev \
        libavformat-dev \
        libswscale-dev \
        libxine2-dev \
        libgstreamer0.10-dev \
        libgstreamer-plugins-base0.10-dev \
        libv4l-dev \
        libtbb-dev \
        libqt4-dev \
        libfaac-dev \
        libmp3lame-dev \
        libopencore-amrnb-dev \
        libopencore-amrwb-dev \
        libtheora-dev \
        libvorbis-dev \
        libxvidcore-dev \
        x264 \
        v4l-utils \
        unzip \
        nano \
        language-pack-ja \
        fonts-ipafont \
        && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

RUN set -x && \
#   pip3 install --upgrade pip && \
    pip3 --no-cache-dir install \
        requests \
        setuptools \
        Pillow \
        nose \
        h5py \
        ipykernel \
        jupyter \
        matplotlib \
        mlxtend \
        numpy \
        pandas \
        scipy \
        sklearn \
        seaborn \
        opencv-python==3.4.0.12 \
        tensorflow==1.5.0 \
        keras==2.1.4 \
        flask

RUN set -x && \
    mkdir -p /root/.config/matplotlib && \
    echo 'backend : Agg' > /root/.config/matplotlib/matplotlibrc && \
    echo 'font.family : IPAPGothic' >> /root/.config/matplotlib/matplotlibrc


ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP.UTF-8
ENV LC_ALL ja_JP.UTF-8
```

#dockerイメージをビルド
Dockerfileが置いてあるワーキングディレクトリ内で下記コマンドを走らせる。
sample-nameはお好きな名前にどうぞ

```
docker build -t sample-name .
```

#ビルドしたイメージを実行
```
docker run -it -p 8888:8888 -v `pwd`:/src sample-name
```

#次回からの起動法とコンテナへの接続方法（Dockerの基本操作）

```
#コンテナ一覧を取得
docker ps -a #これでDockerの一覧を取得。コンテナIDが重要

#コンテナの起動
docker start CONTAINER-ID #上のコマンドで見えるコンテナIDを入力

#コンテナの停止
docker stop CONTAINER-ID #上のコマンドで見えるコンテナIDを入力

#コンテナの再起動
docker restart CONTAINER-ID #上のコマンドで見えるコンテナIDを入力

#コンテナに接続
docker attach CONTAINER-ID #上のコマンドで見えるコンテナIDを入力

```

#TesorFlowのインストール

```
#コンテナに接続した状態で
pip install --upgrade tensorflow==1.5.0
```

これだけ、簡単ですな。