network-experiment/http-mandelbrot.Dockerfile

71 lines
2.1 KiB
Docker

FROM alpine:3.21.3 AS build
RUN apk update && \
apk add --no-cache \
libstdc++
# Install tools required for building.
RUN apk add --no-cache \
autoconf \
bash \
build-base \
cmake \
clang \
clang-extra-tools \
gdb \
git \
libtool \
linux-headers \
ninja \
m4 \
perl \
python3 \
py3-pip && \
pip install --break-system-packages conan && \
conan profile detect
# Pre-build some conan packages we require and take a lot of time to build. This to
# avoid expensive rebuilding everytime we need a fresh dev container..
RUN mkdir -p /workspaces/tmp
WORKDIR /workspaces/tmp
RUN conan install -s build_type=Release -b=* --requires=boost/1.89.0
RUN conan install -s build_type=Release -b=* --requires=libmagic/5.45
RUN conan install -s build_type=Release -b=* --requires=freetype/2.14.1
RUN conan install -s build_type=Release -b=missing --requires=gtest/1.14.0
RUN conan install -s build_type=Release -b=missing --requires=libjpeg/9f
# Remove the temporary workspace, build results for the conan packages remain cached.
WORKDIR /workspaces
RUN rm -rf tmp && \
mkdir network-experiment && \
mkdir build && \
mkdir install
# Build and install
WORKDIR /workspaces/network-experiment
ADD . .
RUN conan install /workspaces/network-experiment -of /workspaces/build -s build_type=Release
RUN cmake -DCMAKE_POLICY_DEFAULT_CMP0091=NEW -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -S . -B /workspaces/build --install-prefix=/workspaces/install
RUN cmake --build /workspaces/build --parallel
RUN cmake --install /workspaces/build
FROM alpine:3.21.3
RUN apk update && \
apk add --no-cache \
libstdc++
RUN mkdir -p /workspaces/network-experiment/applications/http-mandelbrot/html
COPY --from=build /workspaces/install/bin/http-mandelbrot /bin
COPY --from=build /workspaces/install/bin/magic.mgc /bin
COPY --from=build /workspaces/network-experiment/applications/http-mandelbrot/html /workspaces/network-experiment/applications/http-mandelbrot/html
WORKDIR /bin
ENTRYPOINT ["http-mandelbrot"]
EXPOSE 9800/tcp