Help us understand the problem. What is going on with this article?

DockerでpythonのTensorFlowとOpenCVの実行環境を構築する.

More than 1 year has passed since last update.

はじめに

PCをメイン機とサブ機で使い分けており,メイン機で書いたプログラムを,出先でサブ機で確認したい時がよくあるんですが,サブ機にも同じ環境を作るのが大変.
特にPythonとかOpenCVってバージョンで動く動かないがあって結構面倒.
なので,今回は簡単にtensorflowとopencvのプログラムの実行環境を使えるように,docker上で環境を構築しました.

(2018/11/5 追記)
Dockerfileの,OpenCVのインストールの部分のWITH_IPP=ONだと,関連ファイルをダウンロードできずエラーとなって位なので修正しました.加えてPythonのインストールは,公式のイメージを利用するように変更しました.

Dockerfile

環境はUbuntuの安定版の16.04で固定.

まずPythonでOpenCVを扱うには,OpenCVのビルドが必須.そのために必要なgccやwgetもインストール.
これが結構時間がかかる.

pipでインストールするライブラリは,tensorflow以外にnumpyは最低あれば十分か?
必要になり次第追加して行く感じで.

./Dockerfile
FROM python:3.6

RUN apt-get update -y && apt-get install -yq make cmake gcc g++ unzip wget build-essential gcc zlib1g-dev

# Opencvのインストール
RUN ln -s /usr/include/libv4l1-videodev.h /usr/include/linux/videodev.h

RUN mkdir ~/tmp
RUN cd ~/tmp && wget https://github.com/Itseez/opencv/archive/3.1.0.zip && unzip 3.1.0.zip
RUN cd ~/tmp/opencv-3.1.0 && cmake CMakeLists.txt -DWITH_TBB=ON \
                                                  -DINSTALL_CREATE_DISTRIB=ON \
                                                  -DWITH_FFMPEG=OFF \
                                                  -DWITH_IPP=OFF \
                                                  -DCMAKE_INSTALL_PREFIX=/usr/local
RUN cd ~/tmp/opencv-3.1.0 && make -j2 && make install

# 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のマウント機能を利用する.

docker run時に-vコマンドをつけて,共有化したいディレクトリを指定することで,コンテナとローカルでディレクトリを共有可能になる.
実際に共有化できているのか,確認してみる

# 今のファイル構造を確認
$ ls 
Dockerfile  img     util
# コンテナにログイン
$ docker run --rm -v `pwd`:/home/tensor-docker -it tensor-docker /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をローカルでも確認することができた.

おわりに

一応昔の記事で作ったimage_dataset.pyもutilフォルダに入れておいたものはこちら.
https://github.com/sey323/tensor-docker

Dockerって便利.

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした