Das Problem: Container Sind Kurzlebig
Bevor wir ĂŒber Volumes sprechen, mĂŒssen Sie ein grundlegendes Konzept verstehen: Docker-Container sind kurzlebig. Was bedeutet das?
Stellen Sie sich vor, Sie haben einen Container mit einer Datenbank. Sie fĂŒgen Daten ein, alles funktioniert perfekt. Dann stoppen Sie den Container, starten ihn neu und… die Daten sind verschwunden. Puff, verflĂŒchtigt.
Das passiert, weil jeder Container sein eigenes isoliertes Dateisystem hat, das mit dem Container selbst lebt und stirbt. Es ist wie Schreiben im Sand: Sobald die Welle kommt, verschwindet alles.
Was ist ein Docker Volume?
Ein Docker Volume ist ein Mechanismus zum Speichern von Daten auĂerhalb des Containers, sodass sie auch dann bestehen bleiben, wenn der Container gestoppt, neu gestartet oder gelöscht wird.
Denken Sie an Volumes wie an eine externe Festplatte, die Sie an Ihren Container anschlieĂen. Die Daten werden auf diese “externe Festplatte” geschrieben und bleiben sicher, unabhĂ€ngig davon, was mit dem Container passiert.
Warum Volumes Verwenden?
- Persistenz: Die Daten ĂŒberleben den Lebenszyklus des Containers
- Teilen: Mehrere Container können auf dieselben Daten zugreifen
- Backup: Es ist einfacher, Datensicherungen zu erstellen
- Leistung: Volumes sind fĂŒr I/O-Operationen optimiert
- PortabilitÀt: Sie können Daten zwischen verschiedenen Hosts verschieben
Die Drei Arten der Datenverwaltung in Docker
Docker bietet drei AnsÀtze zur Datenverwaltung. Sehen wir sie uns von der empfohlensten zur am wenigsten empfohlenen an.
1. Volumes - Die Empfohlene Wahl
Volumes werden vollstÀndig von Docker verwaltet und in einem speziellen Verzeichnis auf dem Host gespeichert (/var/lib/docker/volumes/ unter Linux).
| |
Vorteile:
- Von Docker verwaltet (einfach zu erstellen, löschen, inspizieren)
- Funktionieren unter Linux, Windows und Mac
- Können zwischen mehreren Containern geteilt werden
- UnterstĂŒtzen Treiber fĂŒr Remote-Speicher (Cloud, NFS usw.)
2. Bind Mounts - Direkte Verbindung
Bind Mounts verbinden einen bestimmten Ordner auf Ihrem Computer direkt mit dem Container.
| |
Wann sie verwendet werden sollten:
- WÀhrend der Entwicklung, um CodeÀnderungen in Echtzeit zu sehen
- Wenn Sie auf bestimmte Dateien des Host-Systems zugreifen mĂŒssen
- Um Konfigurationen zwischen Host und Container zu teilen
Achtung: Bind Mounts hÀngen von der Dateisystemstruktur des Hosts ab und sind daher weniger portabel.
3. tmpfs Mounts - TemporÀre Daten im Speicher
tmpfs Mounts speichern Daten im RAM des Hosts, nicht auf der Festplatte.
| |
Wann sie verwendet werden sollten:
- FĂŒr sensible Daten, die nicht auf die Festplatte geschrieben werden sollen
- FĂŒr temporĂ€re Hochleistungs-Caches
- Die Daten gehen verloren, wenn der Container stoppt (und genau das wollen Sie)
Wesentliche Befehle fĂŒr Volumes
Ein Volume Erstellen
| |
Volumes Auflisten
| |
Ein Volume Inspizieren
| |
Dieser Befehl zeigt, wo das Volume physisch gespeichert ist, und andere nĂŒtzliche Informationen.
Ein Volume Löschen
| |
Achtung: Das Löschen eines Volumes bedeutet den Verlust aller enthaltenen Daten. Es gibt keinen Papierkorb oder Wiederherstellung.
Praktische Beispiele
Beispiel 1: MySQL-Datenbank mit Persistenten Daten
Ohne Volume verlieren Sie bei jedem Neustart des MySQL-Containers alle Daten. So lösen Sie das Problem:
| |
Jetzt können Sie den Container stoppen, neu starten oder sogar löschen und neu erstellen: Die Datenbankdaten bleiben im Volume mysql-data intakt.
Beispiel 2: Webentwicklung mit Bind Mount
WÀhrend der Entwicklung möchten Sie, dass CodeÀnderungen sofort im Container sichtbar sind:
| |
Jede Ănderung an Dateien im Ordner src ist sofort im Container verfĂŒgbar.
Beispiel 3: Daten Zwischen Containern Teilen
Zwei Container, die auf dieselben Dateien zugreifen mĂŒssen:
| |
Volumes in Docker Compose
Wenn Sie Docker Compose verwenden, ist das Definieren von Volumes noch einfacher:
| |
Mit einem einfachen docker-compose up erstellt Docker automatisch die benötigten Volumes.
Backup und Wiederherstellung von Volumes
Ein Volume Sichern
| |
Dieser Befehl:
- Mountet das Volume im Nur-Lese-Modus (
ro) - Erstellt ein komprimiertes Archiv im aktuellen Verzeichnis
Ein Backup Wiederherstellen
| |
HĂ€ufige Fehler, die Vermieden Werden Sollten
1. Vergessen, Volumes fĂŒr Datenbanken zu Verwenden
Wenn Sie eine Datenbank in Docker ohne Volume verwenden, verlieren Sie alle Daten. Immer.
2. Bind Mounts in der Produktion Verwenden
Bind Mounts sind groĂartig fĂŒr die Entwicklung, aber in der Produktion sollten Sie Docker Volumes fĂŒr bessere PortabilitĂ€t und Sicherheit verwenden.
3. Keine Backups der Volumes Erstellen
Volumes werden nicht automatisch in Systembackups einbezogen. Planen Sie regelmĂ€Ăige Backups.
4. Verwaiste Volumes Ansammeln
Wenn Sie Container löschen, bleiben die Volumes bestehen. Verwenden Sie regelmĂ€Ăig:
| |
Um Volumes zu löschen, die nicht mehr mit Containern verbunden sind.
Wann Was Verwendet Werden Sollte: Zusammenfassung
| Szenario | Lösung |
|---|---|
| Datenbank in Produktion | Docker Volume |
| Lokale Entwicklung | Bind Mount |
| Sensible temporÀre Daten | tmpfs |
| Teilen zwischen Containern | Docker Volume |
| Konfigurationsdateien | Bind Mount oder Volume |
| Anwendungs-Logs | Docker Volume |
Fazit
Docker Volumes lösen eines der grundlegenden Probleme von Containern: die Datenpersistenz. Ohne Volumes wĂ€ren Container nur fĂŒr zustandslose Anwendungen nĂŒtzlich.
Denken Sie an die goldenen Regeln:
- Verwenden Sie immer Volumes fĂŒr Datenbanken
- Verwenden Sie Bind Mounts fĂŒr die lokale Entwicklung
- Erstellen Sie regelmĂ€Ăige Backups wichtiger Volumes
- RĂ€umen Sie regelmĂ€Ăig verwaiste Volumes auf
Sobald das Konzept verstanden ist, werden Volumes so natĂŒrlich wie das Speichern einer Datei auf der Festplatte. Und Ihre Daten sind endlich sicher, unabhĂ€ngig davon, was mit den Containern passiert.