Docker für Datenbanken: PostgreSQL, MySQL und Backups richtig planen

Datenbanken in Docker-Containern zu betreiben, ist eine beliebte Methode, um Entwicklungs- und Produktionsumgebungen zu standardisieren. PostgreSQL und MySQL sind hierbei die am häufigsten eingesetzten Systeme. In diesem Tutorial erklären wir, wie man Datenbanken in Containern plant, persistent speichert und Backups zuverlässig durchführt, um Datenverlust zu vermeiden.

Containerisierte Datenbanken: Grundlagen

Datenbanken in Docker laufen wie jede andere Anwendung in isolierten Containern. Dabei gilt es zu beachten:

  • Container sind flüchtig: Ohne Persistenz gehen Daten bei Neustart verloren
  • Netzwerke und Ports müssen korrekt konfiguriert werden, um Zugriff zu ermöglichen
  • Ressourcenlimits verhindern Überlastungen, insbesondere bei großen Datenbanken

Persistenz durch Volumes

Um Daten dauerhaft zu speichern, sollten Volumes genutzt werden:

docker run -d 
  --name pgdb 
  -e POSTGRES_PASSWORD=secret 
  -v pgdata:/var/lib/postgresql/data 
  postgres:15
  • -v pgdata:/var/lib/postgresql/data bindet ein Docker-Volume
  • Vermeidet Datenverlust bei Container-Neustarts oder Updates
  • Kann mit docker volume inspect pgdata geprüft werden

PostgreSQL in Docker

PostgreSQL ist eine leistungsstarke relationale Datenbank, die sich gut in Containerumgebungen betreiben lässt.

Start eines Containers

docker run -d 
  --name mypostgres 
  -e POSTGRES_USER=admin 
  -e POSTGRES_PASSWORD=secret 
  -e POSTGRES_DB=mydb 
  -v pgdata:/var/lib/postgresql/data 
  -p 5432:5432 
  postgres:15
  • Umgebungvariablen POSTGRES_USER, POSTGRES_PASSWORD und POSTGRES_DB definieren Benutzer, Passwort und Datenbank
  • Port 5432 auf den Host durchreichen für externe Clients
  • Volumes sichern die Persistenz der Daten

Backups erstellen

PostgreSQL kann via pg_dump gesichert werden:

docker exec mypostgres pg_dump -U admin mydb > backup.sql
  • Backup auf dem Host speichern, um Container-Neustarts unkritisch zu machen
  • Automatisierte Backups können über Cronjobs im Host realisiert werden
  • Für größere Datenbanken empfiehlt sich pg_dumpall oder Volume-Snapshots

MySQL in Docker

MySQL ist ein weiteres beliebtes relationales DBMS für Container-Setups.

Start eines MySQL-Containers

docker run -d 
  --name mysql-db 
  -e MYSQL_ROOT_PASSWORD=secret 
  -e MYSQL_DATABASE=mydb 
  -e MYSQL_USER=admin 
  -e MYSQL_PASSWORD=adminpass 
  -v mysqldata:/var/lib/mysql 
  -p 3306:3306 
  mysql:8.1
  • Volumes sichern persistente Daten unter /var/lib/mysql
  • Umgebungvariablen definieren Root-Passwort, Benutzer und Datenbank
  • Port 3306 ermöglicht externe Verbindungen

Backups erstellen

Mit mysqldump können Datenbanken exportiert werden:

docker exec mysql-db mysqldump -u admin -pmydb > backup.sql
  • Passwort direkt mit -p übergeben oder interaktiv abfragen
  • Für automatische Backups Container intern mit Cron oder externe Skripte nutzen
  • Volume-Snapshots können auch hier die gesamte Datenbank persistent sichern

Netzwerkkonfiguration für Datenbanken

Container-Datenbanken benötigen sichere Netzwerke:

  • Bridge-Netzwerke für interne Kommunikation zwischen Containern
  • Ports nur nach außen freigeben, wenn notwendig
  • Compose-Dateien können Netzwerke definieren:
networks:
  internal:
    driver: bridge

services:
  db:
    image: postgres:15
    networks:
      - internal
  app:
    image: myapp:latest
    networks:
      - internal

Ressourcenlimits

Besonders bei Produktionsdatenbanken wichtig, um Throttling und OOM-Kills zu vermeiden:

docker run -d 
  --name mypostgres 
  --memory="1g" 
  --cpus="1.0" 
  postgres:15
  • --memory limitiert RAM
  • --cpus limitiert CPU-Zeit
  • Verhindert, dass Container den Host überlasten

Backup-Strategien

  • Regelmäßige Dumps mit pg_dump oder mysqldump
  • Volumes regelmäßig auf dem Host sichern oder Snapshots erstellen
  • Automatisierte Cronjobs oder Watchtower-ähnliche Lösungen für Updates kombinieren
  • Backups sollten getestet und an einem sicheren Ort aufbewahrt werden

Best Practices

  • Persistente Volumes für alle Datenbanken nutzen
  • Stabile Image-Tags statt latest verwenden
  • Ressourcenlimits definieren
  • Umgebungsvariablen sauber verwalten
  • Backups regelmäßig durchführen und testen
  • Netzwerke restriktiv konfigurieren
  • Healthchecks und Restart-Policies einrichten, um Ausfälle automatisch zu behandeln

Fazit

Docker erleichtert den Betrieb von PostgreSQL und MySQL erheblich, erfordert jedoch sorgfältige Planung in Bezug auf Persistenz, Ressourcen, Netzwerk und Backups. Mit konsequenter Nutzung von Volumes, Healthchecks, Ressourcenkontrolle und automatisierten Backups lässt sich ein stabiler und sicherer Datenbankbetrieb in Containern gewährleisten.

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