Docker Compose Volumes: Datenbanken und Apps persistent betreiben

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.

Related Articles