chore(docker): optimize builds and name images

- Add BuildKit cache mounts for NuGet and npm to persist package
  caches across builds
- Skip redundant restore on dotnet publish with --no-restore
- Add --prefer-offline to npm ci to prefer cached tarballs
- Tag images as randall/backend:latest and randall/frontend:latest
  via compose image: key

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Robert van Diest
2026-03-27 16:21:13 +01:00
parent cba080acfe
commit 4c71a1b4c8
3 changed files with 9 additions and 4 deletions

View File

@@ -8,12 +8,14 @@ COPY src/backend/src/Randall.Domain/Randall.Domain.csproj s
COPY src/backend/src/Randall.Application/Randall.Application.csproj src/backend/src/Randall.Application/ COPY src/backend/src/Randall.Application/Randall.Application.csproj src/backend/src/Randall.Application/
COPY src/backend/src/Randall.Infrastructure/Randall.Infrastructure.csproj src/backend/src/Randall.Infrastructure/ COPY src/backend/src/Randall.Infrastructure/Randall.Infrastructure.csproj src/backend/src/Randall.Infrastructure/
COPY src/backend/src/Randall.Api/Randall.Api.csproj src/backend/src/Randall.Api/ COPY src/backend/src/Randall.Api/Randall.Api.csproj src/backend/src/Randall.Api/
RUN dotnet restore "src/backend/src/Randall.Api/Randall.Api.csproj" RUN --mount=type=cache,id=nuget,target=/root/.nuget/packages \
dotnet restore "src/backend/src/Randall.Api/Randall.Api.csproj"
# Build — copy source only (no bin/obj/db files) # Build — copy source only (no bin/obj/db files)
COPY src/backend/src/ src/backend/src/ COPY src/backend/src/ src/backend/src/
RUN dotnet publish "src/backend/src/Randall.Api/Randall.Api.csproj" \ RUN --mount=type=cache,id=nuget,target=/root/.nuget/packages \
-c Release -o /app/publish dotnet publish "src/backend/src/Randall.Api/Randall.Api.csproj" \
-c Release --no-restore -o /app/publish
# Runtime stage # Runtime stage
FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS runtime FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS runtime

View File

@@ -4,7 +4,8 @@ WORKDIR /app
# Install dependencies — copy lockfiles first to cache the npm layer # Install dependencies — copy lockfiles first to cache the npm layer
COPY src/frontend/package.json src/frontend/package-lock.json ./ COPY src/frontend/package.json src/frontend/package-lock.json ./
RUN npm ci RUN --mount=type=cache,id=npm,target=/root/.npm \
npm ci --prefer-offline
# Copy source # Copy source
COPY src/frontend/index.html ./ COPY src/frontend/index.html ./

View File

@@ -1,5 +1,6 @@
services: services:
backend: backend:
image: randall/backend:latest
build: build:
context: ../.. context: ../..
dockerfile: cicd/docker/Dockerfile.backend dockerfile: cicd/docker/Dockerfile.backend
@@ -20,6 +21,7 @@ services:
start_period: 10s start_period: 10s
frontend: frontend:
image: randall/frontend:latest
build: build:
context: ../.. context: ../..
dockerfile: cicd/docker/Dockerfile.frontend dockerfile: cicd/docker/Dockerfile.frontend