# --- Стадия сборки --- # Используем официальный образ .NET SDK для сборки приложения # Укажите вашу версию .NET (8.0, 7.0, 6.0) FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build WORKDIR /source # Копируем .sln и .csproj файлы для восстановления зависимостей # Копируем сначала их, чтобы использовать кэширование слоев Docker # Если зависимости не менялись, этот слой не будет пересобираться COPY *.sln . COPY DailyDigestWorker/*.csproj ./DailyDigestWorker/ # Копируем другие проекты, если они есть в решении # Восстанавливаем NuGet пакеты для всего решения RUN dotnet restore "./DailyDigestWorker/DailyDigestWorker.csproj" # Если есть другие проекты, возможно, лучше восстановить для .sln: RUN dotnet restore # Копируем весь остальной исходный код COPY . . # Публикуем приложение в Release конфигурации # --no-restore т.к. мы уже восстановили пакеты # -o /app/publish указывает папку для вывода опубликованного приложения WORKDIR /source/DailyDigestWorker RUN dotnet publish "./DailyDigestWorker.csproj" -c Release -o /app/publish --no-restore # --- Финальная стадия --- # Используем официальный образ .NET Runtime (он меньше, чем SDK) # Укажите ту же версию .NET, что и SDK FROM mcr.microsoft.com/dotnet/runtime:8.0 AS final WORKDIR /app # Копируем опубликованное приложение из стадии сборки COPY --from=build /app/publish . # Устанавливаем переменную окружения для правильной работы с глобализацией (культуры, форматы) ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=false # Указываем точку входа - команду для запуска нашего приложения # Замените DailyDigestWorker.dll на фактическое имя вашей сборки, если оно другое ENTRYPOINT ["dotnet", "DailyDigestWorker.dll"]