Container-Laufzeiten im Überblick, Teil 2 Low-Level Container Runtimes

Von Christian Rentrop |

Anbieter zum Thema

Low-Level Container Runtimes sind eine sehr basale Möglichkeit, Anwendungen und Dienste in einem Container laufen zu lassen. Sie zeichnen sich durch begrenzte Funktionalität bei geringem Ressourcenverbrauch aus.

Low-Level Container Runtimes werden üblicherweise nicht allein, sondern als Basis für Runtimes höherer Grade verwendet.
Low-Level Container Runtimes werden üblicherweise nicht allein, sondern als Basis für Runtimes höherer Grade verwendet.
(Bild: Julius Silver / Pexels)

Bei der Betrachtung von Container Runtimes kommt schnell die Klassifizierung in Low-, Mid- und High-Level Container Runtimes ins Spiel. Diese unterscheiden sich durch ihre Funktionalität, Flexibilität und ihren Ressourcenverbrauch.

Die basalste und sparsamste Möglichkeit, einen Container-Umgebung zu betreiben, stellen dabei die sogenannten Low-Level Container Runtimes dar. Diese werden üblicherweise nicht allein, sondern als Basis für Runtimes höherer Grade verwendet. Allerdings heißt das nicht, dass sie nicht allein betrieben werden können, auch wenn sie zumeist eher für Bibliotheken oder einfache Tools verwendet werden.

Am Anfang waren Namespaces & cGroups

Mit dem Wrapper Namespaces und dem Ressourcen- und Prozess-Manager cGroups, beide Bestandteile des Linux-Kernels, lassen sich bereits einfachste Low-Level Container erstellen. Während cGroups einzelne Prozesse zu Prozessgruppen zusammenfassen und die Ressourcenverteilung übernehmen kann, gruppiert und isoliert namespaces diese vom restlichen System oder voneinander. Dadurch bilden Namespaces und cGroups, wenn man so will, bereits einen sehr einfachen Container. Dieser ist die Grundlage für höhergradige Container-Systeme, die diese auch einsetzen.

Erstellung eines Low-Level Containers mit Bordmitteln

Da sowohl Namespaces als auch cGroups seit vielen Jahren zum Linux-Kernel gehören, ist die Erstellung einer einfachen Container-Runtime mit diesen beiden Hilfsmitteln recht einfach zu bewerkstelligen. Allerdings empfiehlt sich als zusätzliches Tool Busybox, das als „Schweizer Taschenmesser für Linux“ viele wichtige Tools in einem Programm vereint: Dadurch wird ein einfacher Container direkt mit der nötigen Funktionalität ausgestattet. Hinzu kommt natürlich der ebenfalls native Chroot-Befehl, um den Root-User auf diesen Simpel-Container umzulegen.

Der Unterschied zwischen RunC und cRun

Natürlich ist die Vorgehensweise zur Containererstellung auf diese Weise relativ aufwändig, die Verwaltung komplex. Hier kommen die „echten“ Low-Level Container Runtimes ins Spiel, die von verschiedenen Projekten angeboten werden und die Container-Erstellung erleichtern.

Die Kompatibilität der verschiedenen Runtimes wird durch die Standards der Open Container Initiative (OCI) gewährleistet, die 2015 von Docker ins Leben gerufen und inzwischen von den meisten Container-Anbietern unterstützt wird. Essenzielle Tools hierfür sind:

  • runC, die „offizielle“ Low-Level Container Runtime, die von OCI-Projekt gepflegt wird. Inzwischen kann runC als de-facto-Standard betrachtet werden, da es, auch durch den Erfolg von Docker, enorme Verbreitung besitzt. runC ist in der Programmiersprache Go geschrieben.
  • cRun, eine in C geschriebene Alternative zu runC, die vom RedHat-Projekt gepflegt wird. Es stellt eine performante Alternative zu runC dar, in der die Entwicklung teils schneller als bei runC vonstatten geht, die also moderner ist.

Zusätzlich zu den OCI-Container-Systemen gibt es aber noch weitere Low-Level-Runtimes, die nicht direkt mit dem OCI und dessen Standards verflochten sind:

  • Linux Containers, kurz LXC ist eine weit verbreitete Low-Level Container Runtime, die aus einer Reihe von Tools, Vorlagen und Bibliotheken besteht. Der Vorteil ist, das es sich um wirklich freie Software handelt, die sich auf Linux-Standards verlässt. Da LXC außerdem in C geschrieben ist, ist es sehr ressourcensparend und flott. Allerdings gerät LXC inzwischen durch runC und Crun ein wenig ins Hintertreffen, obwohl die Software ursprünglich von Docker verwendet wurde.
  • Auch lmctfy gehört zu den älteren Lösungen aus dem Bereich der Low-Level Container Runtimes. Ursprünglich von Google ins Leben gerufen, ist das Projekt ähnlich wie der Chrome-Browser in eine Open-Source-Variante und eine „kommerzielle“ Version. Gegenüber anderen Low-Level-Runtimes hat lmctfy den Vorteil, verschachtelte Container erstellen zu können, der jeweils mit eigenen cGroups arbeitet.
  • Microsoft Windows Containers ist, wie der Name schon sagt, die Basis für kommerzielle Container-Technologie aus Redmond und stellt eine rein containerbasierte Alternative zu Hyper-V dar, das eigene Kernel für jeden Container verlangt.

Was ist mit rkt?

Die Runtime rkt (gesprochen „rocket“) gehörte zwischen 2014 und 2020 ebenfalls zu den Low-Level-Alternativen. Das ursprünglich von den Machern des dedizierten „Container-Linux“ CoreOS entwickelte Container-System war als Alternative zu Dockers runC und später auch containerd gedacht und dementsprechend nicht vollständig „Low Level“. 2020 wurde das Projekt aber mit der Übernahme von CoreOS durch RedHat eingestellt: RedHat brauchte kein zweites System neben cRun, womit rkt gestrichen wurde.

Welche Variante wählen?

Was nach der Qual der Wahl aussieht, ist eigentlich recht einfach: An den meisten Fronten hat sich das Docker-System durchgesetzt: Wer sicher und zuverlässig Low-Level-Container erstellen will, findet mit den Standard der OCI und dem Tool runC im Grunde alles, was er benötigt.

Die Alternativen sind allerdings durchaus für andere Anwendungsszenarien interessant: cRun, wenn es um Ressourcen geht, etwa in leistungsschwachen embedded Systems. Oder Windows Containers, falls eben nicht Docker, sondern eine Microsoft-native Containergestaltung gewünscht ist.

Die gute Nachricht: All diese Container-Systeme können auf die ein oder andere Weise in Docker oder Kubernetes integriert werden, stellen also in aller Regel keine Insellösung dar. So kann Docker zum Beispiel problemlos LXC-Container ausführen, für die 2020 erschienenen Windows Container ist das Programm sogar Pflicht: Microsoft hat Docker damit noch einmal den Thron gesichert.

(ID:48830386)

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