Docker Compose ist ein leistungsfähiges Werkzeug, um Multi-Container-Anwendungen wie Web Apps schnell und reproduzierbar zu starten. Typischerweise besteht ein Web App Stack aus einem Frontend-Webserver wie Nginx, einer Anwendung (z. B. Node.js, Python oder PHP) und einer Datenbank. Mit Docker Compose lassen sich diese Dienste, Netzwerke und Volumes in einer Datei definieren, sodass der gesamte Stack mit einem Befehl gestartet werden kann.
Grundstruktur eines Web App Stacks
Ein typischer Web App Stack besteht aus drei Komponenten:
- Nginx: Serviert statische Inhalte, fungiert als Reverse Proxy und leitet Anfragen an die App weiter
- App: Die Anwendung, die Geschäftslogik implementiert (Node.js, Python, PHP, etc.)
- Datenbank: Persistente Speicherung der Daten, z. B. MySQL, PostgreSQL oder MongoDB
Docker Compose Grundlagen
Docker Compose-Dateien verwenden das YAML-Format, um Services, Netzwerke und Volumes zu definieren. Version 3.8 oder höher wird empfohlen für moderne Features wie Secrets und Profiles.
Volumes für Persistenz
Datenbanken benötigen persistente Speicher, um Daten bei Neustarts zu erhalten. Docker Compose Volumes sind dafür ideal.
volumes:
db_data:
app_data:
db_dataspeichert die Datenbankdatenapp_datakann Logs oder Uploads der Anwendung aufnehmen- Volumes werden vom Host verwaltet und bestehen unabhängig vom Container
Netzwerke für die interne Kommunikation
Services kommunizieren über interne Docker-Netzwerke. Nginx sollte nur das App-Service erreichen, App darf auf DB zugreifen, DB bleibt intern.
networks:
frontend_net:
backend_net:
frontend_netverbindet Nginx und Appbackend_netverbindet App und Datenbank- Die Trennung erhöht Sicherheit und Übersichtlichkeit
Beispiel: docker-compose.yml für Web App Stack
version: '3.8'
services:
nginx:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./nginx/conf:/etc/nginx/conf.d
- app_data:/usr/share/nginx/html
networks:
- frontend_net
depends_on:
- app
app:
image: my_app:latest
environment:
- DATABASE_HOST=db
- DATABASE_USER=root
- DATABASE_PASSWORD_FILE=/run/secrets/db_password
volumes:
- app_data:/usr/src/app/data
networks:
- frontend_net
- backend_net
secrets:
- db_password
db:
image: mysql:8
environment:
MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_password
MYSQL_DATABASE=myapp
volumes:
- db_data:/var/lib/mysql
networks:
- backend_net
secrets:
- db_password
secrets:
db_password:
file: ./db_password.txt
volumes:
db_data:
app_data:
networks:
frontend_net:
backend_net:
Erklärungen zur Compose-Datei
- Nginx: Port 80 auf Host gemappt, Konfiguration aus
./nginx/conf, dient als Reverse Proxy - App: Umgebungsvariablen nutzen Secrets für Datenbankpasswort, greift auf App- und Backend-Volume zu
- DB: MySQL Container, Daten persistent über
db_data, Passwort über Secret - Secrets: Sensible Daten wie DB-Passwort werden nicht in .env-Dateien abgelegt
- Netzwerke: Trennung Frontend und Backend für Sicherheit und klare Kommunikation
Start und Verwaltung
Der gesamte Stack kann mit einem Befehl gestartet werden:
docker-compose up -d
Zum Stoppen und Entfernen aller Container, Netzwerke und Volumes:
docker-compose down -v
Best Practices
- Volumes für persistente Daten nutzen
- Secrets für sensible Daten einsetzen
- Netzwerke trennen (Frontend / Backend)
- Dependencies mit
depends_ondefinieren, um Startreihenfolge zu gewährleisten - Konfiguration von Nginx über Volumes versionieren
- CI/CD-Integration für automatisierten Build und Deployment
- Logging in Volumes oder zentralem Logging-System speichern
- Regelmäßige Security-Updates für Images einplanen
Praxisbeispiele
Starten des Stacks
docker-compose up -d
Logs überwachen
docker-compose logs -f nginx
docker-compose logs -f app
docker-compose logs -f db
Rollback auf vorherige App-Version
docker service update --image my_app:1.0 my_app_service
Zusammenfassung
Mit Docker Compose lassen sich komplexe Web App Stacks aus Nginx, Anwendung und Datenbank einfach orchestrieren. Durch den Einsatz von Volumes für Persistenz, Secrets für sensible Daten und separaten Netzwerken für interne Kommunikation wird der Stack sicher, wartbar und reproduzierbar. Best Practices wie Startabhängigkeiten, CI/CD-Integration und regelmäßige Updates sorgen dafür, dass der Web App Stack zuverlässig in Entwicklung, Test und Produktion betrieben werden kann.
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.

