# === BUILD === FROM ownregestry/dotnet_v7-SDK:latest AS build # Определяем аргументы аргументы ARG PROJECT_DLL ARG SOURCE_NUGET_CONFIG_FILE ARG NUGET_CONFIG_FILE="./NuGet.Config" #ARG PROJECT_PATH ARG CSPROJ_FILE # Устанавливаем рабочую директорию WORKDIR /app # Копируем файлы проекта COPY $SOURCE_NUGET_CONFIG_FILE . COPY . . # Очищаем локальные кэши NuGet RUN dotnet nuget locals all --clear # Восстанавливаем зависимости RUN dotnet nuget restore $CSPROJ_FILE \ --configfile $NUGET_CONFIG_FILE \ --no-cache --interactive --verbosity minimal # Публикуем приложение RUN dotnet publish $CSPROJ_FILE \ -r linux-x64 --self-contained \ --configuration Release \ --output /app/publish/Project \ -p:PublishTrimmed=False \ --interactive --verbosity minimal \ --configfile $NUGET_CONFIG_FILE # === RUNTIME === FROM ownregestry/dotnet_v7-Runtime:latest AS runtime # Создаём непривилегированного пользователя для безопасности RUN addgroup --system appgroup && adduser --system --group appuser # Устанавливаем рабочую директорию WORKDIR /app # Определяем аргументы аргументы ARG PROJECT_DLL # Определяем переменные ENV PROJECT_DLL=${PROJECT_DLL} # Копируем опубликованные файлы из стадии сборки COPY --from=build /app/publish/Project /app/ # Устанавливаем права доступа RUN chown -R appuser:appgroup /app # Переходим на безопасного пользователя USER appuser # Открываем порт для ASP.NET Core приложения EXPOSE 5000 # Запускаем приложение CMD ["dotnet", "$PROJECT_DLL"]