Podman und Buildah

Warum Du mit Podman arbeiten willst

Podman ist wie Docker – nur ohne Dämon, sicherer, besser skriptbar und komplett daemonless. Für jemanden wie Dich, der Linux, die Shell und saubere Prozesse liebt, bietet Podman genau das richtige Werkzeug: Container als normale Prozesse, Rootless-Betrieb out-of-the-box, Systemd-Integration und Kompatibilität zu bestehenden Dockerfiles.

Statt einem monolithischen Dienst (dockerd), der Rootrechte braucht und ständig läuft, bekommst Du mit Podman ein „do one thing well“-Toolset. Du willst einen Container bauen? buildah. Starten? podman run. Verwalten? podman ps. Alles modular, alles CLI-first – genau Dein Stil.

Und das Beste: Wenn Du mal doch ein docker-Skript hast – alias docker=podman funktioniert oft direkt.

Buildah, Bro!

buildah ist super, vor allem in Skripten oder CI/CD, weil es keine Daemon braucht und feiner kontrollierbar ist als Docker. Hier die pragmatische Übersicht: Wie ersetzt man docker build durch buildah?

Einfacher Ersatz für docker build

Wenn Du ein Dockerfile hast, geht das genauso mit buildah:

1
buildah bud -t mein-image:latest .

bud steht für Build Using Dockerfile

Image manuell bauen (ohne Dockerfile)

Das ist der Clou an buildah: Du kannst den ganzen Prozess manuell kontrollieren.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# Basis holen
ctr=$(buildah from alpine)

# Mounten
mnt=$(buildah mount "$ctr")

# curl reininstallieren
buildah run "$ctr" apk add curl

# Label setzen
buildah config --label maintainer=karsten "$ctr"

# CMD setzen
buildah config --cmd "/bin/sh" "$ctr"

# Image committen
buildah commit "$ctr" mein-image:latest

Kontext aus Verzeichnis verwenden

Wenn Du Dateien ins Image kopieren willst:

1
buildah copy "$ctr" ./my-app /opt/my-app

buildah läuft standardmäßig rootless, besonders sauber unter Fedora oder Silverblue. Wichtig ist:

  • Für OverlayFS-Mounts: buildah unshare
  • Zum reinen Bauen (bud): reicht auch ohne unshare

Pushen zu einer Registry

1
buildah push mein-image:latest docker://myregistry.local/mein-image:latest

Oder in OCI-Layout speichern:

1
buildah push mein-image oci-archive:./mein-image.oci

Und hier noch ein Justfile für die wichtigsten Tasks.