Setting Up Development Environment
1. Installing Docker and Container Tools
| Tool | Purpose | Install (macOS) |
|---|---|---|
| Docker Desktop | Container runtime + GUI | brew install --cask docker |
| Colima | Lightweight Docker alt | brew install colima |
| Podman | Daemonless containers | brew install podman |
| kind / k3d | Local Kubernetes | brew install kind k3d |
| kubectl | K8s CLI | brew install kubectl |
| Helm | K8s package mgr | brew install helm |
| Skaffold / Tilt | Inner-loop dev | brew install skaffold tilt |
2. Setting Up Local Service Registry
| Registry | Backed By | Local Run |
|---|---|---|
| Consul | HashiCorp KV + DNS | docker run -p 8500:8500 hashicorp/consul |
| Eureka | Netflix/Spring Cloud | docker run -p 8761:8761 steeltoeoss/eureka-server |
| etcd | Raft KV (used by K8s) | docker run -p 2379:2379 quay.io/coreos/etcd |
| Kubernetes DNS | Built-in for K8s | Auto via CoreDNS |
3. Configuring Service Mesh Locally
| Mesh | Local Setup |
|---|---|
| Istio | istioctl install --set profile=demo -y |
| Linkerd | linkerd install --crds | kubectl apply -f - |
| Consul Connect | helm install consul hashicorp/consul --set connectInject.enabled=true |
| Cilium | cilium install --version 1.15 |
4. Setting Up Message Broker
| Broker | Image | Port |
|---|---|---|
| RabbitMQ | rabbitmq:3-management | 5672, 15672 |
| Kafka (KRaft) | apache/kafka:3.7 | 9092 |
| Redpanda | redpandadata/redpanda | 9092 |
| NATS | nats:latest | 4222, 8222 |
| LocalStack (SQS/SNS) | localstack/localstack | 4566 |
5. Configuring API Gateway Locally
| Gateway | Image |
|---|---|
| Kong | kong:3-alpine |
| Traefik | traefik:v3 |
| Envoy | envoyproxy/envoy:v1.30-latest |
| Nginx | nginx:alpine |
| Spring Cloud Gateway | Run 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
| Tool | Use Case | Create Cluster |
|---|---|---|
| kind | K8s in Docker, CI-friendly | kind create cluster --name dev |
| k3d | k3s in Docker, lightweight | k3d cluster create dev |
| minikube | VM-based, full features | minikube start --driver=docker |
| Docker Desktop K8s | Built-in toggle | Settings → Kubernetes → Enable |
8. Configuring Service Templates
| Template Tool | Purpose |
|---|---|
| Backstage Software Templates | Scaffold new services with golden path |
| Cookiecutter | Python-based project templates |
| Yeoman | JS scaffolding generators |
| Spring Initializr | Spring Boot starter |
| create-nx-workspace | Nx monorepo |
9. Setting Up Database Containers
| Database | Image | Default Port |
|---|---|---|
| PostgreSQL | postgres:16 | 5432 |
| MySQL | mysql:8.4 | 3306 |
| MongoDB | mongo:7 | 27017 |
| Redis | redis:7-alpine | 6379 |
| Cassandra | cassandra:5 | 9042 |
| Elasticsearch | elasticsearch:8.13 | 9200 |
10. Implementing Hot Reload
| Stack | Tool |
|---|---|
| Spring Boot | Spring DevTools, Skaffold sync |
| Node.js | nodemon, tsx --watch |
| Go | air, reflex |
| Python | uvicorn --reload, watchfiles |
| K8s Inner Loop | Tilt, Skaffold, DevSpace |
11. Using Development Tools
| Tool | Purpose |
|---|---|
| Postman / Bruno / Insomnia | HTTP/GraphQL/gRPC client |
| grpcurl / Evans | gRPC CLI |
| k9s / Lens | Kubernetes TUI/GUI |
| stern | Multi-pod log tailing |
| Telepresence | Run service locally, traffic from cluster |
| mockoon / WireMock | Stub external services |
12. Configuring Local Tracing
| Component | Image | UI Port |
|---|---|---|
| Jaeger all-in-one | jaegertracing/all-in-one | 16686 |
| Zipkin | openzipkin/zipkin | 9411 |
| Tempo | grafana/tempo | 3200 |
| OpenTelemetry Collector | otel/opentelemetry-collector | 4317 (gRPC), 4318 (HTTP) |