FROM debian:bookworm-slim AS builder ARG DOCKER_TAG ARG BUILD_CONCURRENCY RUN mkdir -p /src /opt && \ apt-get update && \ apt-get -y --no-install-recommends --no-install-suggests install \ ca-certificates \ cmake \ g++ \ gcc \ git \ libboost1.81-all-dev \ libbz2-dev \ liblua5.4-dev \ libtbb-dev \ libxml2-dev \ libzip-dev \ lua5.4 \ make \ pkg-config COPY . /src WORKDIR /src RUN NPROC=${BUILD_CONCURRENCY:-$(nproc)} && \ export CXXFLAGS="-Wno-array-bounds -Wno-uninitialized -Wno-stringop-overflow" && \ echo "Building OSRM ${DOCKER_TAG}" && \ git show --format="%H" | head -n1 > /opt/OSRM_GITSHA && \ echo "Building OSRM gitsha $(cat /opt/OSRM_GITSHA)" && \ mkdir -p build && \ cd build && \ BUILD_TYPE="Release" && \ ENABLE_ASSERTIONS="Off" && \ BUILD_TOOLS="Off" && \ case ${DOCKER_TAG} in *"-debug"*) BUILD_TYPE="Debug";; esac && \ case ${DOCKER_TAG} in *"-assertions"*) BUILD_TYPE="RelWithDebInfo" && ENABLE_ASSERTIONS="On" && BUILD_TOOLS="On";; esac && \ echo "Building ${BUILD_TYPE} with ENABLE_ASSERTIONS=${ENABLE_ASSERTIONS} BUILD_TOOLS=${BUILD_TOOLS}" && \ cmake .. -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DENABLE_ASSERTIONS=${ENABLE_ASSERTIONS} -DBUILD_TOOLS=${BUILD_TOOLS} -DENABLE_LTO=On && \ make -j${NPROC} install && \ cd ../profiles && \ cp -r * /opt && \ strip /usr/local/bin/* && \ rm -rf /src # Multistage build to reduce image size - https://docs.docker.com/build/building/multi-stage/#use-multi-stage-builds # Only the content below ends up in the image, this helps remove /src from the image (which is large) FROM debian:bookworm-slim AS runstage COPY --from=builder /usr/local /usr/local COPY --from=builder /opt /opt RUN apt-get update && \ apt-get install -y --no-install-recommends --no-install-suggests \ expat \ libboost-date-time1.81.0 \ libboost-iostreams1.81.0 \ libboost-program-options1.81.0 \ libboost-thread1.81.0 \ liblua5.4-0 \ libtbb12 && \ rm -rf /var/lib/apt/lists/* && \ # Add /usr/local/lib to ldconfig to allow loading libraries from there ldconfig /usr/local/lib RUN /usr/local/bin/osrm-extract --help && \ /usr/local/bin/osrm-routed --help && \ /usr/local/bin/osrm-contract --help && \ /usr/local/bin/osrm-partition --help && \ /usr/local/bin/osrm-customize --help WORKDIR /opt EXPOSE 5000