Container sind eine Technologie, die es ermöglicht, eine Anwendung und ihre Abhängigkeiten zu kapseln und in einem isolierten Prozess auszuführen. Sie nutzen verschiedene Betriebssystemfunktionen, um eine isolierte Umgebung bereitzustellen, die sich wie ein eigenständiges System verhält, jedoch ohne den Overhead einer vollständigen virtuellen Maschine. Im Folgenden erkläre ich, wie Container auf das zugrunde liegende Betriebssystem zugreifen und wie dieser Zugriff verwaltet wird.
Zunächst ist es wichtig zu verstehen, dass Container mit dem Kernel des Host-Betriebssystems arbeiten. Das bedeutet, dass sie kein eigenes Betriebssystem benötigen; Stattdessen teilen sie sich den Host-Kernel und nutzen dessen Ressourcen und Fähigkeiten. Dies wird durch die Verwendung von Namespaces (Namespaces) und Kontrollgruppen (Cgroups) in Linux-Betriebssystemen erreicht, die zwei Schlüsseltechnologien sind, die die Containerisierung ermöglichen.
Namespaces sind eine Funktion des Kernels, die Kernelressourcen wie das Dateisystem, das Netzwerk und Benutzerprozesse partitioniert, sodass jeder Container seine eigene isolierte Sicht auf das System hat. Dies bedeutet, dass Prozesse innerhalb des Containers nur Ressourcen innerhalb desselben Namensraums sehen und darauf zugreifen können. Beispielsweise kann ein Prozess in einem Container die Prozess-ID (PID) 1 haben, als wäre er der erste Prozess, der auf einem System gestartet wurde, isoliert von anderen Containern und dem Host.
cgroups ergänzen Namespaces, indem sie die Nutzung von Systemressourcen wie CPU, Speicher und Festplatten-E/A auf Container beschränken und isolieren. Dadurch wird sichergestellt, dass jeder Container nur die ihm zugewiesenen Ressourcen nutzen kann, wodurch verhindert wird, dass ein Container die Systemressourcen des Hosts monopolisiert.
Darüber hinaus können Container über Systemaufrufe mit dem Betriebssystem interagieren. Da sie den Kernel des Host-Betriebssystems gemeinsam nutzen, werden von Containern getätigte Systemaufrufe direkt vom Host-Kernel verarbeitet, sodass Container Vorgänge auf Betriebssystemebene ausführen können, als wären sie native Anwendungen auf dem Host
Kurz gesagt: Container greifen auf das Betriebssystem zu, indem sie den Host-Kernel gemeinsam nutzen, und werden über Namespaces und Kontrollgruppen isoliert und verwaltet. Diese Architektur ermöglicht, dass Container leichtgewichtig, flexibel und effizient sind und die Bereitstellung und Verwaltung von Anwendungen in verschiedenen Umgebungen und Plattformen erleichtert.
Container sind eine Technologie, die es ermöglicht, eine Anwendung und ihre Abhängigkeiten zu kapseln und in einem isolierten Prozess auszuführen. Sie nutzen verschiedene Betriebssystemfunktionen, um eine isolierte Umgebung bereitzustellen, die sich wie ein eigenständiges System verhält, jedoch ohne den Overhead einer vollständigen virtuellen Maschine. Im Folgenden erkläre ich, wie Container auf das zugrunde liegende Betriebssystem zugreifen und wie dieser Zugriff verwaltet wird.
Zunächst ist es wichtig zu verstehen, dass Container mit dem Kernel des Host-Betriebssystems arbeiten. Das bedeutet, dass sie kein eigenes Betriebssystem benötigen; Stattdessen teilen sie sich den Host-Kernel und nutzen dessen Ressourcen und Fähigkeiten. Dies wird durch die Verwendung von Namespaces (Namespaces) und Kontrollgruppen (Cgroups) in Linux-Betriebssystemen erreicht, die zwei Schlüsseltechnologien sind, die die Containerisierung ermöglichen.
Namespaces sind eine Funktion des Kernels, die Kernelressourcen wie das Dateisystem, das Netzwerk und Benutzerprozesse partitioniert, sodass jeder Container seine eigene isolierte Sicht auf das System hat. Dies bedeutet, dass Prozesse innerhalb des Containers nur Ressourcen innerhalb desselben Namensraums sehen und darauf zugreifen können. Beispielsweise kann ein Prozess in einem Container die Prozess-ID (PID) 1 haben, als wäre er der erste Prozess, der auf einem System gestartet wurde, isoliert von anderen Containern und dem Host.
cgroups ergänzen Namespaces, indem sie die Nutzung von Systemressourcen wie CPU, Speicher und Festplatten-E/A auf Container beschränken und isolieren. Dadurch wird sichergestellt, dass jeder Container nur die ihm zugewiesenen Ressourcen nutzen kann, wodurch verhindert wird, dass ein Container die Systemressourcen des Hosts monopolisiert.
Darüber hinaus können Container über Systemaufrufe mit dem Betriebssystem interagieren. Da sie den Kernel des Host-Betriebssystems gemeinsam nutzen, werden von Containern getätigte Systemaufrufe direkt vom Host-Kernel verarbeitet, sodass Container Vorgänge auf Betriebssystemebene ausführen können, als wären sie native Anwendungen auf dem Host
Kurz gesagt: Container greifen auf das Betriebssystem zu, indem sie den Host-Kernel gemeinsam nutzen, und werden über Namespaces und Kontrollgruppen isoliert und verwaltet. Diese Architektur ermöglicht, dass Container leichtgewichtig, flexibel und effizient sind und die Bereitstellung und Verwaltung von Anwendungen in verschiedenen Umgebungen und Plattformen erleichtert.