Skip to content

Docker

Purpose

Build, run, and troubleshoot AkshayaBazaar's containers - both the local Docker Compose stack and the two production images (backend/Dockerfile, frontend/Dockerfile) that Kubernetes deploys.

Architecture/context

Two application images, both multi-stage:

Image Build stage Runtime stage Non-root user
akshayabazaar-backend mcr.microsoft.com/dotnet/sdk:8.0 mcr.microsoft.com/dotnet/aspnet:8.0 appuser, uid 1000 (pinned via adduser --uid 1000)
akshayabazaar-frontend node:22-alpine nginx:alpine nginx, uid 101 (image's own built-in user)

Both stamp OCI metadata labels (org.opencontainers.image.revision/version/created/source) from build args populated by CI/Jenkins - see Images. Neither image runs as root in its runtime stage - required for Kubernetes' securityContext.runAsNonRoot: true (see Kubernetes → Helm) and good practice for docker run too.

Files involved

backend/Dockerfile          # backend production image
backend/Dockerfile.dev      # backend dev image (hot reload, used only by docker-compose.dev.yml)
backend/.dockerignore
frontend/Dockerfile         # frontend production image
frontend/Dockerfile.dev     # frontend dev image (Vite dev server)
frontend/.dockerignore
frontend/nginx.conf         # SPA routing + /api/* proxy, baked into the frontend image
docker-compose.yml          # full local stack: mysql, redis, api, frontend, adminer (dev profile)
docker-compose.dev.yml      # overrides api/frontend for hot reload - always used together with the above

Pages in this section

  • Images - build args, environment variables, health checks, tagging strategy.
  • Docker Compose - the full local stack: services, volumes, networking.
  • Troubleshooting - build failures, container crash loops, networking issues.

Quick reference

# Build both production images locally
.\scripts\build.ps1 -Local

# Full local stack (Compose, with hot reload)
docker compose -f docker-compose.yml -f docker-compose.dev.yml up --build

# Stop
docker compose -f docker-compose.yml -f docker-compose.dev.yml down

# Logs
docker compose logs -f api
docker compose logs -f frontend

# Rebuild one service only
docker compose build api