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.

Marcia Ramos Kinsta

I'm the Editorial Team Lead at Kinsta. I'm a open source enthusiast and I love coding. With more than 7 years of technical writing and editing for the tech industry, I love collaborating with people to create clear and concise pieces of content and improve workflows.