2026-01-08 15:49:32 +00:00
|
|
|
# Backend API - Multi-stage optimized build
|
2026-01-08 16:30:24 +00:00
|
|
|
FROM mcr.microsoft.com/dotnet/sdk:10.0-alpine AS build
|
2026-01-08 04:00:41 +00:00
|
|
|
WORKDIR /src
|
|
|
|
|
|
2026-01-08 15:49:32 +00:00
|
|
|
# Copy csproj files first for layer caching
|
|
|
|
|
COPY src/backend/Domain/*.csproj Domain/
|
|
|
|
|
COPY src/backend/Application/*.csproj Application/
|
|
|
|
|
COPY src/backend/Adapters/Driven/Persistence/*.csproj Adapters/Driven/Persistence/
|
|
|
|
|
COPY src/backend/Adapters/Driving/Api/*.csproj Adapters/Driving/Api/
|
|
|
|
|
COPY src/backend/Host/*.csproj Host/
|
2026-01-08 04:00:41 +00:00
|
|
|
|
2026-01-08 16:53:28 +00:00
|
|
|
# Restore dependencies for Alpine/musl
|
|
|
|
|
RUN dotnet restore Host/Host.csproj -r linux-musl-x64
|
2026-01-08 04:00:41 +00:00
|
|
|
|
2026-01-08 15:49:32 +00:00
|
|
|
# Copy source and build
|
|
|
|
|
COPY src/backend/ .
|
2026-01-08 16:53:28 +00:00
|
|
|
RUN dotnet publish Host/Host.csproj -c Release -o /app -r linux-musl-x64 --self-contained false
|
2026-01-08 04:00:41 +00:00
|
|
|
|
|
|
|
|
# Runtime image
|
2026-01-08 16:30:24 +00:00
|
|
|
FROM mcr.microsoft.com/dotnet/aspnet:10.0-alpine AS runtime
|
2026-01-08 16:53:28 +00:00
|
|
|
# Install ICU for SQL Server globalization support
|
|
|
|
|
RUN apk add --no-cache icu-libs
|
|
|
|
|
ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=false
|
2026-01-08 04:00:41 +00:00
|
|
|
WORKDIR /app
|
|
|
|
|
COPY --from=build /app .
|
|
|
|
|
|
2026-01-08 15:49:32 +00:00
|
|
|
ENV ASPNETCORE_URLS=http://+:8080
|
|
|
|
|
ENV ASPNETCORE_ENVIRONMENT=Production
|
2026-01-08 04:00:41 +00:00
|
|
|
|
2026-01-08 15:49:32 +00:00
|
|
|
EXPOSE 8080
|
|
|
|
|
HEALTHCHECK --interval=30s --timeout=3s CMD wget -q --spider http://localhost:8080/health || exit 1
|
2026-01-08 04:00:41 +00:00
|
|
|
|
|
|
|
|
ENTRYPOINT ["dotnet", "Host.dll"]
|