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/databindet ein Docker-Volume- Vermeidet Datenverlust bei Container-Neustarts oder Updates
- Kann mit
docker volume inspect pgdatageprü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_PASSWORDundPOSTGRES_DBdefinieren 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_dumpalloder 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
--memorylimitiert RAM--cpuslimitiert CPU-Zeit- Verhindert, dass Container den Host überlasten
Backup-Strategien
- Regelmäßige Dumps mit
pg_dumpodermysqldump - 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
latestverwenden - 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.











