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.
Docker – ContrainerD/Buildah Migration Cheatsheet – Wichtige Kommandos
Im Folgenden findest du eine Gegenüberstellung der wichtigsten Kommandos von Docker und ContainerD einander gegenübergestellt.
Weitere Unterschiede
ContainerD benutzt Namespaces um Zugriffsrechte verwalten zu können. Daher muss immer auch ein Namespace angegeben werden, auf den sich der aktuelle Befehl bezieht. Aus Convenience Gründen empfiehlt sich die folgende Erweiterung des lokalen Environments:
Mit dieser Konfiguration könnten die Aufrufe in diesem Cheatsheet verkürzt werden. Um die Kommandozeilen
Bei einem Pull der Images ist bei ContainerD stets eine Version anzugeben. Im Gegensatz zu Docker wird bei fehlender Versionsnummer nicht "latest" angenommen.
Lokale Daten von ContainerD werden unter den Verzeichnissen
Login und Pull
Einloggen in den jeweiligen Imagehub, und herunterladen der Images.
Docker:
ContainerD:
Image Export
Bereitstellen des Images aus dem lokalen Hub.
Docker:
ContainerD:
Images auflisten
Ausgabe der aktuell im Namespace befindlichen Images.
Wichtig ist hier zu beachten, dass ContainerD und Buildah separate Speicher verwenden, das heißt ein mit Docker oder Buildah gebautes Image steht nicht direkt in ContainerD zur Verfügung.
Docker:
ContainerD:
Container Stop
Ausgabe der aktuell laufenden Container. Heraussuchen der ID des zu stoppenden Containers und stoppen des Containers.
Docker:
ContainerD:
Container entfernen
Ausgabe der aktuell laufenden Container. Heraussuchen der ID des zu entfernenden Containers und entfernen des Containers.
Docker:
ContainerD:
Image starten
Neuen Container starten basierend auf dem Image p8/xyz:10.
Docker:
ContainerD:
Container nach Stop entfernen
Entfernt Container automatisch, sobald diese gestoppt sind.
Docker:
ContainerD:
Container im gleichen Netzwerk laufen lassen wie den Host
Wenn mehrere Container auf einem System laufen sollen, welche untereinander kommunizieren, vereinfacht diese Konfiguration die Kommunikation der Container untereinander.
Docker:
ContainerD:
Environmentvariable für den Container setzen
Häufige Variante die im Container laufende Software von außen zu konfigurieren.
Docker:
ContainerD:
Privilegierter Container
Einen Container mit privileged Rechten zu starten sollte wohl überlegt sein, da dies dem Container auf dem jeweiligen System Root Rechte einräumt.
Docker:
ContainerD:
Verzeichnis in den Container mounten
Auf diese Weise kann ein Container Daten auf Daten außerhalb des eigenen Containers zugreifen, bzw Daten direkt auf die Festplatte/Storage Lösung des Hostsystems schreiben. Dies dient meist dazu, die durch die jeweilige Anwendung geschriebenen Daten über die Lebenszeit des Containers hinaus zu erhalten.
Docker:
ContainerD:
Container detached starten
In der Regel werden Container gestartet, um längere Zeit zu existieren, und nicht automatisch geschlossen werden, wenn die Shell beendet wird, welche den jeweiligen Container gestartet hat. Diese Container werden detached gestartet, das heißt sie laufen nicht auf der Konsole, sondern im Hintergrund.
Docker:
ContainerD:
Image entfernen
Images vom lokalen Rechner entfernen.
Docker:
ContainerD:
Auf das Container Log zugreifen
Ein laufender Docker Prozess produziert entsprechende Ausgaben auf der Konsole auf Stdout und Stderr. Diese können bei Docker durch die Benutzung des Log Commands eingesehen werden.
Docker:
ContainerD:
Ein ähnlicher Vorgang ist mit ContainerD nicht möglich. Den Befehl zum Abruf der Logs eines laufenden Containers ist nicht möglich. Wie mit dem Log eines Containers verfahren wird, ist abhängig davon, wie der Container gestartet wird.
Wird keine Option spezifiziert, so wird das Log standardmäßig auf die Konsole des CTR Prozesses ausgegeben.
Bei Containern die durch das Kubelet, also Kubernetes gestartet werden, werden die Logs unter
/var/
In dieser Datei befinden sich einzelne Log-Zeilen, welche den Timestamp, den Output-Kanal, sowie die eigentliche Log Zeile beinhaltet. Damit kann zu jeder Zeit bestimmt werden, ob es sich um eine Ausgabe auf Stdout oder Stderr handelt.