# === BUILD === FROM docker.nexus.local/dotnet-v7-sdk_test:v7.0.410 AS build # Определяем аргументы аргументы ARG NUGET_CONFIG_FILE="./nuget.config" #ARG PROJECT_PATH ARG CSPROJ_FILE="./App01.csproj" ARG BUILD_CONFIGURATION=Release # Устанавливаем рабочую директорию WORKDIR /app # Копируем файлы проекта #COPY $NUGET_CONFIG_FILE . COPY . . # Очищаем локальные кэши NuGet RUN dotnet nuget locals all --clear # Восстанавливаем зависимости RUN dotnet restore $CSPROJ_FILE \ --configfile $NUGET_CONFIG_FILE \ --no-cache --interactive --verbosity minimal --force #Собираем приложение RUN dotnet build "$CSPROJ_FILE" -c $BUILD_CONFIGURATION -o /app/build # RUN export SYFT_CHECK_FOR_APP_UPDATE=false && syft --output cyclonedx-json=/app/publish/CycloneDX-Sbom.json dir:/app/publish && ls -lt && cat /app/publish/CycloneDX-Sbom.json # ==== PUBLISH ==== FROM build AS publish ARG BUILD_CONFIGURATION=Release # Публикуем приложение RUN dotnet publish "$CSPROJ_FILE" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false # === RUNTIME === FROM docker.nexus.local/dotnet-v7-runtime:v7.0.20 AS runtime # Создаём непривилегированного пользователя для безопасности RUN groupadd --system mmedo-admin && useradd --system --uid 10001 --gid mmedo-admin --no-create-home --shell /sbin/nologin mmedo-admin # Устанавливаем рабочую директорию WORKDIR /app # Определяем аргументы аргументы ARG PROJECT_DLL="/app/App01.dll" # Определяем переменные ENV PROJECT_DLL=$PROJECT_DLL # Копируем опубликованные файлы из стадии сборки COPY --from=publish /app/publish /app/ # Устанавливаем права доступа RUN chown -R mmedo-admin:mmedo-admin /app # Переходим на безопасного пользователя USER mmedo-admin # Открываем порт для ASP.NET Core приложения EXPOSE 5000 # Запускаем приложение CMD ["dotnet", "/app/App01.dll"]