Von Docker zu Buildah – Cheatsheet

Von:
Datum: 28. Mai 2021

Bei der Migration von Docker zu ContainerD ändert sich nicht nur der Name sondern auch die Kommandozeilenaufrufe. Die Docker-Images bleiben kompatibel und können in ContainerD ausgeführt werden.

Von Docker zu Buildah Migration Cheatsheet

Da es sich bei ContainerD „nur“ um eine Laufzeitumgebung handelt, wird noch ein weiteres Tool zum Bau der einzelnen Images benötigt. Eines dieser Werkzeuge ist Buildah. Dieses, wie der Name bereits vermuten lässt, kümmert sich exklusiv darum, neue Images zu bauen und bereit zu stellen. Der Upload dieser Images auf einen Hub wird ebenfalls durch Buildah durchgeführt.

Buildah ist entgegen ContainerD und Docker kein Tool welches dauerhaft eingesetzt wird. Dies ist ein Grund dafür, warum es sich bei Buildah nicht um einen Systemdienst handelt, während es sich be ContainerD um einen eben solchen handelt.

Buildah speichert seine Daten in /var/lib/containers.

Buildah’s Aufgabe besteht darin ein Image zu bauen und dieses zum Download auf einem Hub bereitzustellen. Die Bereitstellung eines neuen Images erfolgt meist durch eine Image Registry, in welche Buildah das gebaute Image hochlädt. Von dort kann es z.B. durch ContainerD heruntergeladen und anschließend gestartet werden.

Dockerfile verwenden

Ein Dockerfile beschreibt den Zusammenbau eines neuen Images. Worauf basiert das Image, welche Software soll installiert werden, und wie wird der Container gestartet. Ein Beispiel für ein solches Dockerfile sieht wie folgt aus:

FROM ubuntu:latest RUN apt -y update CMD ["ps","-ax"]


Ein Container der auf diesem Image basiert, gibt die aktuell laufenden Prozesse aus, und terminiert anschließend.

Ein solches Dockerfile kann sowohl mit Docker, als auch auch mit Buildah gebaut und das Ergebnis in einen Hub hochgeladen werden.

Docker:

docker build -t hub.predic8.de/xyz:10 . docker login -u $USER -p $PASSWORD hub.predic8.de docker push hub.predic8.de/xyz:10


Buildah:

buildah bud -t hub.predic8.de/xyz:10 . buildah login -u $USER -p $PASSWORD hub.predic8.de buildah push hub.predic8.de/xyz:10


Docker Images anzeigen

Zeigt eine Übersicht aller sich auf dem System befindlichen Images an.

Docker:

docker images


Buildah:

buildah images


Laufender Container eines Images anzeigen

Gibt eine Übersicht darüber, welche Container basierend auf welchem Image aktuell laufen.

Docker:

docker images + dock ps (kombination)


Buildah:

buildah containers


Dockerfile to buildah migration guide

Buildah verfolgt einen anderen Ansatz als Docker, hier werden die Kommandos nicht in ein spezielles Datei Format geschrieben und der Reihenfolge nach ausgeführt.

Daher müssen die einzelnen Kommandos angepasst, und anschließend in ein Kommandozeilen Skript überführt werden.

Basierend auf welcher Grundlage soll das neue Image erzeugt werden.

Docker:

FROM ubuntu:latest


Buildah:

ctr=$(buildah from ubuntu)


Konfiguration der Environment Variablen für das neue Image.

Docker:

ENV FOO=BAR


Buildah:

buildah config --env FOO=BAR $ctr


Ausführen eines beliebigen Kommandos im neu zu erstellenden Image.

Docker:

RUN apt -y update


Buildah:

buildah run $ctr /bin/sh -c 'apt -y update'


Bereitstellen des neuen Images unter dem Namen ImageFoo. Besonders zu erwähnen ist an dieser Stelle, dass das Docker Kommando auf der Kommandozeile ausgeführt wird, während des Buildah Kommando ein Teil des Build Scripts zur Genierung eines Images ist, welches über die Kommandozeile gestartet wird.

Docker:

Docker build -t ImageFoo .


Buildah:

buildah commit $ctr ImageFoo