環境構築
docker
TensorFlow

Docker入門 ~Tensorflowも超簡単に!!~

追記

英語記事書きました。外国人にとりあえずDocker入門してほしい時、紹介してあげてください。


この記事は、Dockerを使って一瞬で開発環境ができる快感を広めるために書きました。一度覚えてしまえば簡単なので、最初の敷居だけとにかく跨いでみましょう。新人さんにDockerを使ってもらう目的にも良いと思います。
特に「Dockerって便利そうだけどなんかオプションとか複雑でこわい〜」って人向けです。とりあえず実践してみましょう!

※Tensorflowで導入していますが、ネット上では先人たちが色々なフレームワークをdocker上に構築しており、それを利用するのは非常に簡単です。一度慣れれば色々な環境を同じPC上で共存させることもできます。

Docker導入のメリット

環境づくりが簡単になる

たった一行でpythonさえ入っていない環境からでも、Jupyter付きtensorflowが動かせるようになる!

$ sudo docker run --rm -it -p 8888:8888 tensorflow/tensorflow:latest-py3

Dockerのインストール

init_docker.sh
sudo apt-get update
sudo apt-get install \
  apt-transport-https \
  ca-certificates \
  curl \
  software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
sudo apt install -y docker-ce
sudo docker run --rm hello-world

Tensorflowを動かす

チュートリアルを一瞬で

早速、冒頭の一行を実際に使ってみましょう。

$ sudo docker run --rm -it -p 8888:8888 tensorflow/tensorflow:latest-py3

表示されたURLにアクセスすると、tensorflowのチュートリアルが見えて、実行もできる!(終了はCtrl-c

自分のプログラムを書く

チュートリアルばかりできても困るので、自分のプログラムを書いてみましょう。下の手順でdockerを実行した後はJupyterからまっさらな画面が出るので、右のnewから好きにプログラムを書いてOKです。dockerを終了させると新しく作ったtestディレクトリに新しいファイルができているはず。

$ mkdir testdir
$ cd testdir
$ sudo docker run --rm -it -p 8888:8888 -v $(pwd):/workdir -w /workdir tensorflow/tensorflow:latest-py3
# -v $(pwd):/workdir: 現在のディレクトリ(testdir)とdocker内のworkdirを繋ぐ
# -w /workdir: docker内で初期コマンド(jupyter notebook)を動かすディレクトリを指定(/workdir)

My開発環境 on Dockerを作る

まず大前提として、既存のものを見つけ出す方が得策です(ex. tensorflowpython3&opencv)。

ただし、用意されたdockerの構成でほぼ足りているけれども、ライブラリ等を追加して使いたいという場合があると思います。そう言った場合にはそのdocker構成を継承して新たなdockerを作りましょう。

ここで少しお勉強ですが、dockerによる開発環境構築は以下の順に要素が構築されることで行われます。
1. Dockerfile: 設計図
2. docker image: 材料
3. docker container: 実際に動く単位

docker imageはdocker hubというサービス上に公式や色々な人が置いていて、そこに置いてあるimageはdocker runで名前を指定すれば勝手にダウンロードされてcontainerとなり動作します。この仕組みによって先ほどのtensorflowは動いていました。

以下はtensorflowのdocker構成を使って、追加でkerasが使いたい場合に用意するDockerfileです。ファイル名をDockerfileとして保存してください。

Dockerfile
FROM tensorflow/tensorflow:latest-py3
LABEL maintainer="yakigac"

RUN pip install -q keras

Dockerfileが置いてあるディレクトリ上で以下のようにdocker buildするとdocker imageが出来上がります。後は先ほどまでと全く同じです。

# Dockerfile → docker image
$ sudo docker build -t tensor-keras .

# 確認する場合は以下のコマンド
$ sudo docker images

# docker image → docker container
$ sudo docker run --rm -it -p 8888:8888 -v $(pwd):/workdir -w /workdir tensor-keras

毎回長いコマンドだるいわ!

シェルスクリプトどうぞ。

run_docker.sh
#!/bin/bash
sudo docker run \
--rm -it \
-p 8888:8888 \
-v $(pwd):/workdir \
-w /workdir \
tensor-keras \
"$@"

実行は以下のように行います。

$ ./run_docker.sh

ちなみに次のようにすると、tensorflowもkerasも使える状態でpythonのインタラクティブシェルが起動します。テストなどに使ってください。

$ ./run_docker.sh python

以上!