In produktiven Docker-Umgebungen ist es entscheidend, Daten persistent zu speichern, insbesondere bei Datenbanken und Anwendungen, die regelmäßig Daten schreiben. Docker Compose bietet die Möglichkeit, Volumes einfach zu definieren und Container-Daten über Neustarts und Updates hinweg zu erhalten. Dieses Tutorial zeigt, wie Volumes in Docker Compose genutzt werden, um Datenbanken und Anwendungen dauerhaft zu betreiben.
Grundlagen von Docker Compose Volumes
Volumes sind von Docker verwaltete Speicherbereiche, die unabhängig vom Lebenszyklus eines Containers bestehen bleiben. In Docker Compose können Volumes zentral definiert und von mehreren Containern gemeinsam genutzt werden.
Eigenschaften von Volumes
- Persistente Speicherung über Container-Lifecycle hinweg
- Von Docker verwaltet, leicht zu sichern und wiederherzustellen
- Unterstützt Multi-Container-Zugriffe
- Optimiert für Performance und Portabilität
Volumes in Docker Compose definieren
Volumes werden in der docker-compose.yml Datei unterhalb des Abschnitts volumes: definiert und dann den entsprechenden Services zugewiesen.
Beispiel: Compose-Datei mit Volumes
version: '3'
services:
db:
image: mysql:8
environment:
MYSQL_ROOT_PASSWORD: mysecret
volumes:
- db_data:/var/lib/mysql
app:
image: my_app:latest
volumes:
- app_data:/usr/src/app/data
volumes:
db_data:
app_data:
In diesem Beispiel werden zwei Volumes definiert: db_data für die MySQL-Datenbank und app_data für Anwendungsdaten.
Persistenz von Datenbanken
Datenbanken wie MySQL oder PostgreSQL benötigen persistente Speicher, damit Daten bei Neustarts oder Updates erhalten bleiben. Docker Compose Volumes ermöglichen dies auf einfache Weise.
Beispiel: MySQL persistent betreiben
version: '3'
services:
db:
image: mysql:8
environment:
MYSQL_ROOT_PASSWORD: securepass
MYSQL_DATABASE: mydb
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
Mit diesem Setup bleiben alle Datenbanken innerhalb von db_data auch erhalten, wenn der Container gelöscht oder neu erstellt wird.
Persistenz für Anwendungen
Anwendungen, die Dateien, Logs oder Konfigurationsdaten speichern, profitieren ebenfalls von Volumes. So können User-Daten oder temporäre Dateien dauerhaft gesichert werden.
Beispiel: App-Daten persistent speichern
version: '3'
services:
app:
image: my_app:latest
volumes:
- app_data:/usr/src/app/data
volumes:
app_data:
Die Applikation speichert Daten im Container-Pfad /usr/src/app/data, die im Volume app_data persistiert werden.
Backup und Wiederherstellung von Volumes
Für produktive Systeme ist es sinnvoll, Volumes regelmäßig zu sichern und bei Bedarf wiederherzustellen.
Backup eines Volumes
docker run --rm -v db_data:/data -v $(pwd):/backup busybox tar cvf /backup/db_data_backup.tar /data
Wiederherstellung eines Volumes
docker run --rm -v db_data:/data -v $(pwd):/backup busybox tar xvf /backup/db_data_backup.tar -C /data
Best Practices für produktive Volumes
- Jedes kritische System (Datenbank, App-Daten) auf ein separates Volume legen
- Regelmäßige Backups der Volumes einplanen
- Volumes versionieren oder Snapshots erstellen
- Multi-Container-Zugriffe auf Volumes nur gezielt freigeben
- Ressourcenlimits setzen, um Speicherüberlastung zu vermeiden
- Logging und temporäre Daten getrennt von persistenten Volumes speichern
- Volumes bei Multi-Host-Setups über Storage-Plugins oder Cluster-Lösungen verwalten
Praxisbeispiele
Datenbank-Setup
docker volume create pg_data
docker-compose run -d -v pg_data:/var/lib/postgresql/data --name postgres_db postgres:15
Web-Anwendung mit persistentem Storage
docker volume create web_app_data
docker-compose run -d -v web_app_data:/usr/src/app/data --name web_app my_app:latest
Kombinierter Multi-Container-Stack
version: '3'
services:
web:
image: nginx
ports:
- "80:80"
volumes:
- web_data:/usr/share/nginx/html
api:
image: my_api
volumes:
- api_data:/usr/src/app/data
db:
image: postgres
environment:
POSTGRES_PASSWORD: pass
volumes:
- db_data:/var/lib/postgresql/data
volumes:
web_data:
api_data:
db_data:
Zusammenfassung
Docker Compose Volumes ermöglichen eine einfache und zuverlässige Persistenz von Daten für Datenbanken und Anwendungen. Mit klar strukturierten Volumes, regelmäßigen Backups und gezielter Nutzung von Multi-Container-Zugriffen lassen sich produktive Umgebungen sicher, stabil und wartbar betreiben.
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.











