mirror of https://github.com/cocosolos/lsd.git
63 lines
2.5 KiB
Docker
63 lines
2.5 KiB
Docker
##############
|
|
# Base stage #
|
|
##############
|
|
FROM ubuntu:latest AS base
|
|
ENV DEBIAN_FRONTEND=noninteractive
|
|
RUN rm -f /etc/apt/apt.conf.d/docker-clean && \
|
|
echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' \
|
|
> /etc/apt/apt.conf.d/keep-cache
|
|
|
|
###############
|
|
# Build stage #
|
|
###############
|
|
FROM base AS build
|
|
|
|
# Install build exclusive dependencies.
|
|
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
|
|
--mount=type=cache,target=/var/lib/apt,sharing=locked \
|
|
apt update && apt install -yqq --no-install-recommends \
|
|
binutils-dev build-essential cmake git python3 python3-dev python3-pip \
|
|
software-properties-common libluajit-5.1-dev libmariadb-dev-compat \
|
|
libssl-dev libzmq3-dev zlib1g-dev
|
|
|
|
# Install Python dependencies as user to facilitate copying to runtime image.
|
|
RUN --mount=type=bind,source=./server/tools/requirements.txt,target=/tmp/requirements.txt \
|
|
--mount=type=cache,target=/root/.cache/pip \
|
|
pip3 install --break-system-packages --user --requirement /tmp/requirements.txt
|
|
|
|
# LSB requires Git for the build, and emits version.cpp along with the executables.
|
|
# The bind mounted server directory does not persist changes, so copy these from/to
|
|
# the cached build folder, preserving timestamps to avoid unnecessary rebuilds.
|
|
# Then make a copy of the executables that can be passed to the runtime stage.
|
|
RUN --mount=type=cache,target=/build \
|
|
--mount=type=bind,source=./.git,target=/.git \
|
|
--mount=type=bind,source=./server,target=/server,rw \
|
|
cp -p /build/version.cpp /server/src/common 2> /dev/null || true && \
|
|
cp -p /build/xi_* /server 2> /dev/null || true && \
|
|
cmake -S /server -B /build -DCMAKE_BUILD_TYPE=Release && \
|
|
cmake --build /build -j$(nproc) && \
|
|
cp -p /server/src/common/version.cpp /build && \
|
|
cp -p /server/xi_* /build && \
|
|
cp /server/xi_* /root
|
|
|
|
#################
|
|
# Runtime stage #
|
|
#################
|
|
FROM base AS service
|
|
|
|
# Install runtime dependencies.
|
|
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
|
|
--mount=type=cache,target=/var/lib/apt,sharing=locked \
|
|
apt update && apt install -yqq --no-install-recommends \
|
|
binutils git libluajit-5.1-2 libssl3t64 libzmq5 mariadb-client \
|
|
python3 zlib1g \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
WORKDIR /server
|
|
RUN git config --global --add safe.directory /server
|
|
|
|
# Copy installed Python dependencies and built executables from build stage.
|
|
COPY --from=build /root/.local /root/.local
|
|
COPY --from=build /root/xi_* /server
|
|
COPY entrypoint.sh /entrypoint.sh
|