Buildah ist ein Werkzeug zum Bauen von OCI-Images, das ohne dauerhaft laufenden Hintergrunddienst auskommt. Es gehört zur libpod-Werkzeugfamilie rund um Podman und ist unter der Apache-2.0-Lizenz verfügbar.

Der Unterschied zu docker build

Der wichtigste Unterschied ist konzeptionell: Herkömmliche Builder erzeugen das Image am Stück aus einem Dockerfile. Buildah kann das ebenfalls (buildah bud), erlaubt aber zusätzlich, den Bau in einzelnen Schritten von der Kommandozeile aus zu steuern – Container anlegen, Pakete installieren, Dateien kopieren, Konfiguration setzen und erst am Ende das Image festschreiben. Jeder Schritt ist sichtbar und einzeln korrigierbar.

Vier Bauwege

  • buildah bud: klassischer Build aus einem Dockerfile. Kompatibel zum gewohnten Ablauf – nützlich als Ersatz, wenn Docker nicht installiert ist.
  • buildah from: erzeugt einen Arbeits-Container aus einem Basisimage und gibt dessen Namen aus. Danach wird mit weiteren Befehlen daran gearbeitet.
  • buildah run: führt einen Befehl in diesem Arbeits-Container aus – das Gegenstück zu RUN im Dockerfile.
  • buildah commit: schreibt den aktuellen Zustand als Image fest.
# Schrittweiser Bau ohne Dockerfile
ctr=$(buildah from debian:13-slim)
buildah run "$ctr" -- apt-get update
buildah run "$ctr" -- apt-get install -y --no-install-recommends nginx
buildah config --port 80 --cmd '["nginx","-g","daemon off;"]' "$ctr"
buildah commit "$ctr" registry.example.org/team/nginx:1.0

# Oder direkt aus einem Dockerfile
buildah bud -t registry.example.org/team/app:2.0 .

Rootless und ohne Chroot

Buildah kann vollständig als normaler Benutzer arbeiten. Ein Build in einem Container ohne Root-Rechte nutzt User-Namespaces; der abschließende Commit entpackt das Ergebnis, um die Schichten zu erzeugen – deshalb funktioniert der Bau in Umgebungen, in denen kein privilegierter Daemon laufen darf. Genau das macht Buildah in CI/CD-Umgebungen und auf geteilten Build-Servern interessant, ebenso in Kubernetes-Pipelines.

Verwandte Werkzeuge

Aus derselben Familie kommt Skopeo für das Bewegen von Images zwischen Registries, auch ohne lokale Kopie (skopeo copy docker://… docker://…), und crun als schlanke Laufzeitumgebung. Alle drei bilden zusammen eine vollständige, daemonlose Werkzeugkette: bauen, transportieren, ausführen.

Verwandte Grundlagen: Dockerfile, Docker-Image, Podman, Registry.