65 Storage-Mapping

Storage-Mapping bezeichnet die Art und Weise, wie Daten zwischen Host und Container bzw. zwischen verschiedenen Containern verfügbar gemacht werden. In Podman ist dieser Bereich bewusst transparent gestaltet, weit näher am Linux-Unterbau als in Docker-Umgebungen, wo ein zentraler Daemon eine abstrahierende Rolle übernimmt. Storage-Mapping ist deshalb kein beiläufiger Aspekt, sondern ein zentrales Architekturthema: Es entscheidet darüber, wie persistent Daten sind, wie performant Write-Paths ausfallen und wie reproduzierbar ein Containerlaufzeitmodell tatsächlich wird.

65.1 Grundprinzip: Container sind ephemer, Storage ist es nicht

Das wichtigste Designprinzip lautet: Container sind vergänglich, Storage nicht. Podman separiert diese beiden Aspekte deutlich:

Dieses Modell zwingt dazu, Datenpfade explizit zu gestalten statt implizite Daemon-Magie zu erwarten.

65.2 Der Container-Storage: Schichten und Schreibpfade

Podman nutzt containers/storage und layerbasierte Filesysteme. Die wichtigsten Varianten:

65.2.1 Overlayfs (rootful)

65.2.2 fuse-overlayfs (rootless)

65.2.3 Btrfs und DeviceMapper

Die Layerstruktur lässt sich inspizieren:

podman inspect <image>
podman history <image>

Diese Einsicht ist ein Vorteil gegenüber Docker, wo der Daemon viel verschleiert.

65.3 Arten des Storage-Mappings

Podman kennt drei Grundformen:

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

Jede hat spezifische Implikationen für Konsistenz, Performance und Rechteverwaltung.

65.3.1 Bind-Mounts: direkte Host-Integration

Bind-Mounts spiegeln einen Host-Pfad in den Container:

-v /data/app:/srv/data

Vorteile:

Nachteile:

Typische Stolperstelle: ein Container läuft rootless, das Host-Directory gehört UID 1000, der Container sieht jedoch 1000 → 100000 gemappt. Schreibzugriffe scheitern häufig.

Bind-Mounts sind mächtig, aber müssen mit Bedacht eingesetzt werden.

65.3.2 Named Volumes: vom Host abstrahiert, aber sauber kontrolliert

podman volume create appdata
podman run -v appdata:/var/lib/app

Merkmale:

Podman speichert Named Volumes standardisiert unter:

/var/lib/containers/storage/volumes/<NAME>/

Rootless entsprechend unter:

~/.local/share/containers/storage/volumes/<NAME>/

Named Volumes sind ideale Produktionskandidaten ohne Orchestrator.

65.3.3 Anonyme Volumes: bequem, aber unsichtbar

Sie entstehen automatisch:

-v /var/lib/app

Podman erzeugt ein namenloses Volume.

Risiken:

Anonymous Volumes sind gut für temporäre Laufzeiten, aber nicht für produktive Deployments.

65.4 Rechte, User-Namespaces und Ownership-Mapping

Der Umgang mit UID/GID ist ein Kernthema des Storage-Mappings und eine der häufigsten Fehlerquellen.

65.4.1 Rootless Container

Beispiel:

chown 100000:100000 /data/app

Nur so kann ein rootless Container in dieses Verzeichnis schreiben.

Diese Details müssen bewusst berücksichtigt werden, besonders bei Bind-Mounts, Datenbanken, Caches oder Lockfiles.

65.5 Multi-Container-Storage: Share vs. Isolate

Container in einem Pod teilen sich Namespaces — aber Storage teilen sie nur bei expliziten Mounts.

Strategien:

65.5.1 Isoliertes Storage pro Container

Ideal für Logs, Cache-Folder, temporäre Daten. Minimiert die Gefahr von Race Conditions.

65.5.2 Geteiltes Storage für gemeinsam genutzte Daten

Beispielsweise:

Wichtig: Locking und Transaktionen müssen sauber gestaltet sein.

65.5.3 Sidecar-Pattern mit Shared Volume

Dieses Pattern ist robust und deutlich kontrollierter als Netzwerk-basierter Austausch.

65.6 Container in Pods: Mapping ohne Nebeneffekte

Da Pods denselben Netzwerknamespace teilen, aber nicht denselben Storage, muss Storage explizit verbunden werden.

Ein Pod mit mehreren Containern sollte Volumes so definieren:

podman run --pod mypod -v data:/var/lib/app app
podman run --pod mypod -v data:/var/lib/app-sidecar backup

Jeder Mount ist unabhängig — kein implizites Sharing.

65.7 Storage auf macOS/Windows: virtiofs und 9p Besonderheiten

Podman Machine bringt eine zusätzliche Ebene ins Spiel: die VM-Schicht.

65.7.1 macOS: virtiofs

65.7.2 Windows: 9p (Plan9)

Der allgemeine Rat lautet:

65.8 Storage-Strategien für produktionsnahe Systeme

Ein sinnvolles Modell ohne Orchestrator:

  1. Named Volumes für persistente Backends
  2. Bind-Mounts für Logs, Configs, Debugging
  3. Sidecar-Mounts für Backup/Export-Funktionen
  4. Keine anonymen Volumes im Dauerbetrieb
  5. Rootful für Datenbanken oder high-throughput IO
  6. Rootless für Multi-User Deployments und sichere Isolation

Dieses Schema ist einfach, aber stabil – und vermeidet die häufigsten Probleme rund um Rechte, Performance und Datenverlust.

65.9 Storage-Mapping als architektonisches Werkzeug

Die eigentliche Besonderheit von Podman ist nicht ein bestimmtes Storage-Format, sondern die Tatsache, dass Storage-Mapping ein expliziter, sichtbarer, steuergerechter Teil der Architektur bleibt. Im Gegensatz zu vielen Daemon-designs wird hier nichts versteckt.

Storage wird bewusst gestaltet statt nebenbei „mitzutröpfeln“.