[Cloud Native] Ausführliche Erklärung von Docker (2): Docker-Architektur und Arbeitsprinzip

Ausführliche Erklärung von Docker (2): Docker-Architektur und Funktionsprinzip

Docker ist in die Docker-Engine (Server-Daemon-Prozess) und Client-Tools zur Laufzeit unterteilt . Wir verwenden jeden Tag verschiedene Docker-Befehle . Tatsächlich verwenden wir Client-Tools , um mit der Docker-Engine zu interagieren .
Fügen Sie hier eine Bildbeschreibung ein

1. Client-Client

Docker ist ein Client-Server-Architekturprogramm (C/S). Der Docker-Client muss lediglich eine Anfrage an den Docker-Server oder -Daemon stellen, und der Server oder Daemon erledigt die gesamte Arbeit und gibt das Ergebnis zurück. Docker bietet ein Befehlszeilentool Docker und eine Reihe von RESTful-APIs. Sie können den Docker-Daemon und den Client auf demselben Host ausführen oder von einem lokalen Docker-Client aus eine Verbindung zu einem Remote-Docker-Daemon herstellen, der auf einem anderen Host ausgeführt wird.

2. Host-Host (Docker-Engine)

Eine physische oder virtuelle Maschine, die den Docker-Daemon und die Container ausführt.

3. Spiegelbild

Was ist ein Docker-Image? Vereinfacht ausgedrückt ist ein Docker-Image ein Linux-Dateisystem (Root FileSystem), das Programme und entsprechende Daten enthält, die auf dem Linux-Kernel ausgeführt werden können.

Starten Sie einen Container über einen Spiegel. Ein Spiegel ist ein ausführbares Paket, das alles enthält, was zum Ausführen der Anwendung erforderlich ist: einschließlich Code, Laufzeit, Bibliotheken, Umgebungsvariablen und Konfigurationsdateien usw.

Docker packt die App-Datei in einen Spiegel und verwendet eine Speichertechnologie ähnlich mehreren Snapshots, die Folgendes erreichen kann:

  • Mehrere Apps können dasselbe zugrunde liegende Image (das ursprüngliche Betriebssystem-Image) gemeinsam nutzen.
  • E/A-Vorgang und Isolierung von Bilddateien während der App-Laufzeit;
  • Durch das Mounten von Verzeichnissen oder Volumes mit unterschiedlichen Konfigurations-/Datendateien kann ein einziges App-Image zum Ausführen unzähliger Container verschiedener Unternehmen verwendet werden.

4. ContainerContainer

Die Beziehung zwischen dem Bild (Image) und dem Container (Container) ähnelt der Klasse und Instanz in der objektorientierten Programmierung. Das Bild ist eine statische Definition und der Container ist die Entität der Bildlaufzeit. Container können erstellt, gestartet, gestoppt, gelöscht, pausiert usw. werden.

5. Spiegelschichtung

Docker unterstützt das Erstellen neuer Images durch Erweitern vorhandener Images. Tatsächlich 99 % 99\% des Docker Hub99 % der Images werden durch die Installation und Konfiguration der erforderlichen Software im Basis-Image erstellt.

Fügen Sie hier eine Bildbeschreibung ein
Wie aus der obigen Abbildung ersichtlich ist, wird das neue Bild Schicht für Schicht aus dem Basisbild generiert. Bei jeder Installation einer Software wird dem vorhandenen Image eine Ebene hinzugefügt.

Einer der größten Vorteile der Spiegelschichtung ist die gemeinsame Nutzung von Ressourcen. Wenn beispielsweise mehrere Images aus demselben Basis-Image erstellt werden, muss Docker Host nur ein Basis-Image auf der Festplatte speichern; gleichzeitig muss nur ein Basis-Image in den Speicher geladen werden, um alle Container zu bedienen. Und jede Ebene des Bildes kann geteilt werden.

Wenn mehrere Container ein Basis-Image gemeinsam nutzen und ein Container den Inhalt des Basis-Images ändert, z. B. die folgende Datei, werden /etcdie anderen Container nicht geändert und die Änderung ist nur auf einen einzelnen Container beschränkt. /etcDies ist die Container -Copy-on-Write- Funktion.

6. Beschreibbare Containerschicht

Wenn der Container startet, wird eine neue beschreibbare Ebene über das Bild geladen. Diese Ebene wird normalerweise als Containerebene bezeichnet , und alles unterhalb der Containerebene wird als Bildebene bezeichnet .

Fügen Sie hier eine Bildbeschreibung ein
Alle Änderungen am Container, sei es das Hinzufügen, Löschen oder Ändern von Dateien, erfolgen nur in der Containerebene. Nur die Containerschicht ist beschreibbar und alle Bildebenen unterhalb der Containerschicht sind schreibgeschützt .

Es können viele Spiegelschichten vorhanden sein, und alle Spiegelschichten werden zu einem einheitlichen Dateisystem zusammengefasst. Befindet sich beispielsweise eine Datei mit demselben Pfad in verschiedenen Ebenen, überschreibt /adie obere Ebene die untere Ebene , d. h. der Benutzer kann nur auf die Datei in der oberen Ebene zugreifen . In der Containerschicht sieht der Benutzer ein überlagertes Dateisystem./a/a/a

Dateioperation veranschaulichen
Dateien hinzufügen Wenn eine Datei in einem Container erstellt wird, wird die neue Datei der Containerebene hinzugefügt.
Datei lesen Beim Lesen einer Datei in einem Container sucht Docker in jeder Bildebene von oben nach unten nach der Datei. Sobald es gefunden wurde, wird es sofort in die Containerschicht kopiert, geöffnet und in den Speicher eingelesen.
Datei ändern Beim Ändern einer vorhandenen Datei in einem Container sucht Docker in jeder Bildebene von oben nach unten nach dieser Datei. Sobald Sie es gefunden haben, kopieren Sie es in die Containerebene und ändern Sie es.
Dateien löschen Beim Löschen einer Datei im Container sucht Docker auch in der Bildebene von oben nach unten nach der Datei, um den Löschvorgang in der Containerebene zu finden und aufzuzeichnen. ( nur Löschvorgänge protokollieren )

Kopieren Sie nur dann eine Kopie der Daten, wenn diese geändert werden müssen. Diese Funktion wird Copy-on-Write genannt . Es ist ersichtlich, dass die Containerschicht den geänderten Teil des Bildes speichert und keine Änderungen am Bild selbst vornimmt.

Zusammenfassend lässt sich sagen: Die Containerschicht zeichnet die Änderung des Bildes auf, und alle Bildebenen sind schreibgeschützt und werden vom Container nicht geändert, sodass das Bild von mehreren Containern gemeinsam genutzt werden kann.

7. Datenvolumen Volumen

Tatsächlich ist unser Container wie eine einfache Version des Betriebssystems, aber nur die Umgebung, die für die Ausführung unseres Programms erforderlich ist, ist im System installiert. Wie bereits erwähnt, kann unser Container gelöscht werden. Wenn er gelöscht wird, wird das Was ist mit dem Vom Programm generierte Daten, die beibehalten werden müssen? Wenn der Container ausgeführt wird, können wir den Container betreten, um ihn zu überprüfen. Sobald der Container gelöscht wird, ist nichts mehr vorhanden.

Das Datenvolumen soll dieses Problem lösen. Es wird verwendet, um Daten auf unserem Host beizubehalten und Daten mit dem Container zu teilen. Einfach ausgedrückt dient es dazu, das Verzeichnis des Hosts dem Verzeichnis im Container zuzuordnen. Die Lese- und Schreibdaten im Verzeichnis wird mit dem Host synchronisiert, sodass die vom Container generierten Daten beibehalten werden können. Beispielsweise kann unser Datenbankcontainer die Daten auf der realen Festplatte auf unserem Host speichern.

8. Register des Registrierungszentrums

Docker verwendet Registry, um vom Benutzer erstellte Images zu speichern. Register sind in öffentliche und private unterteilt. Das Unternehmen Docker betreibt ein öffentliches Register namens Docker Hub . Benutzer können ein Konto bei Docker Hub registrieren und ihre eigenen Bilder teilen und speichern.

Das Unternehmen Docker bietet ein öffentliches Mirror-Warehouse https://hub.docker.com (Docker nennt es Repository) und stellt eine riesige Sammlung von Mirrors zur Nutzung bereit.

Eine Docker-Registrierung kann mehrere Warehouses (Repository) enthalten; jedes Warehouse kann mehrere Tags (Tag) enthalten; jedes Tag entspricht einem Spiegelbild.

Normalerweise enthält ein Warehouse Bilder verschiedener Versionen derselben Software, und die Tags entsprechen jeder Version der Software. Wir können das Format <Warehouse-Name>:<Label> verwenden , um anzugeben, welche Version der Software das Spiegelbild ist. Wenn keine Bezeichnung angegeben ist, wird sie latestals Standardbezeichnung verwendet.

9. Zusammenfassung

Auf der offiziellen Website von Docker steht folgender Satz: „ Build, Ship, and Run Any App, Anywhere “. In Kombination mit dem, was wir gerade verstanden haben, kann es wie folgt zusammengefasst werden: „ Einmal erstellen, überall ausführen“ .

Fügen Sie hier eine Bildbeschreibung ein
Darüber hinaus bietet Docker ein öffentliches Spiegellager https://hub.docker.com (Docker nennt es Repository), GitHub Connect und erstellt automatisch Spiegel, was die Anwendungsverteilungs-, Bereitstellungs- und Aktualisierungsprozesse erheblich vereinfacht. Darüber hinaus kann Docker problemlos verschiedene benutzerdefinierte Bilddateien erstellen. Dies ist ein wichtiger Faktor dafür, dass Docker zur beliebtesten Containertechnologie wird.

Durch die Kombination der oben genannten Technologien ist das Endergebnis: Für die meisten Anwendungen können Entwickler docker buildBilder über erstellen, docker pushBilder über hochladen, Benutzer können docker pullBilder über herunterladen und docker runContaineranwendungen ausführen. Benutzer müssen sich nicht mehr darum kümmern, wie sie die Umgebung einrichten, wie sie installieren und wie sie Bibliothekskonflikte verschiedener Distributionen lösen – und es verbraucht in der Regel nicht mehr Hardwareressourcen und verringert die Leistung nicht wesentlich.

Guess you like

Origin blog.csdn.net/be_racle/article/details/132220490