Ich habe vor kurzem angefangen, Docker zu lernen, und es scheint, dass der größte Teil des schweren Hebens vom Linux-Kernel unter Verwendung von Namespaces und cgroups ausgeführt wird.
Ein paar Dinge, die ich verwirrend finde, sind:
Was ist der Unterschied zwischen einem Namespace und einer cgroup? Welche unterschiedlichen Anwendungsfälle werden angesprochen?
Was hat Docker zusätzlich implementiert, um an Popularität zu gewinnen?
Ich würde gerne wissen, welche Interna diese Funktionen haben und wie sie implementiert sind.
Antworten:
Die richtigen Links für diese beiden Begriffe wurden in PR 14307 festgelegt :
Mit:
Zusamenfassend:
Weitere Informationen finden Sie unter " Anatomie eines Containers: Namespaces, cgroups & Some Filesystem Magic " von Jérôme Petazzoni .
Bei Cgroups werden Ressourcen gemessen und begrenzt:
Namespaces bieten Prozessen eine eigene Sicht auf das System
Mehrere Namespaces:
(die Neuzuordnung des Container-Stammverzeichnisses pro Daemon-Instanz zu einem nicht privilegierten Benutzer wird ausgeführt: PR 12648 : siehe Design )
quelle
chroot
auf einem Namespace? Kannchroot
durch einen Namespace ersetzt werden?chroot
durch einen Namespace ersetzt werden?pivot_root
? ( unix.stackexchange.com/a/456777/7490 ) Siehe auch github.com/vincentbernat/jchrootcgroups begrenzt die Ressourcen, die ein Prozess oder eine Gruppe von Prozessen verwenden kann. Diese Ressourcen können CPU, Speicher, Netzwerk-E / A oder Zugriff auf das Dateisystem sein, während der Namespace die Sichtbarkeit von Prozessgruppen auf den Rest des Systems beschränkt.
Weitere Informationen finden Sie unter Wie Linux-Kernel-Gruppen und -Namensräume moderne Container möglich machten
quelle
Cgroups (Kontrollgruppen) führt die Ressourcenverwaltung durch.
Es bestimmt, wie viele Ressourcen des Hostcomputers Containern zugewiesen werden sollen.
Zum Beispiel: - Wir definieren Ressourcen in der Docker-Compose-Yaml-Datei zum Erstellen von Diensten wie:
In diesem Beispiel bitten wir cgroups explizit, diese Ressourcen einem bestimmten Container zuzuweisen.
Namespaces : Bietet Prozessisolierung, vollständige Isolierung von Containern und separates Dateisystem.
Es gibt 6 Arten von Namespaces:
1. mount ns - für Dateisystem.
2. UTS (Unique Time Sharing) ns-, die nach unterschiedlichen Hostnamen laufender Container sucht
3. IPC ns - Interprozesskommunikation
4. Netzwerk ns- sorgt für unterschiedliche IP-Zuordnung zu verschiedenen Containern
5. PID ns - Prozess-ID-Isolation
6. Benutzer ns - anderer Benutzername (UID)
quelle