Docker und andere Container-Virtualisierer isolieren Prozesse mittels Control-Groups (CGroups) und Namespaces. Die Basis dieser Funktionalität wurde Anfang 2008 in den Linux-Kernel 2.6 integriert und seitdem immer wieder aktualisiert und erweitert. CGroups erlauben das Einschränken von Prozessen hinsichtlich Betriebssystem-Ressourcen sowie CPU- und IO-Nutzung. Zusätzlich gibt es Userspace-Tools in der Bibliothek "libcgroup" für das Management der CGroups, die Accounting und Zustandskontrolle der Prozesse erlauben.
CGroups werden ergänzt durch die Fähigkeiten des Linux-Kernels, Prozessen in Namespaces Zugriff auf Gruppen von Ressourcen zu ermöglichen. Namespaces gibt es beispielsweise für Benutzer und Gruppen, Prozess-IDs, Netzwerkzugriff inklusive IPTables und Routing, Dateisysteme und Verzeichnisstrukturen sowie Interprozesskommunikation. Wie Namespaces grundsätzlich funktionieren, können Sie mit den folgenden Befehlen beispielsweise für PIDs ausprobieren:
$ sudo unshare --pid --fork --mount-proc bash
$ top
Die Ausgabe im Bild zeigt Ihnen, dass bash nun wie sonst init mit der PID 1 läuft und top darunter mit der PID 4. Die Argumente "--fork" und "--mount-proc" stellen sicher, dass die Prozesse bei Nutzung des PID-Namespaces auf dem Host dem unshare-Prozess zugeordnet werden und ein eigenes /proc-Dateisystem erhalten. Letzteres ist wichtig, da sonst das /proc-Dateisystem des Hosts und damit Prozesse außerhalb des Namespaces beeinträchtigt würden.
Innerhalb des Namespaces ist es nun also nicht mehr ohne weiteres möglich, auf die anderen Prozesse zuzugreifen. Da Sie keinen Zugriff auf das /proc-Dateisystem des Hosts haben, können Sie auch mit root-Rechten nicht ohne weiteres auf deren Eigenschaften zugreifen. Andersherum funktioniert das jedoch, so können Sie vom Host
...Der komplette Artikel ist nur für Abonnenten des ADMIN Archiv-Abos verfügbar.