Podman: Linux-Container einfach gemacht, Teil 3

Podman wird oft als Alternative zu Docker angepriesen, jedoch bietet das Container-Tool viele Funktionen und Neuerungen, die weit über den Standard hinausgehen.

Werkzeuge  –  3 Kommentare

(Bild: stock.xchng)

Der erste Teil der Artikelserie hat einen grundlegenden Überblick über Podman vermittelt, während der zweite Teil die Bausteine eines Linux-Containers und Sicherheitskonzepte von Podman genau beleuchtete, insbesondere die Ausführung ohne Root. Der dritte und letzte Teil der Artikelserie widmet sich den fortgeschrittenen Anwendungsfällen von Podman, angefangen bei der automatischen Generierung von Systemd-Services bis zur Container-Ausführung auf einem anderen System.

Mount/Unmount

Beim Einsatz von Containern kommt es nicht selten vor, dass Entwickler Dateien zwischen Containern und dem Host oder untereinander kopieren, verschieben oder editieren müssen. Volumes sind dafür meist das Mittel der Wahl. Sie erlauben es, Pfade des Hosts auf Pfade innerhalb des Containers zu mounten, womit man einzelne Dateien oder ganze Verzeichnisse teilen kann – falls gewünscht nur mit Lesezugriff. Volumes sind grundsätzlich dafür gedacht, Daten zu teilen und für den Zugriff auf viele unterschiedliche Pfade unpraktikabel und kompliziert anzuwenden. Unter anderem bietet Podman dafür die Befehle mount und unmount an, um das RootFS eines Containers auf dem Host zu mounten beziehungsweise zu unmounten. Damit bekommt man Zugriff auf alle Dateien und Pfade des Containers und kann schnell und unkompliziert die Arbeit verrichten und anschließend das RootFS sicher unmounten. Das folgende Beispiel erklärt das Prinzip genauer.

Zunächst starten Entwickler einen Fedora-30-Container und lassen ihn im Hintergrund laufen. Den storage-driver im Rootless-Modus müssen Anwender hierfür auf vfs stellen, da overlay momentan keine Rootless-Mounts unterstützt. Seit Podman v1.3.1 kann man das mount-Problem umgehen, indem zunächst mittels podman-unshare einen neuen User-Namespace erstellt.

[heise]$ podman --storage-driver=vfs run -d fedora:30 sh
1bad1288ec31445a9bda5dbf3eda38105ee927b81ffa0c5b9850db3d4d2a8456

Nun kann man das RootFS des Containers mounten, und die Daten des Wurzelverzeichnisses anzeigen lassen:

[heise]$ podman --storage-driver=vfs mount 1bad1288ec31445a9bda5dbf3eda38105ee927b81ffa0c5b9850db3d4d2a8456
/home/valentin/.local/share/containers/storage/vfs/dir/3b2d86d6113c1409d98738c01b93d5b2cca32f495a2115f423268ce7b5b056f4

[heise]$ cd /home/valentin/.local/share/containers/storage/vfs/dir/3b2d86d6113c1409d98738c01b93d5b2cca32f495a2115f423268ce7b5b056f4

[heise]$ ls
bin dev home lib64 media opt root sbin sys usr
boot etc lib lost+found mnt proc run srv tmp var

[heise]$ grep NAME etc/os-release
NAME=Fedora
VERSION_CODENAME=""
PRETTY_NAME="Fedora 30 (Container Image)"
CPE_NAME="cpe:/o:fedoraproject:fedora:30"

Die Vorgehensweise gewährt vollen Zugriff auf das RootFS des Containers. Zum Beispiel kann der Paketmanager des Hosts Pakete direkt auf dem Container RootFS installieren:

[heise]$ ls usr/bin/ | grep vim

[heise]$ sudo dnf install --installroot `pwd` vim

[heise]$ ls usr/bin/ | grep vim
rvim
vim
vimdiff
vimtutor

Im obigen Beispiel kommt dnf auf einem Fedora 30 Host zum Einsatz und man installiert vim auf dem RootFS des Containers. Das soll nur veranschaulichen, welche Möglichkeiten der mount-Befehl in Podman bietet. Der vermutlich größte Vorteil ist, dass die Logik bestehender Skripte und Anwendungen keine Anpassung benötigt, um auf dem Container RootFS wie gewohnt arbeiten zu können.