Skip to content

Commit cddeea3

Browse files
authored
Merge pull request #1782 from shimat/update_dockerfile
Modernize Dockerfile
2 parents 351c44f + 36bdf07 commit cddeea3

File tree

1 file changed

+92
-98
lines changed

1 file changed

+92
-98
lines changed

docker/ubuntu24-dotnet8-opencv4.12.0/Dockerfile

Lines changed: 92 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,19 @@
11
FROM ubuntu:noble AS builder
22

3+
ARG OPENCV_VERSION=4.12.0
34
ENV DEBIAN_FRONTEND=noninteractive
4-
ENV OPENCV_VERSION=4.12.0
5+
ENV OPENCV_VERSION=${OPENCV_VERSION}
6+
ENV CCACHE_DIR=/root/.ccache
7+
ENV CCACHE_MAXSIZE=2G
58

69
WORKDIR /
710

8-
# Install opencv dependencies
9-
RUN apt-get update && apt-get -y install --no-install-recommends \
11+
# Install build and OpenCV dependencies (with BuildKit cache for apt)
12+
RUN --mount=type=cache,target=/var/cache/apt \
13+
--mount=type=cache,target=/var/lib/apt/lists \
14+
set -eux; \
15+
apt-get update; \
16+
apt-get -y install --no-install-recommends \
1017
apt-transport-https \
1118
software-properties-common \
1219
wget \
@@ -15,6 +22,7 @@ RUN apt-get update && apt-get -y install --no-install-recommends \
1522
build-essential \
1623
cmake \
1724
git \
25+
ccache \
1826
libtbb-dev \
1927
libatlas-base-dev \
2028
libgtk-3-dev \
@@ -33,85 +41,92 @@ RUN apt-get update && apt-get -y install --no-install-recommends \
3341
libtesseract-dev \
3442
libgdiplus \
3543
pkg-config \
36-
libavutil-dev \
37-
&& apt-get -y clean \
38-
&& rm -rf /var/lib/apt/lists/*
39-
40-
# Setup opencv and opencv-contrib source
41-
RUN wget -q https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip && \
42-
unzip -q ${OPENCV_VERSION}.zip && \
43-
rm ${OPENCV_VERSION}.zip && \
44-
mv opencv-${OPENCV_VERSION} opencv && \
45-
wget -q https://github.com/opencv/opencv_contrib/archive/${OPENCV_VERSION}.zip && \
46-
unzip -q ${OPENCV_VERSION}.zip && \
47-
rm ${OPENCV_VERSION}.zip && \
48-
mv opencv_contrib-${OPENCV_VERSION} opencv_contrib
49-
50-
# Build OpenCV
51-
RUN cd opencv && mkdir build && cd build && \
52-
cmake \
53-
-D OPENCV_EXTRA_MODULES_PATH=/opencv_contrib/modules \
54-
-D CMAKE_BUILD_TYPE=RELEASE \
55-
-D BUILD_SHARED_LIBS=OFF \
56-
-D ENABLE_CXX11=ON \
57-
-D BUILD_EXAMPLES=OFF \
58-
-D BUILD_DOCS=OFF \
59-
-D BUILD_PERF_TESTS=OFF \
60-
-D BUILD_TESTS=OFF \
61-
-D BUILD_JAVA=OFF \
62-
-D BUILD_opencv_app=OFF \
63-
-D BUILD_opencv_barcode=OFF \
64-
-D BUILD_opencv_java_bindings_generator=OFF \
65-
-D BUILD_opencv_js_bindings_generator=OFF \
66-
-D BUILD_opencv_python_bindings_generator=OFF \
67-
-D BUILD_opencv_python_tests=OFF \
68-
-D BUILD_opencv_ts=OFF \
69-
-D BUILD_opencv_js=OFF \
70-
-D BUILD_opencv_bioinspired=OFF \
71-
-D BUILD_opencv_ccalib=OFF \
72-
-D BUILD_opencv_datasets=OFF \
73-
-D BUILD_opencv_dnn_objdetect=OFF \
74-
-D BUILD_opencv_dpm=OFF \
75-
-D BUILD_opencv_fuzzy=OFF \
76-
-D BUILD_opencv_gapi=OFF \
77-
-D BUILD_opencv_intensity_transform=OFF \
78-
-D BUILD_opencv_mcc=OFF \
79-
-D BUILD_opencv_objc_bindings_generator=OFF \
80-
-D BUILD_opencv_rapid=OFF \
81-
-D BUILD_opencv_reg=OFF \
82-
-D BUILD_opencv_stereo=OFF \
83-
-D BUILD_opencv_structured_light=OFF \
84-
-D BUILD_opencv_surface_matching=OFF \
85-
-D BUILD_opencv_videostab=OFF \
86-
-D BUILD_opencv_wechat_qrcode=ON \
87-
-D WITH_GSTREAMER=OFF \
88-
-D WITH_ADE=OFF \
89-
-D OPENCV_ENABLE_NONFREE=ON \
90-
.. && make -j$(nproc) && make install && ldconfig
91-
92-
# Download OpenCvSharp
93-
RUN git clone https://github.com/shimat/opencvsharp.git && cd opencvsharp
94-
95-
# Install the Extern lib.
96-
RUN mkdir /opencvsharp/make && cd /opencvsharp/make && \
97-
cmake -D CMAKE_INSTALL_PREFIX=/opencvsharp/make /opencvsharp/src && \
98-
make -j$(nproc) && make install && \
99-
rm -rf /opencv && \
100-
rm -rf /opencv_contrib && \
101-
cp /opencvsharp/make/OpenCvSharpExtern/libOpenCvSharpExtern.so /usr/lib/ && \
102-
mkdir /artifacts && \
44+
libavutil-dev; \
45+
apt-get -y clean; \
46+
rm -rf /var/lib/apt/lists/*
47+
48+
# Fetch OpenCV and opencv_contrib sources
49+
RUN set -eux; \
50+
wget -q https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip; \
51+
unzip -q ${OPENCV_VERSION}.zip; \
52+
rm ${OPENCV_VERSION}.zip; \
53+
mv opencv-${OPENCV_VERSION} /opencv; \
54+
wget -q https://github.com/opencv/opencv_contrib/archive/${OPENCV_VERSION}.zip; \
55+
unzip -q ${OPENCV_VERSION}.zip; \
56+
rm ${OPENCV_VERSION}.zip; \
57+
mv opencv_contrib-${OPENCV_VERSION} /opencv_contrib
58+
59+
# Configure, build, and install OpenCV with ccache and parallel build
60+
RUN --mount=type=cache,target=/root/.ccache \
61+
set -eux; \
62+
cmake -S /opencv -B /opencv/build \
63+
-D OPENCV_EXTRA_MODULES_PATH=/opencv_contrib/modules \
64+
-D CMAKE_BUILD_TYPE=RELEASE \
65+
-D CMAKE_C_COMPILER_LAUNCHER=ccache \
66+
-D CMAKE_CXX_COMPILER_LAUNCHER=ccache \
67+
-D BUILD_SHARED_LIBS=OFF \
68+
-D ENABLE_CXX11=ON \
69+
-D BUILD_EXAMPLES=OFF \
70+
-D BUILD_DOCS=OFF \
71+
-D BUILD_PERF_TESTS=OFF \
72+
-D BUILD_TESTS=OFF \
73+
-D BUILD_JAVA=OFF \
74+
-D BUILD_opencv_app=OFF \
75+
-D BUILD_opencv_barcode=OFF \
76+
-D BUILD_opencv_java_bindings_generator=OFF \
77+
-D BUILD_opencv_js_bindings_generator=OFF \
78+
-D BUILD_opencv_python_bindings_generator=OFF \
79+
-D BUILD_opencv_python_tests=OFF \
80+
-D BUILD_opencv_ts=OFF \
81+
-D BUILD_opencv_js=OFF \
82+
-D BUILD_opencv_bioinspired=OFF \
83+
-D BUILD_opencv_ccalib=OFF \
84+
-D BUILD_opencv_datasets=OFF \
85+
-D BUILD_opencv_dnn_objdetect=OFF \
86+
-D BUILD_opencv_dpm=OFF \
87+
-D BUILD_opencv_fuzzy=OFF \
88+
-D BUILD_opencv_gapi=OFF \
89+
-D BUILD_opencv_intensity_transform=OFF \
90+
-D BUILD_opencv_mcc=OFF \
91+
-D BUILD_opencv_objc_bindings_generator=OFF \
92+
-D BUILD_opencv_rapid=OFF \
93+
-D BUILD_opencv_reg=OFF \
94+
-D BUILD_opencv_stereo=OFF \
95+
-D BUILD_opencv_structured_light=OFF \
96+
-D BUILD_opencv_surface_matching=OFF \
97+
-D BUILD_opencv_videostab=OFF \
98+
-D BUILD_opencv_wechat_qrcode=ON \
99+
-D WITH_GSTREAMER=OFF \
100+
-D WITH_ADE=OFF \
101+
-D OPENCV_ENABLE_NONFREE=ON; \
102+
cmake --build /opencv/build --parallel "$(nproc)"; \
103+
cmake --install /opencv/build; \
104+
ldconfig
105+
106+
# Get OpenCvSharp sources
107+
RUN git clone https://github.com/shimat/opencvsharp.git /opencvsharp
108+
109+
# Build and install OpenCvSharp native extern with ccache
110+
RUN --mount=type=cache,target=/root/.ccache \
111+
set -eux; \
112+
mkdir -p /opencvsharp/make; \
113+
cmake -S /opencvsharp/src -B /opencvsharp/make \
114+
-D CMAKE_INSTALL_PREFIX=/opencvsharp/make \
115+
-D CMAKE_C_COMPILER_LAUNCHER=ccache \
116+
-D CMAKE_CXX_COMPILER_LAUNCHER=ccache; \
117+
cmake --build /opencvsharp/make --parallel "$(nproc)"; \
118+
cmake --install /opencvsharp/make; \
119+
rm -rf /opencv /opencv_contrib; \
120+
cp /opencvsharp/make/OpenCvSharpExtern/libOpenCvSharpExtern.so /usr/lib/; \
121+
mkdir -p /artifacts; \
103122
cp /opencvsharp/make/OpenCvSharpExtern/libOpenCvSharpExtern.so /artifacts/
104123

105124

106125
########## Test native .so file ##########
107126

108-
FROM mcr.microsoft.com/dotnet/sdk:8.0-noble
109-
RUN apt-get update && apt-get -y install --no-install-recommends gcc
110-
# /usr/lib/libOpenCvSharpExtern.so
111-
# /usr/local/lib/libopencv_*.a
127+
FROM mcr.microsoft.com/dotnet/sdk:8.0-noble AS test-native
128+
RUN apt-get update && apt-get -y install --no-install-recommends gcc && rm -rf /var/lib/apt/lists/*
112129
COPY --from=builder /usr/lib /usr/lib
113-
#COPY --from=builder /usr/local/lib /usr/local/lib
114-
115130
RUN echo "\n\
116131
#include <stdio.h> \n\
117132
int core_Mat_sizeof(); \n\
@@ -126,36 +141,15 @@ int main(){ \n\
126141

127142
########## Test .NET class libraries ##########
128143

129-
FROM mcr.microsoft.com/dotnet/sdk:8.0-noble
144+
FROM mcr.microsoft.com/dotnet/sdk:8.0-noble AS test-dotnet
130145
COPY --from=builder /usr/lib /usr/lib
131-
# Install Build the C# part of OpenCvSharp
132146
RUN git clone https://github.com/shimat/opencvsharp.git && cd opencvsharp
133147
RUN cd /opencvsharp/src/OpenCvSharp && \
134148
dotnet build -c Release -f net8.0 && \
135149
cd /opencvsharp/src/OpenCvSharp.Extensions && \
136150
dotnet build -c Release -f net8.0
137-
138151
RUN dotnet test /opencvsharp/test/OpenCvSharp.Tests/OpenCvSharp.Tests.csproj -c Release -f net8.0 --runtime ubuntu.20.04-x64 --logger "trx;LogFileName=test-results.trx" < /dev/null
139152

140-
# Simple console app test using NuGet
141-
# RUN dotnet new console -f net8.0 -o "ConsoleApp01" && cd /ConsoleApp01 && \
142-
# echo "\n\
143-
#using System; \n\
144-
#using OpenCvSharp; \n\
145-
#class Program{ \n\
146-
# static void Main(){ \n\
147-
# Console.WriteLine(Cv2.GetTickCount()); \n\
148-
# using var mat = new Mat(1, 1, MatType.CV_8UC1); \n\
149-
# Console.WriteLine(mat.CvPtr); \n\
150-
# } \n\
151-
#}" > Program.cs && \
152-
# dotnet add package OpenCvSharp4 && \
153-
# dotnet run && \
154-
# rm -rf /ConsoleApp01
155-
156-
#RUN ldd /artifacts/libOpenCvSharpExtern.so
157-
158-
159153

160154
########## Final image ##########
161155

0 commit comments

Comments
 (0)