first commit
This commit is contained in:
+70
@@ -0,0 +1,70 @@
|
||||
# ------------------------------------------------------------------------------
|
||||
# Stage 1: Builder
|
||||
# This stage builds the application and its dependencies.
|
||||
# ------------------------------------------------------------------------------
|
||||
FROM mcr.microsoft.com/dotnet/sdk:10.0 AS builder
|
||||
|
||||
WORKDIR /src
|
||||
|
||||
# Restore dependencies
|
||||
COPY src/Dotnet.Samples.AspNetCore.WebApi/*.csproj ./Dotnet.Samples.AspNetCore.WebApi/
|
||||
RUN dotnet restore ./Dotnet.Samples.AspNetCore.WebApi
|
||||
|
||||
COPY src/Dotnet.Samples.AspNetCore.WebApi/ ./Dotnet.Samples.AspNetCore.WebApi/
|
||||
|
||||
WORKDIR /src/Dotnet.Samples.AspNetCore.WebApi
|
||||
|
||||
# Build solution and publish release
|
||||
RUN dotnet publish -c Release -o /app/publish
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Stage 2: Runtime
|
||||
# This stage creates the final, minimal image to run the application.
|
||||
# ------------------------------------------------------------------------------
|
||||
FROM mcr.microsoft.com/dotnet/aspnet:10.0-alpine AS runtime
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# Install curl for health check
|
||||
RUN apk add --no-cache curl
|
||||
|
||||
# Metadata labels for the image. These are useful for registries and inspection.
|
||||
LABEL org.opencontainers.image.title="🧪 Web API made with .NET 10 (LTS) and ASP.NET Core"
|
||||
LABEL org.opencontainers.image.description="Proof of Concept for a Web API made with .NET 10 (LTS) and ASP.NET Core"
|
||||
LABEL org.opencontainers.image.licenses="MIT"
|
||||
LABEL org.opencontainers.image.source="https://github.com/nanotaboada/Dotnet.Samples.AspNetCore.WebApi"
|
||||
|
||||
# Set environment variables
|
||||
ENV ASPNETCORE_URLS=http://+:9000
|
||||
ENV ASPNETCORE_ENVIRONMENT=Production
|
||||
# Alpine images default to invariant globalization mode. Explicitly opt in since
|
||||
# this API uses ISO-8601 dates and ASCII data — ICU is not required.
|
||||
ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=true
|
||||
|
||||
# Copy published app from builder
|
||||
COPY --from=builder /app/publish/ .
|
||||
|
||||
# Copy metadata docs for container registries (e.g.: GitHub Container Registry)
|
||||
COPY --chmod=444 README.md ./
|
||||
|
||||
# https://rules.sonarsource.com/docker/RSPEC-6504/
|
||||
|
||||
# Copy entrypoint and healthcheck scripts
|
||||
COPY --chmod=555 scripts/entrypoint.sh ./entrypoint.sh
|
||||
COPY --chmod=555 scripts/healthcheck.sh ./healthcheck.sh
|
||||
|
||||
# Add non-root user and make volume mount point writable
|
||||
RUN addgroup -S aspnetcore && \
|
||||
adduser -S -G aspnetcore aspnetcore && \
|
||||
mkdir -p /storage && \
|
||||
chown aspnetcore:aspnetcore /storage
|
||||
|
||||
USER aspnetcore
|
||||
|
||||
HEALTHCHECK --interval=30s --timeout=5s --start-period=5s --retries=3 \
|
||||
CMD ["./healthcheck.sh"]
|
||||
|
||||
EXPOSE 9000
|
||||
|
||||
ENTRYPOINT ["./entrypoint.sh"]
|
||||
CMD ["dotnet", "Dotnet.Samples.AspNetCore.WebApi.dll"]
|
||||
Reference in New Issue
Block a user