25 Datenverwaltung in Docker: Volumes und Bind Mounts

25.1 Einführung

Die Datenverwaltung in Docker ist ein kritischer Aspekt, insbesondere wenn es darum geht, persistente Daten zwischen Container-Neustarts und Updates beizubehalten. Docker bietet zwei Hauptmethoden zur Datenverwaltung: Volumes und Bind Mounts.

25.2 Docker Volumes

Volumes sind die bevorzugte Methode zur Datenverwaltung in Docker. Sie werden von Docker verwaltet und bieten eine einfache Möglichkeit, Daten außerhalb des Containers zu speichern und zu teilen.

25.2.1 Erstellung und Verwendung von Docker Volumes

25.2.1.1 Volume erstellen

Befehl:

docker volume create my-volume

Ausgabe:

my-volume

25.2.1.2 Volume in einem Container verwenden

Befehl:

docker run -d --name my-container -v my-volume:/app/data nginx

Erklärung: Dieser Befehl startet einen Container namens my-container und bindet das Docker-Volume my-volume an das Verzeichnis /app/data im Container.

25.2.1.3 Inhalt eines Volumes anzeigen

Befehl:

docker run --rm -v my-volume:/app/data busybox ls /app/data

Erklärung: Dieser Befehl startet einen temporären Container, der das Volume my-volume mountet und den Inhalt des Verzeichnisses /app/data auflistet.

25.2.2 Verwaltung von Docker Volumes

25.2.2.1 Liste der Volumes anzeigen

Befehl:

docker volume ls

Ausgabe:

DRIVER    VOLUME NAME
local     my-volume

25.2.2.2 Volume löschen

Befehl:

docker volume rm my-volume

25.2.2.3 Ungenutzte Volumes entfernen

Befehl:

docker volume prune

Erklärung: Dieser Befehl entfernt alle nicht verwendeten Docker-Volumes.

25.3 Bind Mounts

Bind Mounts bieten eine direkte Möglichkeit, Dateien und Verzeichnisse vom Host-System in den Container zu mounten. Sie sind flexibel und ermöglichen den Zugriff auf Host-Dateisysteme, erfordern jedoch mehr manuelle Verwaltung als Volumes.

25.3.1 Verwendung von Bind Mounts

Befehl:

docker run -d --name my-container -v /host/path:/container/path nginx

Erklärung: Dieser Befehl startet einen Container namens my-container und bindet das Host-Verzeichnis /host/path an das Verzeichnis /container/path im Container.

25.3.2 Vergleich: Docker Volumes vs. Bind Mounts

25.4 Beispiel: Persistente Datenbank mit Docker Volumes

Docker-Compose-Datei:

version: '3.1'

services:
  db:
    image: mysql:5.7
    volumes:
      - db-data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: example

volumes:
  db-data:

Erklärung: Diese Docker-Compose-Datei definiert einen MySQL-Datenbankdienst, der ein Volume namens db-data verwendet, um die Datenbankdaten im Verzeichnis /var/lib/mysql zu speichern.

Befehl zum Starten der Dienste:

docker-compose up -d

Befehl zum Überprüfen der Volumes:

docker volume ls

Ausgabe:

DRIVER    VOLUME NAME
local     my_project_db-data

25.5 Beispiel: Entwicklungsumgebung mit Bind Mounts

Docker-Compose-Datei:

version: '3.1'

services:
  web:
    image: nginx:latest
    volumes:
      - ./web-content:/usr/share/nginx/html
    ports:
      - "8080:80"

Erklärung: Diese Docker-Compose-Datei definiert einen Nginx-Webdienst, der das lokale Verzeichnis ./web-content als Bind Mount in das Verzeichnis /usr/share/nginx/html im Container einbindet.

Befehl zum Starten der Dienste:

docker-compose up -d

Änderungen in ./web-content werden sofort im Container widergespiegelt und sind über localhost:8080 zugänglich.

Die Verwaltung von Daten in Docker-Umgebungen ist essenziell für die Entwicklung und den Betrieb von Anwendungen. Docker Volumes bieten eine einfache und effiziente Methode zur Datenpersistenz, während Bind Mounts flexible und direkte Dateisystemzugriffe ermöglichen. Beide Methoden haben ihre spezifischen Anwendungsfälle und können je nach Bedarf eingesetzt werden. Im nächsten Kapitel wird die Verwendung von Docker Compose zur Verwaltung von Multi-Container-Anwendungen behandelt.