Docker Compose für Web Apps: Nginx + App + DB als Stack

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_data speichert die Datenbankdaten
  • app_data kann 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_net verbindet Nginx und App
  • backend_net verbindet 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_on definieren, 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.

Related Articles