Setting Up Development Environment

1. Installing Docker and Container Tools

ToolPurposeInstall (macOS)
Docker DesktopContainer runtime + GUIbrew install --cask docker
ColimaLightweight Docker altbrew install colima
PodmanDaemonless containersbrew install podman
kind / k3dLocal Kubernetesbrew install kind k3d
kubectlK8s CLIbrew install kubectl
HelmK8s package mgrbrew install helm
Skaffold / TiltInner-loop devbrew install skaffold tilt

2. Setting Up Local Service Registry

RegistryBacked ByLocal Run
ConsulHashiCorp KV + DNSdocker run -p 8500:8500 hashicorp/consul
EurekaNetflix/Spring Clouddocker run -p 8761:8761 steeltoeoss/eureka-server
etcdRaft KV (used by K8s)docker run -p 2379:2379 quay.io/coreos/etcd
Kubernetes DNSBuilt-in for K8sAuto via CoreDNS

3. Configuring Service Mesh Locally

MeshLocal Setup
Istioistioctl install --set profile=demo -y
Linkerdlinkerd install --crds | kubectl apply -f -
Consul Connecthelm install consul hashicorp/consul --set connectInject.enabled=true
Ciliumcilium install --version 1.15

4. Setting Up Message Broker

BrokerImagePort
RabbitMQrabbitmq:3-management5672, 15672
Kafka (KRaft)apache/kafka:3.79092
Redpandaredpandadata/redpanda9092
NATSnats:latest4222, 8222
LocalStack (SQS/SNS)localstack/localstack4566

5. Configuring API Gateway Locally

GatewayImage
Kongkong:3-alpine
Traefiktraefik:v3
Envoyenvoyproxy/envoy:v1.30-latest
Nginxnginx:alpine
Spring Cloud GatewayRun locally with Spring Boot 3.2+

6. Using Docker Compose

Example: docker-compose.yml for an order stack

services:
  postgres:
    image: postgres:16
    environment:
      POSTGRES_PASSWORD: dev
    ports: ["5432:5432"]
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 5s

  kafka:
    image: apache/kafka:3.7
    ports: ["9092:9092"]
    environment:
      KAFKA_NODE_ID: 1
      KAFKA_PROCESS_ROLES: broker,controller

  order-service:
    build: ./order-service
    ports: ["8080:8080"]
    depends_on:
      postgres: { condition: service_healthy }
      kafka:    { condition: service_started }
    environment:
      SPRING_PROFILES_ACTIVE: docker

7. Setting Up Local Kubernetes

ToolUse CaseCreate Cluster
kindK8s in Docker, CI-friendlykind create cluster --name dev
k3dk3s in Docker, lightweightk3d cluster create dev
minikubeVM-based, full featuresminikube start --driver=docker
Docker Desktop K8sBuilt-in toggleSettings → Kubernetes → Enable

8. Configuring Service Templates

Template ToolPurpose
Backstage Software TemplatesScaffold new services with golden path
CookiecutterPython-based project templates
YeomanJS scaffolding generators
Spring InitializrSpring Boot starter
create-nx-workspaceNx monorepo

9. Setting Up Database Containers

DatabaseImageDefault Port
PostgreSQLpostgres:165432
MySQLmysql:8.43306
MongoDBmongo:727017
Redisredis:7-alpine6379
Cassandracassandra:59042
Elasticsearchelasticsearch:8.139200

10. Implementing Hot Reload

StackTool
Spring BootSpring DevTools, Skaffold sync
Node.jsnodemon, tsx --watch
Goair, reflex
Pythonuvicorn --reload, watchfiles
K8s Inner LoopTilt, Skaffold, DevSpace

11. Using Development Tools

ToolPurpose
Postman / Bruno / InsomniaHTTP/GraphQL/gRPC client
grpcurl / EvansgRPC CLI
k9s / LensKubernetes TUI/GUI
sternMulti-pod log tailing
TelepresenceRun service locally, traffic from cluster
mockoon / WireMockStub external services

12. Configuring Local Tracing

ComponentImageUI Port
Jaeger all-in-onejaegertracing/all-in-one16686
Zipkinopenzipkin/zipkin9411
Tempografana/tempo3200
OpenTelemetry Collectorotel/opentelemetry-collector4317 (gRPC), 4318 (HTTP)