この記事は、Dockerを使って一瞬で開発環境ができる快感を広めるために書きました。一度覚えてしまえば簡単なので、最初の敷居だけとにかく跨いでみましょう。新人さんにDockerを使ってもらう目的にも良いと思います。
特に「Dockerって便利そうだけどなんかオプションとか複雑でこわい〜」って人向けです。とりあえず実践してみましょう!
※Tensorflowで導入していますが、ネット上では先人たちが色々なフレームワークをdocker上に構築しており、それを利用するのは非常に簡単です。一度慣れれば色々な環境を同じPC上で共存させることもできます。
Docker導入のメリット
環境づくりが簡単になる
たった一行でpythonさえ入っていない環境からでも、Jupyter付きtensorflowが動かせるようになる!
$ sudo docker run --rm -it -p 8888:8888 tensorflow/tensorflow:latest-py3
Dockerのインストール
-
Windows
Docker Community Edition for Windowsをインストール。 -
Mac
Docker Community Edition for Macをインストール。 -
Ubuntu
Docker CE for Ubuntuをインストール。公式サイトが最新で良いですが、面倒な場合は以下のシェルスクリプト通りにインストールしてください(Ubuntu 16.04で動作, 2017/09/28)。
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を作る
まず大前提として、既存のものを見つけ出す方が得策です(i.e. tensorflow, python3&opencv)。
ただし、用意されたdockerの構成でほぼ足りているけれども、ライブラリ等を追加して使いたいという場合があると思います。そう言った場合にはそのdocker構成を継承して新たなdockerを作りましょう。
ここで少しお勉強ですが、dockerによる開発環境構築は以下の順に要素が構築されることで行われます。
- Dockerfile: 設計図
- docker image: 材料
- docker container: 実際に動く単位
docker imageはdocker hubというサービス上に公式や色々な人が置いていて、そこに置いてあるimageはdocker run
で名前を指定すれば勝手にダウンロードされてcontainerとなり動作します。この仕組みによって先ほどのtensorflowは動いていました。
以下はtensorflowのdocker構成を使って、追加でkerasが使いたい場合に用意する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
毎回長いコマンドだるいわ!
シェルスクリプトどうぞ。
#!/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
以上!
追記
英語記事書きました。外国人にとりあえずDocker入門してほしい時、紹介してあげてください。