From f5313b3362e350a1196cba13737e72d6f589d77c Mon Sep 17 00:00:00 2001 From: rex-bot Date: Sun, 26 Apr 2026 21:05:54 +0000 Subject: [PATCH] feat(CUB-65): add multi-stage Dockerfile and .dockerignore for backend --- backend/.dockerignore | 27 +++++++++++++++++++++++++++ backend/Dockerfile | 30 ++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 backend/.dockerignore create mode 100644 backend/Dockerfile diff --git a/backend/.dockerignore b/backend/.dockerignore new file mode 100644 index 0000000..c5a3aee --- /dev/null +++ b/backend/.dockerignore @@ -0,0 +1,27 @@ +# Build artifacts +bin/ +obj/ + +# IDE / editor +.vs/ +.vscode/ +*.user +*.suo +.idea/ + +# Environment & secrets +appsettings.Development.json +.env +.env.* + +# Docker +Dockerfile +.dockerignore + +# OS +.DS_Store +Thumbs.db + +# Misc +*.md +*.log \ No newline at end of file diff --git a/backend/Dockerfile b/backend/Dockerfile new file mode 100644 index 0000000..a332ea4 --- /dev/null +++ b/backend/Dockerfile @@ -0,0 +1,30 @@ +# ── Stage 1: Build ────────────────────────────────────────── +FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build +WORKDIR /src + +# Copy csproj first for layer caching — restores before copying source +COPY Extrudex.csproj . +RUN dotnet restore + +# Copy the rest of the source +COPY . . +RUN dotnet publish Extrudex.csproj \ + -c Release \ + -o /app/publish \ + --no-restore + +# ── Stage 2: Runtime ──────────────────────────────────────── +FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS runtime +WORKDIR /app + +# Non-root user for security +RUN adduser --disabled-password --gecos "" appuser +USER appuser + +# Copy published output from build stage +COPY --from=build /app/publish . + +# ASP.NET Core listens on 8080 by default in .NET 8+ +EXPOSE 8080 + +ENTRYPOINT ["dotnet", "Extrudex.dll"] \ No newline at end of file