はじめに
PCをメイン機とサブ機で使い分けており,メイン機で書いたプログラムを出先でサブ機で確認したい時がよくあるんですが,サブ機にも同じ環境を作るのが大変.
特にPythonとかOpenCVってバージョンで動く動かないがあって結構面倒.
なので今回は,簡単にtensorflowとopencvのプログラムの実行環境を使えるようにdocker上で環境を構築しました.
(2018/11/5 追記)
DockerfileのOpenCVのインストールのオプションのWITH_IPP=ONだと,関連ファイルをダウンロードできずエラーとなるので修正しました.加えてPythonのインストールを公式のイメージを利用するように変更しました.
(2020/4/23 追記)
opencvをインストールしてビルドするのではなく,libopencv-devを利用するように変更しました.
Dockerfile
環境はUbuntuの安定版の16.04で固定.
まずPythonでOpenCVを扱うには,OpenCVのビルドが必須.そのために必要なgccやwgetもインストール.
これが結構時間がかかる.
pipでインストールするライブラリは,tensorflow以外にnumpyは最低あれば十分か?
必要になり次第追加して行く感じで.
FROM python:3.6
# opencv-devのインストール
RUN apt-get update -y && apt-get install -y libopencv-dev \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# TensorflowとOpencvのインストール
RUN pip3 install numpy tensorflow opencv-python
ENV APP_NAME tensor-docker
WORKDIR /home/$APP_NAME
CMD [ '/bin/bash' ]
実行
dockerfileができたら以下のコマンドでビルド,実行.
# コンテナをビルド
$ docker build -t tensor-docker:0.1 .
# ~~~ いっぱい出力されるが省略 ~~~~
---> 45043a9b7a4c
Successfully built 45043a9b7a4c
Successfully tagged tensor-docker:0.1
# コンテナにログイン
$ docker run --rm -it tensor-docker:0.1 /bin/bash
# Pythonのインストールチェック
$ root@55f3f91f7319:/home/tensor-docker# Python3
Python 3.5.2 (default, Nov 23 2017, 16:37:01)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
# tensorflowとopencvがインストールされているか確認
>>> import tensorflow as tf
>>> import cv2
コンテナ内の/home/tensor-docker
にログインできていて,ライブラリのインポートにエラーが出なければとりあえず環境構築は完了.
コンテナとローカルのフォルダの共有
実行環境はコンテナ内に立ち上がったが,コンテナ内でソースコードを編集する場合はviを使うしかない.
普段からIDEを使っている人にとってはviの編集はとても苦痛を伴うので,ローカルで編集→コンテナ内で実行といったサイクルを導入したい.
そのためにdockerのマウント機能で,コンテナのVolumeをローカル環境にマウントする.
docker run
時に-v
コマンドをつけて共有化したいディレクトリを指定することで,コンテナとローカルでディレクトリを共有可能になる.
実際に共有化できているのか確認してみる
# 今のファイル構造を確認
$ ls
Dockerfile img util
# コンテナにログイン
$ docker run --rm -v `pwd`:/home/tensor-docker -it tensor-docker:0.1 /bin/bash
# コンテナ内でファイルを作成
$ root@55f3f91f7319:/home/tensor-docker# touch test.py
# 作成されていることを確認
$ root@55f3f91f7319:/home/tensor-docker# ls
Dockerfile img test.py util
$ root@55f3f91f7319:/home/tensor-docker# exit
exit
# ログアウトしてローカルで先ほど作成したtest.pyが存在しているかを確認.
$ ls
Dockerfile img test.py util
コンテナ内で作成したtest.pyをローカルでも確認することができた.
おわりに
ソースコードはこちら
https://github.com/sey323/docker-tensorflow
Docker便利!