Detaillierte Erläuterung der Anwendung der Docker-Basistechnologie Namespace Cgroup

Detaillierte Erläuterung der Anwendung der Docker-Basistechnologie Namespace Cgroup

Docker zugrunde liegende Technologie:

Die beiden Kerntechnologien an der Basis von Docker sind Namespaces und Kontrollgruppen.

Namespace: Dies ist die Kerntechnologie der Containervirtualisierung und wird verwendet, um Container zu isolieren und Konflikte zwischen Containern zu lösen.

Dies wird hauptsächlich durch die folgenden sechs Isolationstechnologien erreicht:
Es gibt zwei Pseudodateisysteme: /proc und /sys/

  • UTS: Ermöglicht jedem Container, einen unabhängigen Hostnamen und Domänennamen zu haben, sodass er als unabhängiger Knoten im Netzwerk und nicht als Prozess auf dem Host betrachtet werden kann.
  • IPC: Die Prozessinteraktion im Container übernimmt weiterhin die übliche Methode der Interprozessinteraktion von Linux, einschließlich gemeinsamer Semaphoren, Nachrichtenwarteschlangen und gemeinsam genutztem Speicher. Die Interaktion zwischen Containerprozessen ist eigentlich die Interaktion zwischen Prozessen mit derselben PID auf dem Host.
  • PID: Prozesse verschiedener Benutzer werden durch PID-Namespaces isoliert und dieselbe PID kann in verschiedenen Namespaces existieren. Der übergeordnete Prozess aller LXC-Prozesse (Linux-Container) in Docker ist der Docker-Prozess, und jeder LXC-Prozess hat einen anderen Namespace.
  • NET: Prozesse verschiedener Benutzer werden durch PID-Namespace isoliert und dieselbe PID kann in verschiedenen Namespaces existieren. Der übergeordnete Prozess aller LXC-Prozesse in Docker ist der Docker-Prozess, und jeder LXC-Prozess hat einen anderen Namespace.
  • MNT: Der Einhängepunkt des Dateisystems.
  • USRE: Jeder Container kann unterschiedliche Benutzer- und Gruppen-IDs haben, was bedeutet, dass Sie zum Ausführen des Programms den Benutzer innerhalb des Containers anstelle des Benutzers auf dem Host verwenden können.

Solange diese sechs Elemente entkoppelt sind, betrachtet der Computer sie als zwei verschiedene Systeme, auch wenn andere Systemressourcen gemeinsam genutzt werden.

cgroup (steuert die Ressourcennutzung von Programmen)

Der Hauptzweck der Implementierung von cgroup besteht darin, eine einheitliche Schnittstelle für die Ressourcenverwaltung auf verschiedenen Benutzerebenen bereitzustellen. Von der Ressourcenkontrolle eines einzelnen Prozesses bis zur Virtualisierung auf Betriebssystemebene.

Die Rolle der Cgroup:

1) Ressourcenbeschränkung: cgroup kann die Gesamtmenge der von der Prozessgruppe verwendeten Ressourcen begrenzen.
2) Prioritätszuweisung: Die Anzahl der zugewiesenen CPU-Zeitscheiben und der Festplatten-E/A-Bandbreite entspricht tatsächlich der Steuerung der Priorität des Prozessvorgangs.
3) Ressourcenstatistiken: Cgroup kann die Nutzung von Systemressourcen zählen. Wie beispielsweise CPU-Auslastungszeit, Speicherauslastung usw.
Verfügbar für Pay-as-you-go-Abrechnung.
4) Prozesssteuerung: Sie können Prozessgruppen anhalten, fortsetzen und andere Vorgänge daran ausführen.

Anwendung von cgroup:

1) Einschränkungen des Speichers und der Swap-Partition:

Der Container besteht aus zwei Teilen: physischem Speicher und Swap

In Docker können Sie die Nutzung des Containerspeichers über Parameter steuern:

-m oder --memory: Speichernutzungslimit festlegen

--memory-swap: Legt das Nutzungslimit für Swap (Swap-Partition) fest.

// Basierend auf dem CentOS-Image beträgt das Speicherlimit 200 MB und der Speicher der Swap-Partition 300 MB

[root@sqm-docker01 ~]# docker run -it -m 200M --memory-swap 300M centos

Geben Sie den Container ein, um den begrenzten Speicher anzuzeigen:

[root@05a0be7b870a /]# cat /sys/fs/cgroup/memory/memory.limit_in_bytes 
209715200 #Zeigt Bytes an [root@05a0be7b870a /]# cat /sys/fs/cgroup/memory/memory.memsw.limit_in_bytes 
314572800

2) CPU-Einschränkungen für Container:

Verwenden Sie -c oder --cpu-shares, um das CPU-Gewicht des Containerexperiments festzulegen. Wenn nicht festgelegt, ist der Standardwert 1024.

// Basierend auf dem CentOS-Image führen Sie einen Container mit dem Namen ContainerB mit einem CPU-Gewichtslimit von 512 aus:
[root@sqm-docker01 ~]# docker run -it --name containerB -c 512 centos
[root@b2cf9f28ce1d /]# cat /sys/fs/cgroup/cpu/cpu.shares 
512

3) Begrenzen Sie den Block-E/A des Containers (Lesen und Schreiben auf der Festplatte):

bps: Die pro Sekunde gelesene und geschriebene Datenmenge. Byte pro Sekunde
iops: Die Anzahl der E/A-Vorgänge pro Sekunde. io pro Sekunde

--device-read-bps: Stellen Sie die BPS des Lesegeräts ein
--device-write-bps: Legen Sie die BPS für das Schreiben auf das Gerät fest

--device-read-iops: Legt die IOPS des Lesegeräts fest.
--device-write-iops: Legen Sie die IOPS für das Schreiben auf das Gerät fest.

//Erstellen Sie einen Container mit dem Namen „testA“ und begrenzen Sie die Anzahl der Festplattenschreibvorgänge pro Sekunde auf 30 MB.
[root@sqm-docker01 ~]# docker run -it --name testA --device-write-bps /dev/sda:30MB centos

Daten zum Testen schreiben:

Parametererklärung:
infile=aus /dev/zero extrahieren
outfile=Namen anpassen
bs=1M Dateigröße ist 1M
count=800 bedeutet, insgesamt 800 Mal schreiben.
oflag=direct: Wird verwendet, um den Verzeichnis-E/A-Modus zum Schreiben von Dateien anzugeben, sodass --device-write-bps wirksam wird.

Es lässt sich feststellen, dass pro Sekunde 80 MB geschrieben werden, was etwa 26 Sekunden dauert.

Beim normalen Schreiben auf die Festplatte:

Oben sind alle Wissenspunkte zur Docker-Basistechnologie, die dieses Mal vorgestellt werden. Vielen Dank für Ihr Lernen und Ihre Unterstützung für 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • Detaillierte Erklärung von Cgroup, dem Kernprinzip von Docker
  • Detaillierte Erläuterung der Docker-Cgroup-Ressourcenüberwachung
  • Detaillierte Erklärung zur Verwendung von cgroups zur Begrenzung der Ressourcennutzung in Docker-Containern
  • Dieser Artikel hilft Ihnen, die spezifische Verwendung von cgroup in Docker gründlich zu verstehen

<<:  Verbindung zum lokalen MySQL über Socket-Lösung „/tmp/mysql.sock“ nicht möglich

>>:  MySQL-Code zur Implementierung der Sequenzfunktion

Artikel empfehlen

Detaillierte Erklärung der Eigenschaften und Funktionen von Vuex

Inhaltsverzeichnis Was ist Vuex? Fünf Eigenschaft...

Detaillierte Erklärung der KeepAlive-Verwendung in der Vue-Frontend-Entwicklung

Inhaltsverzeichnis Vorwort Keep-Avlive-Hook-Funkt...

Natives JS zur Implementierung einer Echtzeituhr

Teilen Sie einen Echtzeituhreffekt, der mit nativ...

Eine kurze Erläuterung zum Anpassen der Hostdatei in Docker

Inhaltsverzeichnis 1. Befehl 2. docker-compose.ym...

Detaillierte Erläuterung des Apache SkyWalking-Alarmkonfigurationshandbuchs

Apache SkyWalking Apache SkyWalking ist ein Tool ...

Warum sollte CSS im Head-Tag platziert werden?

Denken Sie darüber nach: Warum sollte css im head...

Detaillierte Erklärung zur Erstellung von Schießspielen mit CocosCreator

Inhaltsverzeichnis Szeneneinstellung Spielressour...

So verwenden Sie das JQuery-Editor-Plugin tinyMCE

Ändern Sie die vereinfachte Dateigröße und laden ...

CSS3 Flexible Box Flex, um ein dreispaltiges Layout zu erreichen

Wie der Titel schon sagt: Die Höhe ist bekannt, d...

Analysieren Sie das Arbeitsprinzip von Tomcat

SpringBoot ist wie eine riesige Python, die sich ...