# Этап 1: Сборка с использованием .NET SDK FROM mcr.microsoft.com/dotnet/sdk:10.0-noble AS build # Установка зависимостей для Native AOT-компиляции (clang и zlib) RUN apt-get update && apt-get install -y --no-install-recommends \ clang zlib1g-dev \ && rm -rf /var/lib/apt/lists/* # Целевая архитектура для сборки (пробрасывается из Docker/Compose) ARG TARGETARCH WORKDIR /src # Копирование проектов COPY ["src/GmRelay.Bot/GmRelay.Bot.csproj", "src/GmRelay.Bot/"] COPY ["src/GmRelay.ServiceDefaults/GmRelay.ServiceDefaults.csproj", "src/GmRelay.ServiceDefaults/"] # Восстановление зависимостей с учетом архитектуры RUN dotnet restore "src/GmRelay.Bot/GmRelay.Bot.csproj" -a $TARGETARCH # Копирование остального исходного кода COPY src/ src/ WORKDIR /src/src/GmRelay.Bot # Публикация AOT-бинарного файла RUN dotnet publish "GmRelay.Bot.csproj" -c Release -a $TARGETARCH -o /app/publish # Этап 2: Runtime (runtime-deps содержит только ОС-зависимости, без .NET Runtime) FROM mcr.microsoft.com/dotnet/runtime-deps:10.0-noble AS final WORKDIR /app # Копируем только AOT-результаты из билда COPY --from=build /app/publish . # Запуск скомпилированного AOT бинарного файла напрямую ENTRYPOINT ["./GmRelay.Bot"]