Docker Compose für Microservices: Netzwerke, Dependencies und Healthchecks

Microservices-Architekturen bestehen aus vielen kleinen, spezialisierten Services, die über Netzwerke kommunizieren. Docker Compose erleichtert die Orchestrierung solcher Services, indem es Netzwerke, Abhängigkeiten und Healthchecks definiert. Dieses Tutorial zeigt, wie man Microservices sicher, wartbar und updatefähig auf Linux betreibt, inklusive persistenter Daten und stabiler Service-Dependencies.

Grundkonzepte für Microservices mit Docker Compose

Beim Aufbau einer Microservices-Architektur sind folgende Punkte entscheidend:

  • Netzwerke: Isolierte Netzwerke für interne Kommunikation und externe Zugriffe
  • Dependencies: Sicherstellung, dass Services in der richtigen Reihenfolge starten
  • Healthchecks: Automatische Überprüfung der Service-Gesundheit
  • Volumes: Persistente Speicherung für Datenbanken, Konfigurationen und Logs

Netzwerke für Microservices

Getrennte Netzwerke verhindern ungewollte Kommunikation und erleichtern die Verwaltung.

networks:
  frontend_net:
  backend_net:
  db_net:
  • frontend_net für Services, die direkt von Clients angesprochen werden
  • backend_net für interne Microservices-Kommunikation
  • db_net für Datenbanken und persistente Storage-Services

Persistente Volumes

Volumes sichern Daten von Services und gewährleisten, dass diese bei Neustarts oder Updates nicht verloren gehen.

volumes:
  db_data:
  cache_data:
  service_config:
  • db_data für Datenbankinhalte
  • cache_data für Caches wie Redis oder Memcached
  • service_config für Konfigurationen von Services

Beispiel: docker-compose.yml für Microservices

version: '3.8'

services:
db:
image: postgres:16
container_name: db
restart: unless-stopped
environment:
POSTGRES_USER: appuser
POSTGRES_PASSWORD: securepassword
POSTGRES_DB: appdb
volumes:
- db_data:/var/lib/postgresql/data
networks:
- db_net
healthcheck:
test: ["CMD-SHELL", "pg_isready -U appuser"]
interval: 10s
timeout: 5s
retries: 5

redis:
image: redis:8
container_name: redis
restart: unless-stopped
volumes:
- cache_data:/data
networks:
- backend_net
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5

api:
image: myorg/api-service:latest
container_name: api
restart: unless-stopped
environment:
DATABASE_URL: postgres://appuser:securepassword@db:5432/appdb
CACHE_URL: redis://redis:6379
depends_on:
db:
condition: service_healthy
redis:
condition: service_healthy
networks:
- backend_net
- db_net
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
interval: 10s
timeout: 5s
retries: 5

frontend:
image: myorg/frontend-service:latest
container_name: frontend
restart: unless-stopped
depends_on:
- api:
condition: service_healthy
networks:
- frontend_net
- backend_net
ports:
- "80:80"

Erklärungen zur Compose-Datei

  • Netzwerke: Frontend, Backend und DB getrennt, um Sicherheit und Übersichtlichkeit zu gewährleisten
  • Healthchecks: Stellen sicher, dass Services nur starten oder Traffic erhalten, wenn abhängige Services gesund sind
  • depends_on: Verknüpft Services und wartet auf gesunde Abhängigkeiten
  • Volumes: Persistente Speicherung für Datenbanken, Caches und Konfigurationen
  • Environment: Container-Umgebungsvariablen für Verbindungen zwischen Services
  • Ports: Frontend-Services werden extern zugänglich gemacht

Start und Verwaltung des Microservices-Stacks

Stack starten:

docker-compose up -d

Stack stoppen und Container, Netzwerke, Volumes entfernen:

docker-compose down -v

Best Practices

  • Volumes für persistente Daten nutzen
  • Netzwerke für Service-Isolation und Sicherheit definieren
  • Healthchecks implementieren, um stabile Abhängigkeiten sicherzustellen
  • Versionierte Images einsetzen für Updates und Rollbacks
  • Regelmäßige Backups der Datenbanken und Caches
  • Monitoring implementieren, um die Service-Gesundheit zu überwachen
  • Environment-Variablen für Konfigurationen nutzen, Secrets für sensible Daten
  • Automatisierte CI/CD-Pipelines für Updates der Services

Praxisbeispiele

Stack starten

docker-compose up -d

Logs überwachen

docker-compose logs -f api
docker-compose logs -f frontend
docker-compose logs -f db

Rollback eines Service

docker service update --image myorg/api-service:1.2.0 api_service

Updatefähigkeit

Durch versionierte Docker Images können einzelne Microservices aktualisiert werden, ohne dass persistente Daten oder abhängige Services verloren gehen. Healthchecks und depends_on sorgen dafür, dass neue Versionen nur bereitgestellt werden, wenn alle Abhängigkeiten verfügbar und gesund sind.

docker-compose pull
docker-compose up -d

Zusammenfassung

Mit Docker Compose lassen sich Microservices sicher, wartbar und updatefähig orchestrieren. Durch getrennte Netzwerke, Healthchecks und persistente Volumes werden Services stabil betrieben. Versionierte Images und CI/CD-Pipelines ermöglichen einfache Updates und Rollbacks, während Monitoring und Backups die Zuverlässigkeit erhöhen.

Konfiguriere Cisco Router & Switches und liefere ein Packet-Tracer-Lab/GNS3

Ich biete professionelle Unterstützung im Bereich Netzwerkkonfiguration und Network Automation für private Anforderungen, Studienprojekte, Lernlabore, kleine Unternehmen sowie technische Projekte. Ich unterstütze Sie bei der Konfiguration von Routern und Switches, der Erstellung praxisnaher Topologien in Cisco Packet Tracer, dem Aufbau und Troubleshooting von GNS3- und EVE-NG-Labs sowie bei der Automatisierung von Netzwerkaufgaben mit Netmiko, Paramiko, NAPALM und Ansible. Kontaktieren Sie mich jetzt – klicken Sie hier.

Meine Leistungen umfassen:

  • Professionelle Konfiguration von Routern und Switches

  • Einrichtung von VLANs, Trunks, Routing, DHCP, NAT, ACLs und weiteren Netzwerkfunktionen

  • Erstellung von Topologien und Simulationen in Cisco Packet Tracer

  • Aufbau, Analyse und Fehlerbehebung von Netzwerk-Labs in GNS3 und EVE-NG

  • Automatisierung von Netzwerkkonfigurationen mit Python, Netmiko, Paramiko, NAPALM und Ansible

  • Erstellung von Skripten für wiederkehrende Netzwerkaufgaben

  • Dokumentation der Konfigurationen und Bereitstellung nachvollziehbarer Lösungswege

  • Konfigurations-Backups, Optimierung bestehender Setups und technisches Troubleshooting

Benötigen Sie Unterstützung bei Ihrem Netzwerkprojekt, Ihrer Simulation oder Ihrer Network-Automation-Lösung? Kontaktieren Sie mich jetzt – klicken Sie hier.

Related Articles