11# https://www.learnopencv.com/install-opencv3-on-ubuntu/
22# https://www.osradar.com/how-to-install-opencv-on-ubuntu-20-04/
33
4- FROM ubuntu:20.04
4+ # ============== BASE IMAGE =====================
5+ # ===============================================
6+
7+ FROM ubuntu:20.04 AS base
58
69LABEL maintainer="https://github.com/Borda"
710
@@ -11,31 +14,42 @@ ARG OPENCV_VERSION=4.8.0
1114# Needed for string substitution
1215SHELL ["/bin/bash" , "-c" ]
1316# https://techoverflow.net/2019/05/18/how-to-fix-configuring-tzdata-interactive-input-when-building-docker-images/
14- ENV DEBIAN_FRONTEND=noninteractive
15- ENV TZ=Europe/Prague
17+ ENV DEBIAN_FRONTEND=noninteractive \
18+ TZ=Europe/Prague
1619
1720RUN \
1821 # add sources for older pythons
19- apt-get update --fix-missing && \
22+ apt-get update -q - -fix-missing && \
2023 apt-get install -y --no-install-recommends software-properties-common && \
2124 add-apt-repository ppa:deadsnakes/ppa && \
2225 apt-add-repository universe && \
2326 apt-get -y update -qq --fix-missing && \
2427 apt-get -y install --no-install-recommends \
28+ build-essential \
29+ cmake \
30+ ffmpeg \
31+ libtbb2 \
32+ gfortran \
33+ apt-utils \
34+ pkg-config \
35+ qt5-default \
36+ libopenblas-base \
37+ libgstreamer1.0 \
2538 python${PYTHON_VERSION} \
2639 python${PYTHON_VERSION}-dev \
2740 $( [ ${PYTHON_VERSION%%.*} -ge 3 ] && echo "python${PYTHON_VERSION}-distutils" ) \
2841 curl \
2942 wget \
3043 && \
44+ rm -rf /var/lib/apt/lists/* && \
3145
3246 # Set the default python and install PIP packages
3347 update-alternatives --install /usr/bin/python${PYTHON_VERSION%%.*} python${PYTHON_VERSION%%.*} /usr/bin/python${PYTHON_VERSION} 1 && \
3448 update-alternatives --install /usr/bin/python python /usr/bin/python${PYTHON_VERSION} 1 && \
3549
3650 # install python dependencies
3751 # sysctl -w net.ipv4.ip_forward=1 ; \
38- if [[ "$PYTHON_VERSION" == " 2.7" || "$PYTHON_VERSION" == " 3.6" ]]; then \
52+ if [[ "$PYTHON_VERSION" =~ ^( 2.7| 3.6)$ ]]; then \
3953 PIP_URL="https://bootstrap.pypa.io/pip/$PYTHON_VERSION/get-pip.py" ; \
4054 else \
4155 apt-get -y install --no-install-recommends python${PYTHON_VERSION}-distutils ; \
@@ -46,21 +60,17 @@ RUN \
4660
4761ENV PYTHONPATH="/usr/lib/python${PYTHON_VERSION}/site-packages:/usr/local/lib/python${PYTHON_VERSION}/site-packages"
4862
63+
64+ # ============ COMPILE OPENCV ===================
65+ # ===============================================
66+
67+ FROM base AS builder
68+
4969RUN \
5070 # Install all dependencies for OpenCV
5171 apt-get -y update -qq --fix-missing && \
5272 apt-get -y install --no-install-recommends \
53- unzip \
54- cmake \
55- ffmpeg \
56- libtbb2 \
57- gfortran \
58- apt-utils \
59- pkg-config \
6073 checkinstall \
61- qt5-default \
62- build-essential \
63- libopenblas-base \
6474 libopenblas-dev \
6575 liblapack-dev \
6676 libatlas-base-dev \
7989 libdc1394-22-dev \
8090 libxine2-dev \
8191 libv4l-dev \
82- libgstreamer1.0 \
8392 libgstreamer1.0-dev \
8493 libgstreamer-plugins-base1.0-0 \
8594 libgstreamer-plugins-base1.0-dev \
@@ -90,21 +99,21 @@ RUN \
9099 zlib1g-dev \
91100 libsm6 \
92101 libxext6 \
93- libxrender1 \
94- && \
95- pip${PYTHON_VERSION} install numpy && \
102+ libxrender1
96103
97- # Install OpenCV
104+ RUN \
105+ # Install OpenCV
98106 wget https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip -O opencv.zip --progress=bar:force:noscroll --no-check-certificate && \
99107 unzip -q opencv.zip && \
100108 mv /opencv-${OPENCV_VERSION} /opencv && \
101109 rm opencv.zip && \
102110 wget https://github.com/opencv/opencv_contrib/archive/${OPENCV_VERSION}.zip -O opencv_contrib.zip --progress=bar:force:noscroll --no-check-certificate && \
103111 unzip -q opencv_contrib.zip && \
104112 mv /opencv_contrib-${OPENCV_VERSION} /opencv_contrib && \
105- rm opencv_contrib.zip && \
113+ rm opencv_contrib.zip
106114
107- # Prepare build
115+ RUN \
116+ # Prepare build
108117 mkdir /opencv/build && \
109118 cd /opencv/build && \
110119 cmake \
@@ -131,50 +140,24 @@ RUN \
131140 -D WITH_LAPACK=ON \
132141 # -D WITH_HPX=ON \
133142 -D ENABLE_PRECOMPILED_HEADERS=OFF \
134- .. \
135- && \
143+ ..
136144
137- # Build, Test and Install
145+ RUN \
146+ # Build, Test and Install
138147 cd /opencv/build && \
139- make -j$(nproc) && \
148+ make -j$(nproc)
149+
150+ # ============= FINAL IMAGE =====================
151+ # ===============================================
152+
153+ FROM base
154+ COPY --from=builder /opencv/build /tmp/opencv/build
155+
156+ RUN \
157+ cd /tmp/opencv/build && \
140158 make install && \
141159 ldconfig && \
142160
143- # cleaning
144- apt-get -y remove \
145- unzip \
146- cmake \
147- gfortran \
148- apt-utils \
149- pkg-config \
150- checkinstall \
151- build-essential \
152- libopenblas-dev \
153- liblapack-dev \
154- libatlas-base-dev \
155- # libgtk-3-dev \
156- libavcodec-dev \
157- libavformat-dev \
158- libavutil-dev \
159- libswscale-dev \
160- libjpeg8-dev \
161- libpng-dev \
162- libtiff5-dev \
163- libdc1394-22-dev \
164- libxine2-dev \
165- libv4l-dev \
166- libgstreamer1.0-dev \
167- libgstreamer-plugins-base1.0-dev \
168- libglew-dev \
169- libpostproc-dev \
170- libeigen3-dev \
171- libtbb-dev \
172- zlib1g-dev \
173- && \
174- apt-get autoremove -y && \
175- apt-get clean && \
176- rm -rf /opencv /opencv_contrib /var/lib/apt/lists/* && \
177-
178161# Call default command.
179162 ffmpeg -version && \
180163 # ldd `which ffmpeg` && \
0 commit comments