Canary Deployments ermöglichen es, neue Versionen einer Anwendung kontrolliert in Produktion zu bringen, indem ein kleiner Prozentsatz des Traffics auf die neue Version geleitet wird. Dies reduziert das Risiko von Fehlern und Ausfällen, ohne auf komplexe Orchestratoren wie Kubernetes angewiesen zu sein. Docker Compose kann mit einigen Patterns und Reverse-Proxies ebenfalls Canary Deployments realisieren.
1. Grundlagen von Canary Deployments
Beim Canary Deployment wird eine neue Version der Anwendung zunächst nur für einen kleinen Teil der Benutzer aktiviert. Abhängig von Monitoring und Feedback kann der Traffic schrittweise erhöht werden:
- Start mit 5–10 % Traffic auf die neue Version
- Monitoring von Performance, Fehlerquoten und Logs
- Stepwise Rollout bis 100 % oder Rollback bei Problemen
Vorteile ohne Orchestrator
- Kein Kubernetes nötig – Compose Stacks reichen
- Einfache Kontrolle über Versionen über Tags
- Flexibilität bei Traffic-Splitting über Reverse-Proxies
2. Setup von Compose für Canary Deployments
Die Grundidee besteht darin, mehrere Service-Instanzen zu betreiben und Traffic gezielt zu verteilen. Ein typisches Setup:
- Alte Version (`app:v1`) weiterlaufen lassen
- Neue Version (`app:v2`) parallel starten
- Reverse-Proxy (z. B. Traefik oder Nginx) zur Traffic-Verteilung einsetzen
Beispiel `docker-compose.yml`
version: "3.9"
services:
app_v1:
image: myapp:v1
networks:
- frontend
app_v2:
image: myapp:v2
networks:
- frontend
proxy:
image: traefik:latest
command:
- "--providers.docker=true"
- "--entrypoints.web.address=:80"
ports:
- "80:80"
networks:
- frontend
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
frontend:
driver: bridge
3. Traffic-Split über Reverse-Proxy
Reverse-Proxies können den Traffic zwischen alten und neuen Versionen steuern:
- Traefik: Weighted Services über Labels
- Nginx: Split mit `upstream` und `split_clients`
Traefik Beispiel mit Canary
services:
app_v1:
labels:
- "traefik.http.services.app.loadbalancer.server.port=80"
- "traefik.http.routers.app.rule=Host(`example.com`)"
- "traefik.http.services.app.loadbalancer.weight=80"
app_v2:
labels:
- "traefik.http.services.app.loadbalancer.server.port=80"
- "traefik.http.routers.app.rule=Host(`example.com`)"
- "traefik.http.services.app.loadbalancer.weight=20"
4. Monitoring und Observability
Canary Deployments leben von schnellem Feedback. Folgende Punkte sind essenziell:
- Healthchecks in Compose definieren
- Logs zentralisieren (ELK Stack oder Loki)
- Performance-Metriken via Prometheus/Grafana
- Fehlerquoten pro Version überwachen
Healthcheck Beispiel in Compose
services:
app_v2:
image: myapp:v2
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost/health"]
interval: 30s
retries: 3
5. Rollout Strategien
Die Steuerung des Traffics erfolgt stufenweise:
- Start bei 10 % → Monitoring 15–30 Minuten
- Step-Up 25 % → Monitoring erneut
- Full Rollout 100 % bei stabilen Metrics
- Rollback sofort bei Fehlern
Rollback Beispiel
# Entfernen der neuen Version und Traffic zurück auf v1
docker compose stop app_v2
docker compose rm -f app_v2
# Proxy Labels auf alte Version anpassen
docker compose up -d proxy
6. Best Practices
- Verwende feste Image-Tags statt `latest`
- Monitoring und Logging von Anfang an aktivieren
- Healthchecks unbedingt definieren
- Rollback-Szenarien regelmäßig testen
- Secrets und Configs konsistent zwischen Versionen halten
- Traffic-Split initial niedrig beginnen (5–10 %)
- Dokumentiere die Promotion-Pipeline
7. Zusammenfassung
Canary Deployments mit Docker Compose ermöglichen kontrollierte Releases ohne komplexen Orchestrator. Durch den Einsatz von Reverse-Proxies, Healthchecks und Monitoring kann Traffic gezielt auf neue Versionen verteilt und Risiken minimiert werden. Rollback-Mechanismen, environment parity und observability sind entscheidend, um einen sicheren und stabilen Rollout sicherzustellen.
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.











