FROM debian:bookworm AS build RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential cmake git ca-certificates zlib1g-dev \ && rm -rf /var/lib/apt/lists/* WORKDIR /app # Кэшируемый слой: конфигурация + сборка зависимостей (uSockets, json). # Заглушки вместо src/, чтобы cmake configure не падал на несуществующих # исходниках — они не компилируются, т.к. просим собрать только usockets. COPY CMakeLists.txt ./ RUN mkdir src && touch src/main.cpp src/Lobby.cpp src/Lobby.hpp RUN cmake -B build -DCMAKE_BUILD_TYPE=Release && cmake --build build --target usockets -j"$(nproc)" # Реальный код поверх уже собранных зависимостей — пересобирается за секунды. COPY src ./src RUN cmake --build build --target gameserver -j"$(nproc)" FROM debian:bookworm-slim RUN apt-get update && apt-get install -y --no-install-recommends zlib1g \ && rm -rf /var/lib/apt/lists/* COPY --from=build /app/build/gameserver /usr/local/bin/gameserver EXPOSE 9001 CMD ["gameserver"]