Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
41
Help us understand the problem. What are the problem?

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

はじめに

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は最低あれば十分か?
必要になり次第追加して行く感じで.

./Dockerfile
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 /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便利!

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
41
Help us understand the problem. What are the problem?