Analyse der Prinzipien von Docker-Containern

Analyse der Prinzipien von Docker-Containern

01 Was ist das Wesen eines Containers?

Heute liegt der Schwerpunkt darauf, klar zu erklären, was Container sind.

Um das Konzept von Containern zu verstehen, müssen wir zunächst wissen, was ein Prozess ist. Wenn wir ein Programm im Linux-Betriebssystem ausführen, kann dieses Programm eine Binärdatei sein. Wenn es aufgerufen wird, wird es zu einer Sammlung von Daten im Computerspeicher, Werten in Registern, Anweisungen im Stapel und verschiedenen Gerätestatusinformationen. Eine solche Kombination von Computerausführungsumgebungen wird als Prozess bezeichnet.

Ein Container stellt eine „Grenze“ für den Prozess dar. Einfach ausgedrückt: Er „umhüllt“ den Prozess. Im Wesentlichen erreicht er diese „Umhüllungs“-Aktion, indem er die dynamische Leistung des Prozesses einschränkt und ändert.

Es ist nicht schwer zu erkennen, dass ein Container ein spezieller Prozess mit „Grenzen“ ist.

Schauen wir uns nun die Prozesseigenschaften eines MySQL-Containers an.

1. Überprüfen Sie zunächst den ContainerID-Wert des MySQL-Containers auf unserem Computer wie folgt:

[root@VM-16-13-centos-Dienst]# docker ps | grep mysql
4784586d01e0 mysql „docker-entrypoint…“ vor 3 Monaten Vor 3 Monaten k8s_mysql.16d54d16_mysql-pd7jr_default_0032bce0-2b0f-11eb-98ad-5254002dbd85_d775f414

Wie Sie sehen können, ist der Wert von containerID 4784586d01e0

2. Zuerst rufen wir einen Container über den Befehl docker exec auf (die Einführung dieses Befehls wird weiter unten beschrieben) und verwenden den Befehl ps -ef, um den Prozess anzuzeigen:

[root@VM-16-13-centos-Dienst]# docker exec -it 4784586d01e0 bash
root@mysql-pd7jr:/# ps -ef
UID PID PPID C STIME TTY ZEIT CMD
mysql 1 0 0 2020 ? 03:20:20 mysqld
Wurzel 882 0 0 09:42 ? 00:00:00 bash
root 888 882 0 09:46 ? 00:00:00 ps -ef

Es kann festgestellt werden, dass die Prozessnummer des mysqld-Prozesses 1 ist.

Hier möchte ich noch etwas sagen:

1. docker exec -it 4784586d01e0 bash

Diese Anweisung teilt dem Container mit, dass ich diesen Container betreten und eine Bash-Anweisung ausführen möchte.

2. Wenn Ihr Docker den PS-Befehl nicht unterstützt, müssen Sie den PS-Befehl mit dem folgenden Befehl installieren:

apt-get update & apt-get install procps

Anschließend verlassen wir den Container und prüfen noch einmal die Prozess-ID des mysqld-Prozesses:

[root@VM-16-13-centos-Dienst]# ps -ef|grep mysql
root 5152 5059 0 2020 Punkte/5 00:00:00 mysql -uroot -px xxxx
root 13644 24879 0 2020 Punkte/4 00:00:00 mysql -uroot -px xxxx
polkitd 18853 18837 0 2020 ? 03:20:25 mysqld

Es ergibt sich die Vorgangsnummer 18853.

Wir können daraus schließen, dass die Ergebnisse des mysqld-Prozesses, der innerhalb und außerhalb des Containers ausgeführt wird, unterschiedlich sind.

Warum passiert das?

Der Kern dabei besteht darin, dass die Prozesse im Docker-Container in einer neuen Umgebung isoliert werden, sodass diese Prozesse nur die neu berechnete PID-Nummer sehen können. Wie bereits erwähnt, „verpackt“ Docker im Wesentlichen einen Prozess auf einer physischen Maschine, indem es einige der Dynamiken des Prozesses einschränkt und ändert. Das Phänomen, das wir sehen, ist das Ergebnis der „Verpackung“.

Wie also schränkt Linux die physischen Maschinenprozesse ein und ändert sie? Hier stellen wir neue Konzepte vor:

Für die meisten Linux-Container wie Docker ist die Cgroups-Technologie von Linux das wichtigste Mittel zum Erstellen von Einschränkungen.
Zur Änderung der Prozessansicht wird vor allem die Namespace-Technologie eingesetzt.

02 Einführung in die Cgroup-Technologie und Namespace-Technologie

Die Namespace-Technologie wird hauptsächlich verwendet, um die Ressourcenisolierung für Container bereitzustellen. Die Methode zum Implementieren der Namespace-Funktion ist relativ einfach. Wenn wir einen Linux-Prozess erstellen, führt das System normalerweise einen Klonbefehl aus, ähnlich wie:

int pid = Klon (Hauptfunktion, Stapelgröße, SIGCHLD, NULL);

Es gibt die PID-Nummer des von uns erstellten Prozesses zurück.

Die Namespace-Technologie fügt einen zusätzlichen Parameter hinzu, wenn Linux einen Prozess erstellt. Dieser neue Parameter wird vorübergehend newid genannt. Auf diese Weise ist die PID-Nummer des Prozesses, die wir im Container sehen, diese newid. Wir nennen diesen Namespace PID-Namespace.

Zusätzlich zu diesem Namespace gibt es weitere, wie z. B. Mount-Namespace und Network-Namespace, die verwendet werden, um Mount-Punkte bzw. Netzwerke zu isolieren.

Natürlich können nicht alle Ressourcen in Namespaces eingeteilt werden. Beispielsweise werden Zeit und Betriebssystemkernel von allen Containern auf einem Server gemeinsam genutzt.

Sobald der Container ausgeführt wird, müssen wir die von ihm verwendeten Maschinenressourcen wie Festplatte, Speicher, CPU usw. kontrollieren. Andernfalls kann es sein, dass die Ressourcen der physischen Maschine erschöpft werden und einige Systemprozesse abstürzen. Die Cgroup-Technologie wurde speziell dafür entwickelt, die Ressourcen für Linux-Prozesse zu begrenzen. Der vollständige Name lautet „Linux Control Group“ und ist in Form von Dateien und Verzeichnissen im Verzeichnis /sys/fs/cgroups gespeichert, und zwar wie folgt:

[root@VM-16-13-centos-Dienst]# ls -l /sys/fs/cgroup/
gesamt 0
drwxr-xr-x 4 root root 0 20. November 11:38 blkio
lrwxrwxrwx 1 root root 11. November 20 11:38 cpu -> cpu,cpuacct
lrwxrwxrwx 1 root root 11. November 20 11:38 cpuacct -> cpu,cpuacct
drwxr-xr-x 5 root root 0 20. November 11:38 cpu,cpuacct
drwxr-xr-x 3 root root 0 20. November 11:38 cpuset
drwxr-xr-x 4 root root 0 Nov 20 11:38 Geräte
drwxr-xr-x 3 root root 0 Nov 20 11:38 Gefrierschrank
drwxr-xr-x 3 root root 0 20. November 11:38 hugetlb
drwxr-xr-x 5 root root 0 Nov 20 11:38 Speicher
lrwxrwxrwx 1 root root 16. November 20 11:38 net_cls -> net_cls,net_prio
drwxr-xr-x 3 root root 0 20. November 11:38 net_cls,net_prio
lrwxrwxrwx 1 root root 16. November 20 11:38 net_prio -> net_cls,net_prio
drwxr-xr-x 3 root root 0 20. November 11:38 perf_event
drwxr-xr-x 4 root root 0 20. Nov. 11:38 pids
drwxr-xr-x 4 root root 0 20. November 11:38 systemd

In verschiedenen Dateiverzeichnissen werden eingeschränkte Werte für unterschiedliche Ressourcentypen gespeichert. Die am häufigsten verwendeten sind:

blkio: E/A-Grenzwerte für Blockgeräte festlegen, die im Allgemeinen für Geräte wie Festplatten verwendet werden

cpuset: Weisen Sie Prozessen separate CPU-Kerne und entsprechende Speicherknoten zu.

Speicher: Legt eine Begrenzung der Speichernutzung für den Prozess fest.

Wenn wir den Container über den Befehl starten, trägt das Betriebssystem die dem Docker-Prozess entsprechende PID in die Datei der entsprechenden Steuergruppe ein und steuert so den vom aktuellen Prozess verwendeten CPU-Ressourcenwert.

03 Die Beziehung zwischen Containern, Bildern und Repositories

Docker umfasst drei grundlegende Konzepte:

  • Bild
  • Container
  • Projektarchiv

Diese drei Teile bilden den gesamten Lebenszyklus von Docker, wie in der obigen Abbildung dargestellt.

Das Docker-Image enthält ein Dateisystem, ähnlich einem virtuellen Maschinenimage, und ist eine schreibgeschützte Vorlage. Dieses Dateisystem wird auch häufig als RootFS bezeichnet und enthält normalerweise eine Reihe von Verzeichnissen wie Bin, etc., Sys und Usr.

Der Docker-Container wird aus dem Image instanziiert, was dem objektorientierten Konzept, das wir gelernt haben, sehr ähnlich ist. Wir können uns das Image als Klasse und den Container als Objekt vorstellen, nachdem die Klasse instanziiert wurde. Dadurch ist die Beziehung zwischen dem Image und dem Container sehr leicht zu verstehen.

Docker-Repository: Ähnlich wie das Code-Repository ist es der Ort, an dem Docker Bilddateien zentral speichert

Diese Beziehung kann klarer wie folgt ausgedrückt werden:

Oben finden Sie eine ausführliche Erläuterung des Konzepts von Docker-Containern. Weitere Informationen zum Konzept von Docker-Containern finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Docker-Tutorial: Grundlegende Konzepte (Image, Container, Warehouse) ausführlich erklärt
  • Detaillierte Erläuterung der Konzepte und Anwendungen von Docker-Images, Containern und Warehouses
  • Docker: Tiefgreifendes Verständnis der Konzepte von Images, Containern, Warehouses usw.
  • Tiefgreifendes Verständnis von Docker (Grundkonzepte von Docker-Images, Containern und Warehouses)
  • Prinzip der Docker-Containerüberwachung und Anweisungen zur Installation und Verwendung von cAdvisor
  • Analyse der Prinzipien und der Nutzung von Docker-Container-Datenvolumes
  • Prinzip und Anwendung der Speicherüberwachung von Docker-Containern

<<:  Lösen Sie das Problem der inkonsistenten MySQL-Speicherzeit

>>:  Drei Möglichkeiten zum Parsen von QR-Codes mit Javascript

Artikel empfehlen

Ein genauerer Blick auf die Unterschiede zwischen Link und @import

Es gibt drei Hauptmethoden, CSS auf einer Seite zu...

Einige Erfahrungen in der Selbstkultivierung von Künstlern

Da der Einfluss des Unternehmens wächst und seine...

Zusammenfassung der Erfahrungen mit der Verwendung des Div-Box-Modells

Berechnung des Boxmodells <br />Rand + Rahme...

Vue.js-Textfeld mit Dropdown-Komponente

Ein Textfeld mit Dropdown-Liste ermöglicht es Ben...

Ein kurzer Überblick über CSS3-Pseudoklassenselektoren

Vorwort Wenn CSS die Grundfertigkeit der Front-En...

Schritte zum Verpacken und Freigeben des Vue-Projekts

Inhaltsverzeichnis 1. Übergang von der Entwicklun...

Wissenspunkte zum Prinzip der MySQL-Parallelitätskontrolle

Mysql ist eine gängige relationale Open-Source-Da...

Vue-Grundlagen MVVM, Vorlagensyntax und Datenbindung

Inhaltsverzeichnis 1. Vue-Übersicht Offizielle Vu...

Lösen Sie das Installationsproblem von Linux Tensorflow2.0

conda aktualisieren conda pip installieren tf-nig...

JavaScript Canvas realisiert farbenfrohen Sonnenhalo-Effekt

In diesem Artikelbeispiel wird der spezifische Co...