48 Volumes: Typen, Verhalten, Persistenz

Volumes bilden die Speichergrundlage containerisierter Anwendungen. Sie bestimmen, welche Daten Container behalten dürfen, welche isoliert bleiben und welche mit anderen Containern oder dem Host geteilt werden. Podman implementiert Volumes vollständig daemonlos; der gesamte Persistenzmechanismus basiert auf containers/storage und greift – je nach Rootless- oder Root-Modus – auf unterschiedliche Mount-Techniken zurück. Für produktionsnahe Architekturen ist das Verständnis dieser Mechanismen essenziell, denn falsche Volume-Modelle gehören zu den häufigsten Ursachen für Datenverlust, Inkonsistenzen oder fehlende Wiederholbarkeit.

48.1 Grundprinzip: Container-Dateisysteme sind flüchtig

Ohne Volumes speichern Container Daten im writable Layer. Dieser Layer ist:

Das flüchtige Dateisystem ist ideal für stateless Services, aber fatal für Datenbanken, Queues, Caches, Buildprozesse oder alles, was Daten zwischen Containerstarts behalten muss.

Volumes lösen dieses Problem, indem sie Speicherbereiche vom Container-Dateisystem trennen und dauerhaft im Host-Dateisystem persistieren.

48.2 Volume-Typen in Podman

Podman kennt drei primäre Volume-Arten:

  1. Named Volumes
  2. Bind Mounts
  3. Anonymous Volumes

Jeder Typ deckt ein anderes Architekturprofil ab.

48.2.1 Named Volumes: deklarativ, portabel, kontrolliert

Named Volumes werden von Podman verwaltet und befinden sich im Volume-Pfad des Storages:

Ein Volume wird erzeugt über:

podman volume create data

Einsatz im Container:

podman run -v data:/var/lib/db mydb

Eigenschaften:

Named Volumes eignen sich hervorragend für persistente Datenhaltung in Produktions- und CI-Workflows.

48.2.2 Bind Mounts: direkte Host-Integration

Bind Mounts verbinden ein Host-Verzeichnis mit einem Container-Verzeichnis:

podman run -v /srv/data:/var/lib/db mydb

Eigenschaften:

Bind Mounts sind das Äquivalent zur „festen Verdrahtung“ zwischen Container und Host. Sie liefern Flexibilität, sind aber weniger portabel als Named Volumes.

48.2.3 Anonymous Volumes: temporär, aber persistent bis Cleanup

Ein Container erzeugt ein anonymes Volume, wenn ein Volume-Mount angegeben wird, ohne einen Namen zuzuweisen:

podman run -v /var/lib/db mydb

Podman erzeugt dann intern ein zufällig benanntes Volume. Es bleibt bestehen, bis:

Diese Volumes sind praktisch für temporäre Arbeitslasten, aber riskant für langfristige Datenhaltung, da sie schwer auffindbar sind.

48.3 Persistenzmodell: Was lebt wo?

Das Zusammenspiel von Container und Volume lässt sich einfach darstellen:

Daten im Container-Layer: flüchtig Daten im Volume: persistent Daten im Image: unveränderlich

Diese Trennung erzeugt ein dreistufiges Persistenzmodell, das Sicherheit und Reproduzierbarkeit strukturiert.

48.4 Volume Ownership und UID/GID-Mapping

Im Rootless-Modus ist Volume-Ownership nicht trivial. Podman setzt User-Namespace-Mappings ein:

Das bedeutet:

Das erklärt klassische Fehlermeldungen: „permission denied“ beim Schreiben in rootless Volumes.

Best Practice:

Volumes sind damit nicht nur Speicherorte, sondern auch Ownership-Domänen.

48.5 Performanceverhalten verschiedener Volume-Typen

Die Speicherperformance variiert stark:

48.5.1 Named Volumes (overlayfs/fuse-overlayfs)

48.5.2 Bind Mounts

48.5.3 tmpfs

Podman unterstützt tmpfs-Mounts:

podman run --tmpfs /cache:size=512m ...

48.6 Lifecycle-Verhalten

Volumes leben unabhängig von Containern. Ein häufiger Fehler in der Praxis:

Der Zustand eines Systems kann man sauber inspizieren:

podman volume ls
podman volume inspect data

Für automatische Bereinigung:

podman volume prune

Aber Vorsicht: prune ist destruktiv.

48.7 Volume-Mount-Strategien für produktionsnahe Anwendungen

Einige Muster haben sich etabliert:

48.7.1 Datenbank-Apps

48.7.2 Buildpipelines

48.7.3 Microservices

48.7.4 Messaging- und Queue-Systeme

48.8 Volume-Troubleshooting

Typische Fehlerbilder und ihre Ursachen:

48.8.1 „permission denied“

48.8.2 Volume wird nicht gemountet

48.8.3 Daten verschwinden nach Neustart

48.8.4 Volumes wachsen unkontrolliert

48.9 Volumes als Architekturkomponente

In containerisierten Systemen ist die Persistenzfrage nicht sekundär, sondern ein Strukturthema. Volumes entscheiden darüber:

Volumes sind keine Nebenfunktion – sie sind die tragende Grundlage jeder Anwendung, die Daten über die Lebensdauer eines Containers hinaus benötigt.