Geht es um Container, ist damit meistens gemeint, dass Anwendungen isoliert vom Host-System ausgeführt werden. Nicht von ungefähr kommt der Vergleich mit dem altbekannten Unix-Chroot-Mechanismus. So bringen Container-Anwendungen üblicherweise ein eigenständiges Dateisystem in Form eines Container-Images mit, in dem sich die Anwendung inklusive der Runtime und allen Abhängigkeiten befindet. Über Namespaces wird die Anwendung dann vom Rest des Host-Systems isoliert. Dies gilt nicht nur für das Dateisystem, sondern beispielsweise auch für die Container-Prozesse, das Netzwerk und auch Benutzer, die sich zwischen Host und Container voneinander isolieren lassen.
Zum Verwalten der Ressourcen, die ein solcher Container in Anspruch nehmen darf, kommen Control Groups (CGroups) zum Einsatz. Diese sind bereits seit Ende 2007 Bestandteil des Linux-Kernels. Schaut man sich all diese Beschreibungen von Containern einmal genauer an, wird man feststellen, dass der System- und Servicemanager systemd diesen Anforderungen durchaus gerecht wird. Die von systemd eingesetzten Unit-Dateien zur Konfiguration eines Services erlauben eine Vielzahl unterschiedlicher Optionen, die das Verhalten eines Services bestimmen, sodass sich deren Eigenschaften mit denen eines Containers vergleichen lassen. Im Folgenden beschreiben wir einige dieser Optionen näher, um den Weg zum Konzept der Portable Services zu ebnen.
Systemd unterstützt bereits seit den Anfangstagen die Option "RootDirectory=". Hiermit setzt der Service-Manager das Root-Directory für die Prozesse eines Services und greift hierfür auf den Linux-Systemcall "chroot()" zurück. Etwas neuer, aber von der Funktionsweise ähnlich, ist die Option "RootImage=", mit deren Hilfe das Dateisystem für die Prozesse eines Services aus einer Image-Datei eingelesen wird. In der Container-Welt können bei Bedarf Dateisysteme des Hosts in den Container eingebunden werden, wenn dies gewünscht ist.
...Der komplette Artikel ist nur für Abonnenten des ADMIN Archiv-Abos verfügbar.