Docker Compose ist ein leistungsstarkes Orchestrierungstool, das die Verwaltung und Bereitstellung von Multi-Container-Anwendungen mit Docker vereinfacht. Die Datei docker-compose.yml rationalisiert die Bereitstellung, indem sie komplexe Anwendungen mit mehreren Diensten, Netzwerken und Volumes in einer Datei definiert. Einer der wichtigsten Aspekte bei der Arbeit mit Docker Compose ist die Verwaltung persistenter Daten mithilfe von Volumes.
In diesem Artikel wird die Bedeutung der Verwendung von Volumes in Docker Compose für den Umgang mit persistenten Daten erläutert und ein praktischer Leitfaden für die effektive Verwendung von Volumes gegeben.
Was sind Docker-Volumes?
Docker-Volumes sind eine wichtige Komponente des Ökosystems, die persistente Daten speichert und verwaltet, die von ephemeren Containern erzeugt werden. Sie sorgen dafür, dass die Daten auch nach dem Entfernen oder Aktualisieren eines Containers erhalten bleiben, damit wichtige Anwendungsdaten bei Routinevorgängen nicht verloren gehen.
Volumes sind vom Dateisystem des Containers entkoppelt, sodass du sie leicht sichern, für mehrere Container freigeben und zwischen Hosts migrieren kannst.
Ein entscheidender Vorteil von Volumes gegenüber Bind-Mounts, bei denen es sich um Verzeichnis-Mounts vom Host-System zum Container handelt, ist die Portabilität. Du kannst Volumes schnell zwischen verschiedenen Hosts oder Containern verschieben, während du Bind-Mounts an ein bestimmtes Verzeichnis auf dem Host-System binden musst.
Diese Portabilität ermöglicht eine flexiblere und effizientere Datenverwaltung in Container-basierten Anwendungen. Volumes sind außerdem mit verschiedenen Speichertreibern kompatibel, so dass du die beste Speicherlösung für deinen speziellen Anwendungsfall wählen kannst.
Arten von Docker-Volumes
Docker-Volumes sind für die Verwaltung von Daten in Container-basierten Anwendungen unerlässlich. Es gibt zwei verschiedene Typen: benannte Volumes und anonyme Volumes. In diesem Abschnitt werden die wichtigsten Unterschiede zwischen den beiden Typen erläutert und es wird gezeigt, wie du sie für die Datenverwaltung in deinen Anwendungen einsetzen kannst.
Benannte und anonyme Volumes dienen unterschiedlichen Zwecken und bieten unterschiedliche Kontroll- und Verwaltungsmöglichkeiten. Während benannte Volumes für die meisten Anwendungsfälle aufgrund ihrer von Menschen lesbaren Bezeichner und der einfachen Verwaltung bevorzugt werden, ist es wichtig zu verstehen, wie beide Typen funktionieren, um ihre Vorteile zu maximieren.
Benannte Volumes
Benannte Volumes haben einen benutzerdefinierten Namen, mit dem sie leicht identifiziert, verwaltet und für mehrere Container freigegeben werden können. Docker erstellt und verwaltet benannte Volumes und speichert ihre Daten an einem bestimmten Ort auf dem Hostsystem. Dieser Speicherort befindet sich normalerweise im Docker-Installationsverzeichnis unter einer eindeutigen ID, die dem Namen des Volumes entspricht.
Benannte Volumes bieten mehr Kontrolle und Flexibilität, da du sie anhand ihrer eindeutigen Kennung einfach referenzieren und bearbeiten kannst.
Um ein benanntes Volume in Docker zu erstellen, führe folgendes aus:
docker volume create my_named_volume
Anonyme Volumes
Im Gegensatz zu benannten Volumes haben anonyme Volumes keinen benutzerdefinierten Namen. Stattdessen werden sie von Docker automatisch erstellt, wenn du einen Container erstellst und dem Volume eine eindeutige ID zuweist.
Anonyme Volumes sind in der Regel schwieriger zu verwalten und zu speichern, da sie keine für Menschen lesbare Kennung haben. Da Docker sie automatisch erstellt, ist es üblich, anonyme Volumes für die temporäre Speicherung zu verwenden. Sie können auch erscheinen, wenn du beim Erstellen eines Containers kein benanntes Volume angibst.
Um einen Container mit einem anonymen Volume zu erstellen, führe folgendes aus:
docker run -v /data nginx
Dieser Befehl bindet ein anonymes Volume in das Verzeichnis /data innerhalb des Containers nginx
ein. Du kannst nginx
durch den Namen des Containers ersetzen, in den du das Volume einbindest.
Wie man Volumes mit Docker Compose erstellt und verwaltet
Docker Compose vereinfacht die Erstellung und Verwaltung von Volumes, da du sie in der Datei docker-compose.yml definieren kannst. Diese Datei enthält die Konfiguration der Dienste, Netzwerke und Volumes deiner Anwendung und ermöglicht die einfache Verwaltung der Ressourcen deiner Anwendung an einem Ort.
1. Volumes in Docker Compose definieren
Um ein benanntes Volume in der Datei docker-compose.yml zu erstellen, definierst du es unter dem Schlüssel volumes
. Bei Bedarf kannst du auch den Volume-Treiber und Optionen angeben.
2. Einhängen von Volumes in Containern
Um ein Volume an einen Container anzuhängen, verwendest du den Schlüssel volumes
innerhalb der Definition service
in der Datei docker-compose.yml. Gib den Volume-Namen, gefolgt von einem Doppelpunkt, und den Containerpfad an, in den du das Volume einbinden möchtest.
Du kannst ein Volume auch für mehrere Container freigeben, indem du denselben Volume-Namen verwendest.
Hier ist ein Beispiel für die Erstellung von benannten Volumes mit den Namen web_data
und db_data
in deiner Datei docker-compose.yml:
version: '3.8'
services:
web:
image: nginx
volumes:
- web_data:/var/www/html
web-test:
image: nginx
volumes:
- web_data:/var/www/html # Web and web test share the web_data volume
db:
image: mysql
volumes:
- db_data:/var/lib/mysql
volumes:
web_data:
db_data:
driver: local # Define the driver and options under the volume name
driver_opts:
type: none
device: /data/db_data
o: bind
In diesem Beispiel werden zwei benannte Volumes definiert. Anschließend werden die Volumes in ihren jeweiligen Containern unter bestimmten Pfaden eingehängt. Als nächstes wird das Volume web_data
in das Verzeichnis /var/www/html im Web-Container und das Volume db_data
in das Verzeichnis /var/lib/mysql im Container db
eingebunden.
Die Container web
und web-test
teilen sich das Volume web_data
, so dass sie auf dasselbe Datenvolumen zugreifen und es verändern können.
Indem du Volumes in der Datei docker-compose.yml definierst und verwaltest, kannst du bei Bedarf ganz einfach Volumes erstellen, aktualisieren und löschen, ohne sie manuell mit Docker-Befehlen zu verwalten. Dank dieses rationalisierten Prozesses kannst du dich auf die Entwicklung und Bereitstellung deiner Anwendung konzentrieren, während Docker Compose die zugrunde liegende Ressourcenverwaltung übernimmt.
So arbeitest du mit Docker Compose und Volume-Befehlen
Docker Compose bietet mehrere Befehle, mit denen du deine Anwendung und ihre Ressourcen effektiv verwalten kannst. Wir wollen uns diese Befehle und ihre Beziehung zu den Volumes genauer ansehen:
docker compose up
erstellt und startet deine Anwendung, einschließlich ihrer Dienste, Netzwerke und Volumes. Wenn du ein benanntes Volume in der Datei docker-compose.yml definierst, bevor es existiert, wird es mit diesem Befehl automatisch erstellt.docker compose down
stoppt und entfernt die Dienste und Netzwerke deiner Anwendung. Standardmäßig werden benannte Volumes nicht entfernt. Um benannte Volumes zu entfernen, verwende das Flag--volumes
oder-v
.docker compose ps
listet die Container und ihren aktuellen Status auf, einschließlich Volume-bezogener Informationen.docker compose config
prüft und zeigt die effektive Konfiguration aus der Datei docker-compose.yml an, einschließlich der Volume-Definitionen.
Volumes auflisten
Um alle Volumes aufzulisten, verwende ls
:
docker volume ls
Die Ausgabe zeigt alle benannten Volumes an, auch die, die von Docker Compose erstellt wurden.
Volumes inspizieren
Um die Details eines bestimmten Volumes einzusehen, verwende inspect
. Sie gibt Informationen über das Volume aus, z. B. den Namen, den Treiber, den Einhängepunkt und die Optionen:
docker volume inspect db_data
Die Details des Volumes werden im JSON-Format angegeben. Wenn du zum Beispiel die oben angegebene Datei docker-compose.yml verwendest, erhältst du folgende Ausgabe:
[
{
"CreatedAt": "some-date-here",
"Driver": "local",
"Labels": null,
"Mountpoint": "/path/on/host/where/volume/is/mounted",
"Name": "db_data",
"Options": {
"device": "/data/db_data",
"o": "bind",
"type": "none"
},
"Scope": "local",
"Status": {
"Mounts": [
...
]
}
}
]
Ein Docker-Volume nach Name entfernen
Um ein Docker-Volume zu entfernen, kannst du docker volume rm
gefolgt von dem Namen des Volumes verwenden:
docker volume rm volume-name
Unbenutzte Volumes aufräumen
Um unbenutzte Volumes zu entfernen, verwende prune
:
docker volume prune
Dieser Befehl hilft dir, deine Entwicklungsumgebung aufzuräumen und Speicherplatz zurückzugewinnen. Er entfernt alle ungenutzten Volumes, die nicht mit Containern verbunden sind, einschließlich derjenigen, die Docker Compose erstellt.
Wenn du diese Befehle und ihre volumenbezogenen Funktionen nutzt, kannst du die Ressourcen deiner Anwendung effektiv verwalten und so eine optimale Leistung und eine effiziente Nutzung des Speicherplatzes sicherstellen.
Docker Compose-Versionen
Seit Juli 2023 erhält Docker Compose V1 keine Updates mehr. Es ist auch nicht mehr in neuen Versionen von Docker Desktop verfügbar. Docker Desktop unterstützt jedoch weiterhin einen docker-compose
Alias, um Befehle auf docker compose
umzuleiten und die Kompatibilität mit Tools und Skripten von Drittanbietern zu verbessern.
Um einen bestehenden Code von Docker Compose Version 1 auf 2 umzustellen, ersetze einfach den Bindestrich durch ein Leerzeichen. Zum Beispiel wird docker-compose up
zu docker compose up
.
Mit Version 2 kannst du den Befehl &compose
direkt in der Docker-Befehlszeilenschnittstelle (CLI) verwenden, den Docker-Kontext wechseln, um einen Container auf einem Cloud-Dienst zu erstellen, und Amazon ECS und Microsoft ACI nutzen.
Zusammenfassung
Dieser Artikel hat gezeigt, wie wichtig die Verwendung von Volumes mit Docker Compose für die Verwaltung persistenter Daten ist. Volumes sind eine wichtige Komponente im Docker-Ökosystem, mit der du die Daten, die Docker-Container erzeugen, speichern und verwalten kannst. Mit Docker-Volumes bleiben wichtige Anwendungsdaten auch dann erhalten, wenn du einen Container löschst oder aktualisierst, und tragen dazu bei, die Integrität und Konsistenz deiner Anwendung zu gewährleisten.
Docker Compose bietet einen optimierten Ansatz zur Erstellung und Verwaltung von Volumes in der Datei docker-compose.yml. Diese Methode vereinfacht deinen Entwicklungsprozess und sorgt für eine effiziente Nutzung der Ressourcen.
Die Verwendung von Volumes macht die Entwicklung flexibel und effizient, denn Docker Compose bietet verschiedene volumenbezogene Befehle, mit denen du die Anwendungsressourcen effektiv überwachen kannst. Mit diesen Befehlen kannst du ganz einfach Volumes erstellen, überprüfen und bereinigen.
Wenn du deine Anwendung bei Kinsta hostest, steht dir eine schnelle, sichere und zuverlässige Infrastruktur zur Verfügung, in der deine Projekte auf dem Premium Tier Network und den C2-Maschinen von Google Cloud Platform bereitgestellt werden. Wähle zwischen 37 Rechenzentren und einem HTTP/3-fähigen CDN mit 260+ PoPs.
Mit isolierter Containertechnologie, zwei starken Firewalls und fortschrittlichem DDoS-Schutz auf Basis von Cloudflare bist du sicher. Du kannst auch Apps integrieren oder Workflows mit der Kinsta-API automatisieren und sie mit Docker bereitstellen.
Kinsta bietet hochwertige Ressourcen und Inhalte für Webentwickler, darunter ausführliche Tutorials und Anleitungen für verschiedene Sprachen und Tools wie Docker Compose. Lies unsere Docker-spezifischen Inhalte im Kinsta-Blog, um mehr über Docker zu erfahren.
Schreibe einen Kommentar