Linux-Container automatisiert erstellen und betreiben Mit Buildah und Podman zum OCI-Container

Von Thomas Joos

Anbieter zum Thema

Entwickler müssen immer schneller Anwendungen bereitstellen und auch aktuell halten. Daher gewinnen containerisierte Apps immer mehr an Bedeutung. Um automatisiert Container erstellen zu können, sind Images notwendig. Diese lassen sich mit Buildah erstellen.

Buildah ist ein guter, quelloffener Einstiegspunkt, um OCI-konforme Container-Images zu erstellen.
Buildah ist ein guter, quelloffener Einstiegspunkt, um OCI-konforme Container-Images zu erstellen.
(Bild: buildah.io)

Buildah (Eigenschreibweise buildah) ist ein Open Source-Tool, das ursprünglich von Red Hat entwickelt wurde. Mit dem Tool können Entwickler aus ihrem Quellcode Container-Images erstellen. Auf Basis dieser Images lassen sich wiederum Container für Docker/Kubernetes-Umgebungen erstellen, aber auch für andere Container-Dienste wie Podman. Ein Vorteil von Buildah besteht darin, dass das Erstellen von Images keinen Overhead verursacht.

Das Tool Buildah ist auf Linux-Systemen schnell einsatzbereit.
Das Tool Buildah ist auf Linux-Systemen schnell einsatzbereit.
(Bild: Joos / Canonical)

Die Open Container Initiative (OCI) treibt die Möglichkeiten von Containern immer weiter voran Für Tools in diesem Bereich ist es deshalb wichtig, die Standards einzuhalten, welche die OCI vorgibt. Dadurch lassen sich die Werkzeuge auch gemeinsam nutzen, auch wenn sie von verschiedenen Entwicklern programmiert wurden. Interessant ist das für eine Kombination von Podman mit Buildah.

Nach der Installation des Kommandozeilentools auf einem Linux-Rechner, können mit dem Befehl „buildah“ ohne zusätzliche Werkzeuge folgende Aufgaben erledigt werden:

  • Erstellen von neuen Containern aus verschiedenen Quellen
  • Images für Container erstellen, entweder aus einem funktionierenden Container oder mit Anweisungen eines Docker-Files
  • Images können im OCI-Image-Format oder im traditionellen Upstream-Docker-Image-Format erstellt werden
  • Das Root-Dateisystem eines funktionierenden Containers lassen sich für Anpassungen mounten und unmounten.
  • Der aktualisierte Inhalt des Root-Dateisystems eines Containers als Dateisystemschicht verwenden, um ein neues Image zu erstellen
  • Umbenennen eines lokalen Containers
  • Images aus dem System löschen

Container ohne Docker erstellen

Mit Buildah erstellen Entwickler OCI-konforme Container-Images, auf deren Basis sich wiederum OCI-konforme Container erstellen lassen. Die Linux-Container sind danach auf Linux und auf Entwicklerrechner mit dem Windows-Subsystem für Linux (WSL) in Windows 10/11 und Windows Server 2016/2019 lauffähig.

Eine Container-Runtime muss dabei nicht laufen. Die Erstellung von Images erfolgt unkompliziert über das Terminal. Dadurch lässt sich das Tool einfach in die eigene Entwicklungs-Pipeline einbinden und ermöglicht dadurch eine einfache und von anderen Tools unabhängige Erstellung von OCI-Container-Images.

Container-Images aus verschiedenen Quellen erstellen

Mit Buildah lassen sich Container-Images aus Docker-Files erstellen („buildah bud“) und auch OCI-Images aus bereits vorhandenen Images. Auch das Überprüfen von Images ist mit Buildah möglich („buildah inspect“). Ist bereits ein Container verfügbar, der zum Beispiel mit runC oder crun erstellt wurde, lassen sich aus diesem Container auch Images mit Buildah erstellen („buildah commit“). Dafür stellt das Terminal-Tool verschiedene Parameter bereit. Das Tool läuft auf den meisten Linux-Distributionen.

Nach der Installation steht Buildah über das Terminal als Kommandozeilentool zur Verfügung.
Nach der Installation steht Buildah über das Terminal als Kommandozeilentool zur Verfügung.
(Bild: Joos / Canonical)

Die Installation auf Debian/Ubuntu erfolgt zum Beispiel mit „sudo apt install buildah“. Auf Red Hat und CentOS kann die Installation mit „sudo yum -y install buildah“ oder „sudo dnf -y install buildah“ erfolgen. Hier arbeitet Buildah auch optimal mit Podman zusammen. Für die Installation auf openSUSE kann „sudo zypper install buildah“ genutzt werden.

Danach lassen sich die Optionen des Tools mit „buildah --help“ anzeigen. Für die einzelnen Parameter stehen auch Manpages zur Verfügung. Um sich zum Beispiel eine umfangreiche Hilfe zum Erstellen von Images auf Basis von Docker-Files anzeigen zu lassen, kann der Befehl „man buildah-bud“ verwendet werden. Das funktioniert auch für die anderen Parameter von Buildah.

Erste Schritte mit Buildah – Beispiele und Demos

Die Entwickler von Buildah stellen auch verschiedene Beispiele und Demos zur Verfügung, mit denen sich die Möglichkeiten von Buildah testen lassen. Die Installation dazu erfolgt zusammen mit Podman über „yum“ oder „dnf“ auf Red Hat/CentOS mit den folgenden Befehlen:

sudo yum -y install podman buildah
sudo yum -y install docker

Die Verwendung der Buildah-Demo ist auf der entsprechenden GitHub-Seite finden. Hier sind auch die verschiedenen Skripte, Docker-Files und notwendige Images verfügbar. Ein Beispiel für die Erstellung eines Images mit Buildah ist ebenfalls auf Github zu finden.

Container-Images mit Buildah aus Repositories laden und für eigene Images verwenden.
Container-Images mit Buildah aus Repositories laden und für eigene Images verwenden.
(Bild: Joos / Canonical)

Mit Buildah lassen sich aus vorhandenen Container-Repositories auch Container-Images herunterladen und für die Verwendung mit Buildah einsetzen. Der Befehl „buildah from centos“ lädt zum Beispiel ein CentOS-Image herunter. Die eingebundenen Images sind wiederum mit „buildah images“ zu sehen. Um aus einem mit Buildah heruntergeladenen Container-Image einen Container zu erstellen und am Beispiel von CentOS eine Anwendung zu installieren, in diesem Fall ein Webserver, kann der folgende Befehl zum Einsatz kommen:

buildah run centos-working-container yum install httpd -y

Um danach den Container zu bearbeiten und auf Basis des Containers ein eigenes Image mit Buildah zu erstellen, sind folgende Befehle notwendig:

Jetzt Newsletter abonnieren

Täglich die wichtigsten Infos zu Softwareentwicklung und DevOps

Mit Klick auf „Newsletter abonnieren“ erkläre ich mich mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung (bitte aufklappen für Details) einverstanden und akzeptiere die Nutzungsbedingungen. Weitere Informationen finde ich in unserer Datenschutzerklärung.

Aufklappen für Details zu Ihrer Einwilligung
echo "Hello" > index.html
buildah copy centos-working-container index.html /var/www/html/index.html
buildah copy centos-working-container index.html /var/www/html/index.html
buildah commit centos-working-container website

Podman und Buildah gemeinsam nutzen

Container, die mit Buildah erstellt werden, lassen sich mit Podman betreiben.
Container, die mit Buildah erstellt werden, lassen sich mit Podman betreiben.
(Bild: Joos / Canonical)

Die Beispiele in diesem Beitrag zeigen, dass neben dem Red-Hat-Tool Buildah häufig auch noch Podman zum Einsatz kommt. Die beiden Tools arbeiten eng zusammen. Während sich mit Buildah Container und Container-Images erstellen lassen, ist es möglich diese Container mit der Container-Engine Podman zu starten. Podman ist Teil von Red-Hat-Linux, steht aber auch auf anderen Linux-Distributionen zur Verfügung. Das Red-Hat-Tool ist genauso konform mit OCI-Standards, wie Buildah.

Nach der Installation von Podman außerhalb einer Red-Hat-Installation, zum Beispiel mit „sudo apt install podman“, können die Möglichkeiten des Tools mit „podman –help“ angezeigt werden.

(ID:48042055)