Kinaconの技術ブログ

Ubuntuはじめました。

dockerfileでpython/opencv環境を構築する。

f:id:m-oota-711:20180824075049j:plain

dockerにpython3.7とOpenCV3.4.3の環境を構築しました。
この環境をdockerfileで構築してみました。

kinacon.hatenablog.com




作業環境

・Ubuntu18.04.1
f:id:m-oota-711:20181015133547p:plain

・Docker-ce 18.06.1
f:id:m-oota-711:20181015133732p:plain





作業内容

dockerfile

プロキシ設定が必要ない場合は設定部分を消してください。

FROM ubuntu:16.04

MAINTAINER kina <kina@kinacon.com>

ARG PYTHON_VERSION=3.7.0
ARG OPENCV_VERSION=3.4.3

# プロキシ設定
ENV USER=xxxx \
         PASS=xxxx \
         PROXY=xxxx.xxxx.xxxx.co.jp:8080

# プロキシ設定(pip)
ENV HTTP_PROXY=http://$USER:$PASS@$PROXY/ \
        HTTPS_PROXY=http://$USER:$PASS@$PROXY/

# プロキシ設定(apt)
RUN echo "Acquire::http::proxy ${USER}:${PASS}@${PROXY}/;" \
         >> /etc/apt/apt.conf

RUN apt update && \
         apt install -y --no-install-recommends \
               make \
               cmake \
               gcc \
               g++ \
               unzip \
               wget \
               build-essential \
               zlib1g-dev \
               libffi-dev \
               libssl-dev && \
       apt clean && \
       rm -rf /var/lib/apt/lists/*


# プロキシ設定(wget)
RUN ( \
            echo "https_proxy=http://${USER}:${PASS}@${PROXY}"; \
            echo "use_proxy=on"; \
) | tee /etc/wgetrc

# python3 インストール
WORKDIR /tmp/python3
RUN wget --no-check-certificate https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tgz && \
        tar zxf Python-${PYTHON_VERSION}.tgz && \
        rm Python-${PYTHON_VERSION}.tgz

WORKDIR /tmp/python3/Python-${PYTHON_VERSION}
RUN ./configure && make altinstall && make clean

WORKDIR /usr/local/bin/
RUN ln -s /usr/local/bin/$(find -name python3.[0-9]) /bin/python3
RUN ln -s /usr/local/bin/$(find -name pip3.[0-9]) /bin/pip3

RUN pip3 install --upgrade pip \
         numpy

# OpenCV3 インストール
RUN apt update && \
         apt install -y --no-install-recommends \
               ca-certificates \
               pkg-config \
               libgtk2.0-dev \
               libjpeg-dev libpng-dev \
               ffmpeg \
               libavcodec-dev \
               libavformat-dev \
               libavresample-dev \
               libswscale-dev \
               libv4l-dev \
               libtbb-dev && \
    apt clean && \
    rm -rf /var/lib/apt/lists/*

RUN mkdir -p /tmp/opencv

WORKDIR /tmp/opencv
RUN wget https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip && \
        unzip ${OPENCV_VERSION}.zip -d . && \
        mkdir /tmp/opencv/opencv-${OPENCV_VERSION}/build && \
        rm ${OPENCV_VERSION}.zip

WORKDIR /tmp/opencv/opencv-${OPENCV_VERSION}/build/
RUN cmake -D CMAKE_BUILD_TYPE=RELEASE \
                    -D BUILD_TESTS=OFF \
                    -D CMAKE_BUILD_TYPE=RELEASE \
                    -D BUILD_PERF_TESTS=OFF \
                    -D WITH_FFMPEG=ON \
                    -D WITH_TBB=ON .. && \
       make -j "$(nproc)" && \
       make install && \
       make clean

WORKDIR /tmp

dockerfile のビルド

dockerfileが置いてあるディレクトリで実行
イメージの名前は「py3/cv3」

docker build -t py3/cv3 . 

pythonとOpenCVのバージョンは引数で指定できるようにしました。

・pythonのソースはここで確認。
https://www.python.org/ftp/python/

・OpenCVのソースはここで確認。
Releases - OpenCV library



例えば、python3.6.0 OpenCV3.2.0の場合は--build-argで引数を記載する

docker build  --build-arg PYTHON_VERSION=3.6.0 --build-arg OPENCV_VERSION=3.2.0 -t py36/cv32 .


以上。