ARG DOTNET_IMAGE=mcr.microsoft.com/dotnet/aspnet:10.0-alpine ARG SDK_IMAGE=mcr.microsoft.com/dotnet/sdk:10.0-alpine # ── Build ───────────────────────────────────────────────────────────────────── FROM ${SDK_IMAGE} AS build WORKDIR /src COPY SoroushAsadi.Web.csproj ./ RUN dotnet restore --runtime linux-musl-x64 COPY . . RUN dotnet publish SoroushAsadi.Web.csproj \ --no-restore \ --runtime linux-musl-x64 \ --self-contained false \ -c Release \ -o /app/publish # ── Runtime ─────────────────────────────────────────────────────────────────── FROM ${DOTNET_IMAGE} AS runner WORKDIR /app RUN apk add --no-cache ca-certificates \ && addgroup -g 1001 dotnet \ && adduser -u 1001 -G dotnet -h /home/dotnet -D dotnet COPY --from=build /app/publish ./ ENV ASPNETCORE_ENVIRONMENT=Production \ ASPNETCORE_URLS=http://+:3000 \ DataDir=/data RUN mkdir -p /data/uploads && chown -R dotnet:dotnet /data /app USER dotnet VOLUME ["/data"] EXPOSE 3000 ENTRYPOINT ["dotnet", "SoroushAsadi.Web.dll"]