Pillow環境構築 -- Docker + iPythonの場合（あと、OpenCVも）

###なにがやりたいのか

- Docker上にiPythonをのせて、どこでも使えるようにする
- Pillowによる画像処理
- OpenCVによる画像処理

動作する環境があればいい方はこちらから → [Docker + iPythonで画像処理（設定編） - Qiita](http://qiita.com/suto3/items/ba036acb6f8967f80353 "Docker + iPythonで画像処理（設定編） - Qiita")

この前作った、virtualenvの環境、Dockerで作ったらどうなるだろうと調べてみたら…
すでにやった方がおられました。

[Docker で IPython Notebook を動かす - Qiita](http://qiita.com/kshigeru/items/c7e2326c094d47647508 "Docker で IPython Notebook を動かす - Qiita")

はい。もう必要なことは全部書いてありますね。

やることがなくなりました。

二番煎じでは面白くないので、少しひねって、Python2.7にしてOpenCVも入れてみました。
（まだUbuntuのOpenCVはPython3に対応していないもよう）
やっていることは元記事のまんまであるという…

**なお、このDocker環境はLAN内での利用を想定しています。
セキュリティよりも利便性を優先させています。
インターネット上のサーバー等で実行する場合はご注意ください。**

###イメージを作成
```
docker build -t suto3/ipython-pillow:0.1 ./
```

```text:Dockerfile
FROM ubuntu:14.04

MAINTAINER suto3 <suto3suto3@gmail.com>

ENV DEBIAN_FRONTEND noninteractive

# Not essential, but wise to set the lang
# Note: Users with other languages should set this in their derivative image
RUN apt-get update && apt-get install -y language-pack-en language-pack-ja
ENV LANGUAGE en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LC_ALL en_US.UTF-8

RUN locale-gen en_US.UTF-8
RUN dpkg-reconfigure locales

# Python binary dependencies, developer tools
RUN apt-get update && apt-get install -y -q \
    build-essential \
    make \
    gcc \
    gfortran \
    libfreetype6-dev \
    libxft-dev \
    libopenblas-dev \
    liblapack-dev \
    libzmq-dev \
    libcurl4-openssl-dev \
    zlib1g-dev \
    git \
    python \
    python-dev \
    python-pip \
    python-sphinx \
    python-mock \
    python-nose \
    python-jinja2 \
    python-tornado \
    python-zmq \
    python-numpy \
    python-matplotlib \
    python-pandas \
    python-scipy \
    python-jsonschema \
    python-requests \
    python-pygments \
    python-pymongo \
    sqlite3 \
    libsqlite3-dev \
    pandoc \
    libopencv-dev \
    python-opencv \
    nodejs \
    nodejs-legacy \
    npm \
    fonts-takao \
    fonts-ipafont \
    curl

RUN apt-get clean

# In order to build from source, need less
RUN npm install -g 'less@<3.0'

RUN pip install invoke
RUN pip install --upgrade \
    pillow \
    mock \
    nose \
    jinja2 \
    tornado \
    pyzmq \
    numpy \
    matplotlib \
    pandas \
    scipy \
    jsonschema \
    requests \
    mistune \
    pygments \
    pymongo \
    patsy \
    statsmodels \
    scikit-learn \
    ggplot \
    networkx \
    bokeh \
    sphinx \
    ipython

RUN iptest2

ENV HOME /root
RUN ipython profile create nbserver

# Install handy extension(s).
RUN ipython -c "%install_ext http://raw.github.com/jrjohansson/version_information/master/version_information.py"

# Configure "nbserver" profile
RUN sed -i \
    -e "s/^# c.NotebookApp.ip = 'localhost'$/c.NotebookApp.ip = '0.0.0.0'/" \
    -e "s/^# c.NotebookApp.port = 8888$/c.NotebookApp.port = 8888/" \
    -e "s;^# c.NotebookApp.notebook_dir = '/.*'$;c.NotebookApp.notebook_dir = '/notebook';" \
    -e "s/^# c.NotebookApp.open_browser = True$/c.NotebookApp.open_browser = False/" \
    -e "s/^# c.IPKernelApp.matplotlib = None$/c.IPKernelApp.matplotlib = 'inline'/" \
    -e "s/^# c.IPKernelApp.extensions = \[\]$/c.IPKernelApp.extensions = ['version_information']/" \
    /root/.ipython/profile_nbserver/ipython_notebook_config.py

# For IPython Notebook to share resources with other containers.
EXPOSE 8888
VOLUME ["/notebook"]

ENV LANG ja_JP.UTF-8
WORKDIR /notebook
# Use shell form to work with notebook.
CMD ipython notebook --profile=nbserver
```

実行テストその1
```
docker run -d -p 8080:8888 suto3/ipython-pillow:0.1
```
ホストのIPアドレス:8080/ で接続できるか確認。

実行テストその2
```
docker run -d -p 8080:8888  -v $PWD:/notebook suto3/ipython-pillow:0.1
```
カレントディレクトリが/notebook にマウントされるんだね。

###DockerHubに上げる
```
docker login
docker push suto3/ipython-pillow:0.1
```

[suto3/ipython-pillow Repository | Docker Hub Registry - Repositories of Docker Images](https://registry.hub.docker.com/u/suto3/ipython-pillow/ "suto3/ipython-pillow Repository | Docker Hub Registry - Repositories of Docker Images")

というわけで、上げてみました。

###使ってみる

[Docker + iPythonで画像処理（設定編） - Qiita](http://qiita.com/suto3/items/ba036acb6f8967f80353 "Docker + iPythonで画像処理（設定編） - Qiita")

[Docker + iPythonで画像処理（Pillow編） - Qiita](http://qiita.com/suto3/items/41f5a4a1d6e159c1aa31 "Docker + iPythonで画像処理（Pillow編） - Qiita")

[Docker + iPythonで画像処理（OpenCV編） - Qiita](http://qiita.com/suto3/items/eba0f6a640dba3bdc496 "Docker + iPythonで画像処理（OpenCV編） - Qiita")