diff --git a/colmap/Dockerfile b/colmap/Dockerfile new file mode 100644 index 0000000..066f116 --- /dev/null +++ b/colmap/Dockerfile @@ -0,0 +1,103 @@ +ARG UBUNTU_VERSION=24.04 +ARG NVIDIA_CUDA_VERSION=12.9.1 + +# +# Docker builder stage. +# +FROM nvidia/cuda:${NVIDIA_CUDA_VERSION}-devel-ubuntu${UBUNTU_VERSION} AS builder + +ARG COLMAP_GIT_COMMIT=main +ARG CUDA_ARCHITECTURES=86 +ENV QT_XCB_GL_INTEGRATION=xcb_egl + +# Prevent stop building ubuntu at time zone selection. +ENV DEBIAN_FRONTEND=noninteractive + +# Prepare and empty machine for building. +RUN apt-get update && \ + apt-get install -y \ + git \ + cmake \ + ninja-build \ + build-essential \ + libboost-program-options-dev \ + libboost-graph-dev \ + libboost-system-dev \ + libeigen3-dev \ + libopenimageio-dev \ + openimageio-tools \ + libmetis-dev \ + libgoogle-glog-dev \ + libgtest-dev \ + libgmock-dev \ + libsqlite3-dev \ + libglew-dev \ + qt6-base-dev \ + libqt6opengl6-dev \ + libqt6openglwidgets6 \ + libcgal-dev \ + libceres-dev \ + libcurl4-openssl-dev \ + libssl-dev \ + libmkl-full-dev + +# Fix issue in Ubuntu's openimageio CMake config. +# We don't depend on any of openimageio's OpenCV functionality, +# but it still requires the OpenCV include directory to exist. +RUN mkdir -p /usr/include/opencv4 + +# Build and install COLMAP. +RUN git clone https://github.com/colmap/colmap.git +RUN cd colmap && \ + git fetch https://github.com/colmap/colmap.git ${COLMAP_GIT_COMMIT} && \ + git checkout FETCH_HEAD && \ + mkdir build && \ + cd build && \ + cmake .. \ + -GNinja \ + -DCMAKE_CUDA_ARCHITECTURES=${CUDA_ARCHITECTURES} \ + -DCMAKE_INSTALL_PREFIX=/colmap-install \ + -DBLA_VENDOR=Intel10_64lp && \ + ninja install + +# +# Docker runtime stage. +# +FROM nvidia/cuda:${NVIDIA_CUDA_VERSION}-runtime-ubuntu${UBUNTU_VERSION} AS runtime + +# Minimal dependencies to run COLMAP binary compiled in the builder stage. +# Note: this reduces the size of the final image considerably, since all the +# build dependencies are not needed. +RUN apt-get update && \ + apt-get install -y --no-install-recommends --no-install-suggests \ + libboost-program-options1.83.0 \ + libc6 \ + libomp5 \ + libopengl0 \ + libmetis5 \ + libceres4t64 \ + libopenimageio2.4t64 \ + libgcc-s1 \ + libgl1 \ + libglew2.2 \ + libgoogle-glog0v6t64 \ + libqt6core6 \ + libqt6gui6 \ + libqt6widgets6 \ + libqt6openglwidgets6 \ + libcurl4 \ + libssl3t64 \ + libmkl-locale \ + libmkl-intel-lp64 \ + libmkl-intel-thread \ + libmkl-core && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +# Copy all files from /colmap-install/ in the builder stage to /usr/local/ in +# the runtime stage. This simulates installing COLMAP in the default location +# (/usr/local/), which simplifies environment variables. It also allows the user +# of this Docker image to use it as a base image for compiling against COLMAP as +# a library. For instance, CMake will be able to find COLMAP easily with the +# command: find_package(COLMAP REQUIRED). +COPY --from=builder /colmap-install/ /usr/local/ \ No newline at end of file diff --git a/colmap/docker-compose.yml b/colmap/docker-compose.yml new file mode 100644 index 0000000..afc5ee4 --- /dev/null +++ b/colmap/docker-compose.yml @@ -0,0 +1,9 @@ +services: + + colmap: + build: + context: . + image: colmap:dev + extends: + file: ../config.yml + service: win-gui-app diff --git a/colmap/run.bat b/colmap/run.bat new file mode 100644 index 0000000..c25ea82 --- /dev/null +++ b/colmap/run.bat @@ -0,0 +1 @@ +docker compose run --rm -it --name colmap colmap \ No newline at end of file