Heim >Betrieb und Instandhaltung >Docker >Was sind die beiden Kerntechnologien von Docker?
Zwei Kerntechnologien: 1. „Linux-Namespaces“, eine Kapselung und Isolierung globaler Systemressourcen, die es Prozessen in verschiedenen Namespaces ermöglichen, über unabhängige globale Systemressourcen zu verfügen. 2. „Kontrollgruppen“, die den Host-Computer physisch isolieren können Ressourcen, um Ressourcenquoten und -messungen umzusetzen.
Die Betriebsumgebung dieses Tutorials: Linux5.9.8-System, Docker-1.13.1-Version, Dell G3-Computer.
Docker ist ein Cloud-Open-Source-Projekt, das auf der Go-Sprache basiert.
Docker löst das Problem der Konsistenz zwischen Entwicklungsumgebung, Testumgebung und Produktionsumgebung durch Virtualisierungstechnologie und ermöglicht es der App und ihrer Betriebsumgebung, den Zweck „Jede APP überall erstellen, versenden und ausführen“ zu erreichen. Container-Virtualisierungstechnologie, die eine kontinuierliche Integration sowie die Gesamtfreigabe und -erweiterung erleichtert.
Die beiden Kerntechnologien von Docker: Namespaces und Controller-Gruppen.
1. Isolation: Linux-Namespace (ns)
Linux-Namespaces sind eine Art Kapselung und Isolierung globaler Systemressourcen, sodass Prozesse in verschiedenen Namespaces über unabhängige globale Systemressourcen verfügen und nur die Systemressourcen geändert werden wirken sich auf Prozesse im aktuellen Namespace aus und haben keine Auswirkungen auf Prozesse in anderen Namespaces. Zu diesen Ressourcen gehören: Prozessbäume, Netzwerkschnittstellen, Bereitstellungspunkte, Kommunikation zwischen Prozessen und andere Ressourcen. Prozesse im selben Namensraum können die Änderungen des anderen wahrnehmen und wissen nichts über externe Prozesse. Dies kann dem Prozess im Container die Illusion geben, dass er sich in einem unabhängigen System befindet, wodurch der Zweck der Isolation erreicht wird.
Jede Benutzerinstanz ist voneinander isoliert und beeinflusst sich nicht gegenseitig. Die von der allgemeinen Hardware-Virtualisierungsmethode angegebene Methode ist VM, während die von LXC angegebene Methode ein Container ist und genauer gesagt ein Kernel-Namespace ist. Darunter enthalten pid, net, ipc, mnt, uts, user und andere Namespaces den Prozess, das Netzwerk, die Nachricht, das Dateisystem und UTS („UNIX Time-Sharing System“) des Containers ") und der Benutzerbereich ist isoliert.
1), PID-Namespace
Die Prozesse verschiedener Benutzer werden durch den PID-Namespace isoliert, und verschiedene Namespaces können dieselbe PID haben. Der übergeordnete Prozess aller LXC-Prozesse in Docker ist der Docker-Prozess, und jeder LXC-Prozess hat einen anderen Namespace. Da eine Verschachtelung zulässig ist, kann Docker gleichzeitig problemlos in Docker implementiert werden.
2), Netz-Namespace
Mit dem PID-Namespace können die PIDs in jedem Namespace voneinander isoliert werden, aber der Netzwerkport teilt sich weiterhin den Host-Port. Die Netzwerkisolation wird durch den Net-Namespace erreicht. Jeder Net-Namespace verfügt über unabhängige Netzwerkgeräte, IP-Adressen, IP-Routing-Tabellen und /proc/net-Verzeichnisse. Auf diese Weise kann das Netzwerk jedes Containers isoliert werden. Standardmäßig verwendet Docker Veth, um die virtuelle Netzwerkkarte im Container mit einer Docker-Brücke zu verbinden: docker0 auf dem Host.
3) Die Prozessinteraktion im IPC-Namespace
Container verwendet weiterhin die übliche Linux-Interprozess-Interaktionsmethode (Interprozesskommunikation – IPC), einschließlich gemeinsamer Semaphoren, Nachrichtenwarteschlangen und gemeinsam genutztem Speicher. Im Gegensatz zu einer VM handelt es sich bei der Interprozessinteraktion eines Containers jedoch tatsächlich um eine Interprozessinteraktion mit demselben PID-Namespace auf dem Host. Daher müssen bei der Beantragung von IPC-Ressourcen Namespaceinformationen hinzugefügt werden – jede IPC-Ressource verfügt über eine eindeutige 32 -Bit-ID.
4), mnt-Namespace
ähnelt chroot und platziert einen Prozess in einem bestimmten Verzeichnis zur Ausführung. Mit dem mnt-Namespace können Prozesse in verschiedenen Namespaces unterschiedliche Dateistrukturen sehen, sodass die Dateiverzeichnisse, die Prozesse in jedem Namespace sehen, isoliert sind. Anders als bei Chroot enthalten die Informationen in /proc/mounts des Containers in jedem Namespace nur den Mountpunkt des Namespace.
5), UTS-Namespace
Der UTS-Namespace („UNIX Time-Sharing System“) ermöglicht es jedem Container, einen unabhängigen Hostnamen und Domänennamen zu haben, sodass er als unabhängiger Knoten im Netzwerk und nicht als Knoten betrachtet werden kann Hosten Sie einen Prozess auf.
6), Benutzernamespace
Jeder Container kann unterschiedliche Benutzer- und Gruppen-IDs haben, was bedeutet, dass der Benutzer im Container anstelle des Benutzers auf dem Host zum Ausführen des Programms verwendet werden kann.
2. Ressourcenbeschränkungen: Kontrollgruppen (cgroups)
Der Namespace isoliert das Dateisystem, das Netzwerk und die Prozesse vom Host-Computer für den neu erstellten Prozess, aber der Namespace kann dies nicht für uns tun Isolierung. Wenn Sie jedoch mehrere Container auf demselben Computer ausführen, die nichts voneinander und vom Host-Computer wissen, belegen diese Container gemeinsam die physischen Ressourcen des Host-Computers.
Kontrollgruppen (kurz CGroups) sind in der Lage, physische Ressourcen auf dem Host-Computer zu isolieren, wie z. B. CPU, Speicher, Festplatten-E/A und Netzwerkbandbreite. Jede CGroup ist eine Gruppe von Prozessen, die durch dieselben Standards und Parameter eingeschränkt sind. Zwischen verschiedenen CGroups besteht eine hierarchische Beziehung, was bedeutet, dass sie einige Standards und Parameter zur Einschränkung der Ressourcennutzung von ihrer übergeordneten Klasse erben können.
cgroups implementiert Quoten und die Messung von Ressourcen. Die Verwendung von cgroups ist sehr einfach. Erstellen Sie einen neuen Ordner im Verzeichnis /cgroup, um eine neue Aufgabendatei in diesem Ordner zu erstellen und die PID in die Datei zu schreiben . Ressourcenkontrolle. Gruppen können die Ressourcen der neun Subsysteme blkio, cpu, cpuacct, cpuset, devices, freezer, memory, net_cls und ns begrenzen. Im Folgenden finden Sie eine detaillierte Beschreibung jedes Subsystems:
blkio Diese Subsystemeinstellungen begrenzen jeden Block Eingabe- und Ausgabesteuerung des Geräts. Zum Beispiel: Diskette, CD, USB usw.
cpu Dieses Subsystem verwendet den Scheduler, um CPU-Zugriff auf Kontrollgruppenaufgaben bereitzustellen.
cpuacct generiert CPU-Ressourcenberichte für Cgroup-Aufgaben.
cpuset Wenn es sich um eine Multi-Core-CPU handelt, weist dieses Subsystem separate CPU und Speicher für Cgroup-Aufgaben zu.
Geräte Erlauben oder verweigern Sie den Zugriff auf Geräte durch Gruppenaufgaben.
freezer pausiert und setzt die Gruppenaufgaben fort.
memory legt das Speicherlimit jeder Kontrollgruppe fest und generiert Speicherressourcenberichte.
net_cls markiert jedes Netzwerkpaket zur Vereinfachung der Gruppensteuerung.
ns-Namespace-Subsystem.
Es gibt auch eine gewisse Beziehung zwischen den oben genannten neun Subsystemen. Einzelheiten finden Sie in der offiziellen Dokumentation.
Empfohlenes Lernen: „Docker-Video-Tutorial“
Das obige ist der detaillierte Inhalt vonWas sind die beiden Kerntechnologien von Docker?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!