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