Wer ein komplett neues Image erzeugen möchte, kann hierfür zuerst einen leeren Container erzeugen, für den lediglich einige Metadaten angelegt werden.
# new=(buildah from scratch)
# newmount=$(buildah mount $new)
Im Anschluss werden dann die gewünschten Pakete in das bisher noch leere Container-Image installiert:
# dnf install -y --installroot $newmount --release 27 bash coreutils --setopt install_weak_deps=false
Auf dem Host-System kommt hier ein Fedora zum Einsatz, weshalb die Pakete auch aus diesem Repository installiert werden. Zu diesem Zeitpunkt existiert nun ein Image mit einer minimalen Laufzeitumgebung für Shell-Skripte. Das folgende Beispiel demonstriert, wie sich Skripte automatisch beim Starten des Containers ausführen lassen:
# echo '#!/bin/sh
> echo -e "Hello world...\n"' > $newmount/tmp/hello.sh
# chmod +x $newmount/tmp/hello.sh
# buildah config --cmd /tmp/hello.sh $new
Die Änderungen können Sie dann in ein neues Image schreiben, auf dessen Basis sich neue Container erzeugen lassen. Diese führen beim Start dann jeweils das Skript aus, das zuvor hinter der buildah-"-cmd"-Option angegeben wurde.
# buildah commit $new minimal-image
# minimal=$(buildah from minimal-image)
# buildah run $minimal
Hello world...
Viele Anwender werden sicher Dockerfiles herumliegen haben, mit denen bisherige Docker-basierte Images erzeugt wurden. Buildah besitzt eine Funktion "build-using-dockerfile" (bud), mit der sich ein Image auf Basis eines eben solchen Dockerfiles erzeugen lässt. An dieser Stelle soll noch einmal explizit darauf hingewiesen werden, dass für diese Funktion kein Docker-Daemon aktiv oder installiert sein muss. Das folgende Beispiel verwendet ein sehr einfaches Dockerfile zusammen mit einem Einzeiler-Skript, das beim Start des Containers einfach "Hello World..." ausgibt:
# cat Dockerfile
FROM registry.fedoraproject.org/fedora
ADD myecho /usr/local/bin
ENTRYPOINT "/usr/local/bin/myecho"
# echo 'echo -e "Hello World...\n"' > myecho
# chmod +x myecho
Rufen Sie buildah mit der Option "bud" auf, werden die einzelnen Anweisungen aus dem Dockerfile abgearbeitet und das fertige Image landet im lokalen Image-Store. Dieser ist in der Datei "/etc/containers/storage.conf" definiert und wird von sämtlichen Tools verwendet, die auf die Container/Storage-Bibliotheken [7][8] zurückgreifen:
# buildah bud -t echo-image .
STEP 1: FROM registry.fedoraproject.org/fedora
[...]
STEP 2: ADD myecho /usr/local/bin
STEP 3: ENTRYPOINT "/usr/local/bin/myecho"
STEP 4: COMMIT containers-storage:[overlay@/var/lib/containers/storage+/var/run/containers/storage:overlay.override_kernel_check=true]docker.io/library/echo-image:latest