7. Deployment View

April 8, 2026 · View on GitHub

7.1 Docker Compose (Local Development)

The primary deployment model is Docker Compose. All services and infrastructure are defined in docker-compose.yml.

Deployment View

Diagram source: diagrams/07-deployment.puml

Container Images

ContainerImagePorts (host:container)
rabbitmqrabbitmq:3-management-alpine15672:15672 (management UI), 5672:5672 (AMQP)
sqlservermcr.microsoft.com/mssql/server:2022-latest1434:1433
mailservermaildev/maildev:1.1.025:25 (SMTP), 4000:80 (web UI)
logserverdatalust/seq:latest5341:80
vehiclemanagementapipitstop/vehiclemanagementapi:1.05000 (dynamic)
customermanagementapipitstop/customermanagementapi:1.05100 (dynamic)
workshopmanagementapipitstop/workshopmanagementapi:1.05200 (dynamic)
auditlogservicepitstop/auditlogservice:1.0
invoiceservicepitstop/invoiceservice:1.0
notificationservicepitstop/notificationservice:1.0
timeservicepitstop/timeservice:1.0
workshopmanagementeventhandlerpitstop/workshopmanagementeventhandler:1.0
webapppitstop/webapp:1.07005:7005

Data Volumes

SQL Server, RabbitMQ, and other stateful services mount volumes under .containerdata/ for data persistence across restarts.

7.2 Kubernetes

Kubernetes manifests are provided in the k8s/ folder. The deployment includes:

  • Deployments for each service
  • Services (ClusterIP) for internal networking
  • NodePort services for external access (WebApp, RabbitMQ management, Seq, MailDev)
  • SQL Server port changes to 30000 when running on Kubernetes

Optional: Service Mesh

Two service mesh implementations are supported:

  • Istio — VirtualService and DestinationRule resources for traffic management, canary releases, fault injection, and traffic mirroring.
  • Linkerd — Alternative lightweight service mesh with automatic proxy injection.

See ADR-0010 for details.

7.3 Docker Image Build

All services use multi-stage Docker builds:

  1. SDK image (dotnet-sdk-base-dockerfile) — Used for building the application.
  2. Runtime image (dotnet-aspnet-base-dockerfile or dotnet-runtime-base-dockerfile) — Minimal image for running the compiled application.
    • API services use the ASP.NET base image (includes web server).
    • Background services use the runtime-only base image.

Each Dockerfile includes a HEALTHCHECK statement that periodically calls the service's /hc endpoint.


← Back to arc42 index