Durch Docker isolierte Ressourcen: 2. Netzwerk; 4. Benutzer und Benutzergruppen für Berechtigungen; 6. Hostname und Domänenname; , usw.
Die Betriebsumgebung dieses Tutorials: Linux5.9.8-System, Docker-1.13.1-Version, Dell G3-Computer.
Das Wesen eines Docker-Containers ist ein Prozess auf dem Host.
Docker implementiert Ressourcenisolation durch Namespace, Ressourcenbegrenzung durch cgroups und effiziente Dateioperationen durch *Copy-on-Write*.
Der Namespace-Mechanismus bietet eine Lösung zur Ressourcenisolation.
PID, IPC, Netzwerk und andere Systemressourcen sind nicht mehr global, sondern gehören zu einem bestimmten Namespace.
Die Ressourcen unter jedem Namespace sind transparent und für die Ressourcen unter anderen Namespaces unsichtbar.
Einer der Hauptzwecke des Linux-Kernels, der den Namespace implementiert, besteht darin, leichtgewichtige Virtualisierungsdienste (Container) zu implementieren, die Änderungen untereinander wahrnehmen können und nichts über externe Prozesse wissen, um Unabhängigkeit und Isolation zu erreichen. Was kann durch den Namespace isoliert werden? isoliert werden
Die Kommunikation zwischen Prozessen muss ebenfalls isoliert werden
Für Berechtigungen müssen Benutzer und Benutzergruppen ebenfalls isoliert werden
Die PID innerhalb des Prozesses muss ebenfalls von der PID in isoliert werden der Host
Der Container muss auch einen eigenen Hostnamen haben
Mit der oben genannten Isolierung glauben wir, dass ein Container vom Host und anderen Containern isoliert werden kann.
IPC | .Semaphore, Nachrichtenwarteschlange und gemeinsamer Speicher | |
---|---|---|
Netzwerk | Netzwerkgeräte, Netzwerkstacks, Ports usw. | CLONE_NEWNET |
PID | Prozessnummer | CLONE_NEWPID |
Mount | Mountpunkt (Dateisystem) | CLONE_NEWNS |
Benutzer | Benutzer und Benutzergruppen | CLONE_NEWUSER |
UTS-Namespace UTS-Namespace (UNIX Time-Sharing System) bietet die Isolierung von Host- und Domänennamen, sodass jeder Docker-Container einen unabhängigen Hostnamen und Domänennamen haben und als unabhängiger Knoten im Netzwerk betrachtet werden kann . und nicht ein Prozess auf dem Host-Computer. IPC-Namespace Zu den von Inter-Process Communication (IPC) entwickelten IPC-Ressourcen gehören gemeinsame Semaphoren, Nachrichtenwarteschlangen und gemeinsam genutzter Speicher. PID-Namespace Die Isolierung von PID-Namespaces ist sehr praktisch. Sie nummeriert die Prozess-PID neu, dh Prozesse unter zwei verschiedenen Namespaces können dieselbe PID haben und jeder PID-Namespace verfügt über ein eigenes Zählprogramm. Mount-Namespace Mount-Namespace bietet Unterstützung für die Isolierung von Dateisystemen durch die Isolierung von Dateisystem-Mount-Punkten. Netzwerk-Namespace Netzwerk-Namespace bietet hauptsächlich die Isolierung von Netzwerkressourcen, einschließlich Netzwerkausrüstung, IPv4, IPv6-Protokollstapel, IP-Routing-Tabelle, Firewall, /proc/net-Verzeichnis, /sys/class/net-Verzeichnis, Suite Empfangswörter usw. Benutzernamespace Benutzernamespace isoliert installationsbezogene Bezeichner und Attribute Namespace-Operationen Namespace-API enthält clone() setns() unshare() und Teile unter /proc-Datei int clone(int(*child_func)(void *),void *child_stack,int flags, void *arg); Nach dem Login kopieren clone() ist eine allgemeinere Implementierung des Linux-Systemaufrufs fork(), der über Flags steuern kann, wie viele Funktionen verwendet werden. Es gibt mehr als 20 Arten von CLONE_*-Flags, die alle Aspekte des Klonvorgangs steuern. child_func übergibt die Hauptfunktion des Programms, das vom untergeordneten Prozess ausgeführt wird. child_stack übergibt den vom untergeordneten Prozess verwendeten Stapelspeicher.
ls -l /proc/10/ns Nach dem Login kopieren Die Namespace-Nummer in eckigen Klammern Wenn die Namespace-Nummern, auf die zwei Prozesse verweisen, gleich sind, bedeutet dies, dass sie sich im selben Namespace befinden Der Zweck des Festlegens des Links besteht darin, dass auch wenn alle Prozesse unter dem Namespace haben Wenn es endet, wird dieser Namespace immer existieren und nachfolgende Prozesse können beitreten. Das Mounten der Verzeichnisdatei /proc/[pid]/ns mit der Methode --bind kann auch als Link fungieren Ausführen des Befehls Der Befehl erfordert die Verwendung von setns(). touch ~/utsmount --bind /proc/10/ns/uts ~/uts Nach dem Login kopieren
durch unshare( ) Namespace-Isolierung für den ursprünglichen Prozess Unshare ist dem Klonen sehr ähnlich, es muss kein neuer Prozess gestartet werden und kann für den ursprünglichen Prozess verwendet werden. Docker verwendet nicht den Systemaufruf fork gehört nicht zur Namespace-API cgroups ist ein vom Linux-Kernel bereitgestellter Mechanismus, der eine Reihe von Systemaufgaben und deren Unteraufgaben je nach Bedarf in verschiedene hierarchische Gruppen integrieren (oder trennen) kann und so eine Systemressourcenverwaltung ermöglicht einheitlicher Rahmen. cgroups ist ein weiteres leistungsstarkes Kernel-Tool unter Linux. Mit cgroups können Sie nicht nur die nach Namespace isolierten Ressourcen begrenzen, sondern auch Gewichtungen für Ressourcen festlegen, die Nutzung berechnen, den Start und Stopp von Aufgaben (Prozessen oder Landkreisen) steuern usw. Um es ganz klar auszudrücken: Cgroups können die von Aufgabengruppen verwendeten physischen Ressourcen (einschließlich CPU, Speicher, E/A usw.) begrenzen und aufzeichnen. Dies ist der Eckpfeiler beim Aufbau einer Reihe von Virtualisierungsverwaltungstools wie Docker. Die Rolle von cgroups cgroups bietet eine einheitliche Schnittstelle für die Ressourcenverwaltung auf verschiedenen Benutzerebenen: Von der individuellen Ressourcensteuerung bis hin zur Virtualisierung auf Betriebssystemebene bietet cgroups vier Hauptfunktionen. |
Das obige ist der detaillierte Inhalt vonWelche Ressourcen Docker isoliert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!