Detaillierte Erläuterung des Docker-Arbeitsmodus und -Prinzips

Detaillierte Erläuterung des Docker-Arbeitsmodus und -Prinzips

Wie in der folgenden Abbildung dargestellt:

Bildbeschreibung hier einfügen

Wenn wir virtuelle Maschinen und Docker verwenden, stellt sich eine Frage: Warum ist Docker schneller als VM?

Bildbeschreibung hier einfügen

Das obige Bild veranschaulicht dieses Problem objektiv.

1. Docker hat weniger Abstraktionsebenen als virtuelle Maschinen.

2. Docker verwendet den Kernel des Hostcomputers, während VM das Gastbetriebssystem benötigt.

Daher muss Docker beim Erstellen eines neuen Containers kein Betriebssystem neu laden wie eine virtuelle Maschine. Die virtuelle Maschine lädt das Gastbetriebssystem (was einige Minuten dauert), während Docker das Betriebssystem der Hostmaschine verwendet und diesen komplexen Vorgang (der einige Sekunden dauert) auslässt.

Bildbeschreibung hier einfügen

Nachdem wir diese Punkte geklärt haben, schauen wir uns an, wie wir es auf der Clientseite verwenden.

Zunächst müssen wir einige Begriffe verstehen:

Host (Docker-Engine)

Eine physische oder virtuelle Maschine, die zum Ausführen des Docker-Daemons und von Containern verwendet wird.

Bild

Was ist ein Docker-Image? Einfach ausgedrückt ist ein Docker-Image ein Linux-Dateisystem (Root FileSystem), das Programme enthält, die auf dem Linux-Kernel und den entsprechenden Daten ausgeführt werden können.
Ein Container wird über ein Image gestartet. Ein Image ist ein ausführbares Paket, das alles enthält, was zum Ausführen einer Anwendung erforderlich ist: Code, Laufzeit, Bibliotheken, Umgebungsvariablen und Konfigurationsdateien.
Docker verpackt die App-Dateien in einem Spiegel und verwendet eine Speichertechnologie ähnlich mehreren Snapshots, um Folgendes zu erreichen:

  • Mehrere Apps können dasselbe zugrunde liegende Image (anfängliches Betriebssystem-Image) gemeinsam nutzen.
  • Isolierung von IO-Operationen und Bilddateien während der App-Laufzeit;
  • Durch das Einbinden von Verzeichnissen oder Datenträgern, die unterschiedliche Konfigurations-/Datendateien enthalten, kann ein einzelnes App-Image zum Ausführen zahlreicher Container für unterschiedliche Unternehmen verwendet werden.

Container

Die Beziehung zwischen einem Bild und einem Container ähnelt der zwischen einer Klasse und einer Instanz in der objektorientierten Programmierung. Ein Bild ist eine statische Definition und ein Container ist eine Entität zur Laufzeit des Bildes. Container können erstellt, gestartet, gestoppt, gelöscht, angehalten usw. werden.

Bildschichtung

Docker unterstützt das Erstellen neuer Images durch die Erweiterung vorhandener Images. Tatsächlich werden 99 % der Images im Docker Hub durch die Installation und Konfiguration der erforderlichen Software im Basisimage erstellt.

Bildbeschreibung hier einfügen

Wie aus der obigen Abbildung ersichtlich, wird das neue Bild durch schichtweises Stapeln des Basisbildes erzeugt. Jedes Mal, wenn Sie eine Software installieren, fügen Sie dem vorhandenen Image eine Ebene hinzu.
Einer der größten Vorteile der Bildschichtung sind gemeinsam genutzte Ressourcen. Wenn beispielsweise mehrere Images aus demselben Basisimage erstellt werden, muss der Docker-Host nur ein Basisimage auf der Festplatte speichern; gleichzeitig muss nur ein Basisimage in den Speicher geladen werden, um alle Container zu bedienen. Und jede Ebene des Bildes kann geteilt werden.
Wenn mehrere Container ein Basisimage gemeinsam nutzen und ein Container den Inhalt des Basisimages ändert, z. B. Dateien unter /etc, wird das /etc anderer Container nicht geändert und die Änderung ist auf einen einzelnen Container beschränkt. Dies ist die Copy-on-Write-Funktion des Containers.

Beschreibbare Containerebene

Beim Start des Containers wird eine neue beschreibbare Ebene über das Image geladen. Diese Ebene wird üblicherweise als „Containerebene“ bezeichnet, und alles unterhalb der „Containerebene“ wird als „Bildebene“ bezeichnet.

Bildbeschreibung hier einfügen

Alle Änderungen am Container – ob Hinzufügen, Löschen oder Ändern von Dateien – erfolgen nur auf Containerebene. Nur die Containerebene ist beschreibbar und alle Bildebenen unterhalb der Containerebene sind schreibgeschützt.

Es kann eine große Anzahl von Bildebenen geben, und alle Bildebenen werden zu einem einheitlichen Dateisystem kombiniert. Wenn sich in unterschiedlichen Ebenen eine Datei mit demselben Pfad befindet, z. B. /a, überschreibt das /a in der oberen Ebene das /a in der unteren Ebene. Dies bedeutet, dass der Benutzer nur auf die Datei /a in der oberen Ebene zugreifen kann. In der Containerschicht sieht der Benutzer ein überlagertes Dateisystem.

Daten werden nur kopiert, wenn sie geändert werden müssen. Diese Funktion wird Copy-on-Write genannt. Es ist ersichtlich, dass die Containerebene den geänderten Teil des Bildes speichert und keine Änderungen am Bild selbst vornimmt.

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

Volumen

Tatsächlich ist unser Container wie eine vereinfachte Version eines Betriebssystems, mit dem Unterschied, dass das System nur die Umgebung installiert, die zum Ausführen unseres Programms erforderlich ist. Wie bereits erwähnt, kann unser Container gelöscht werden. Wenn er gelöscht wird, was sollen wir dann mit den Daten tun, die vom Programm im Container generiert und gespeichert werden müssen? Wenn der Container ausgeführt wird, können wir ihn aufrufen, um ihn anzuzeigen. Sobald der Container gelöscht ist, bleibt nichts übrig.

Das Datenvolumen wird also verwendet, um dieses Problem zu lösen. Es wird verwendet, um Daten auf unserem Host-Rechner zu speichern und den Datenaustausch zwischen Containern zu realisieren. Einfach ausgedrückt ordnet es das Verzeichnis des Host-Rechners dem Verzeichnis im Container zu. Die Anwendung liest und schreibt Daten im Verzeichnis im Container und die Daten werden mit dem Host-Rechner synchronisiert. Auf diese Weise können die vom Container generierten Daten gespeichert werden. Beispielsweise kann unser Datenbankcontainer Daten auf der realen Festplatte unseres Host-Rechners speichern.

Registrierung

Docker verwendet Registry, um benutzerdefinierte Bilder zu speichern. Es gibt zwei Arten von Registern: öffentliche und private. Docker Inc. betreibt ein öffentliches Register namens Docker Hub. Benutzer können bei Docker Hub ein Konto registrieren, um ihre eigenen Bilder zu teilen und zu speichern.

Docker bietet ein öffentliches Image-Repository hub.docker.com (Docker nennt es Repository), das eine riesige Sammlung von Images zur Verwendung bereitstellt.

Ein Docker-Register kann mehrere Repositorys enthalten; jedes Repository kann mehrere Tags enthalten; jedes Tag entspricht einem Image.

Normalerweise enthält ein Repository Bilder verschiedener Versionen derselben Software und Tags entsprechen den verschiedenen Versionen der Software. Wir können das Format <Warehouse-Name>:<Bezeichnung> verwenden, um anzugeben, welche Version der Software das Spiegelbild ist. Wenn kein Tag angegeben ist, ist das Standardtag „latest“.

Zusammenfassen

Auf der offiziellen Docker-Website steht ein Satz wie dieser: „Build and Ship any Application Anywhere“. Zusammen mit dem, was wir gerade verstanden haben, lautet die Zusammenfassung: Einmal erstellen, überall ausführen.
Darüber hinaus bietet Docker ein öffentliches Image-Repository namens hub.docker.com (Docker nennt es Repository), GitHub connect, das automatisch Images erstellt und so die Prozesse zur Anwendungsverteilung, Bereitstellung und Aktualisierung erheblich vereinfacht. Darüber hinaus können mit Docker problemlos verschiedene benutzerdefinierte Image-Dateien erstellt werden. Dies sind wichtige Faktoren, die dazu beigetragen haben, dass Docker zur beliebtesten Containertechnologie wurde.

Durch die Kombination der oben genannten Technologien ergibt sich folgendes Endergebnis: Für die meisten Anwendungen können Entwickler Images über Docker Build erstellen, Images über Docker Push hochladen, Benutzer Images über Docker Pull herunterladen und Containeranwendungen mit Docker Run ausführen. Benutzer müssen sich nicht mehr darum kümmern, wie die Umgebung erstellt wird, wie die Installation verläuft oder wie Bibliothekskonflikte zwischen verschiedenen Distributionen gelöst werden. Außerdem werden in der Regel weder mehr Hardwareressourcen verbraucht, noch wird die Leistung erheblich beeinträchtigt.

Oben finden Sie eine ausführliche Erläuterung der Funktionsweise und des Funktionsprinzips von Docker. Weitere Informationen zur Funktionsweise und zum Funktionsprinzip von Docker finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung des Funktionsprinzips und der Verwendung des Docker-Image-Submission-Befehls Commit
  • Docker-Tutorial: Container verwenden (einfaches Beispiel)
  • So funktioniert Docker Networking
  • Detaillierte Erklärung zum Anzeigen der von Docker-Containern verwendeten Ressourcen

<<:  Lösung für das Problem, dass MySQL-Befehle nicht auf Chinesisch eingegeben werden können

>>:  UrlRewriter-Caching-Probleme und eine Reihe damit verbundener Untersuchungen

Artikel empfehlen

Schritte zum Importieren von Millionen von Daten in MySQL mit .Net Core

Inhaltsverzeichnis Vorbereitende Vorbereitung Imp...

Apropos „Weniger und mehr“ im Webdesign (Bild)

„Weniger ist mehr“ ist ein Schlagwort vieler Desi...

So erstellen Sie eine Ansicht in MySQL

Grundlegende Syntax Sie können eine Ansicht mit d...

Sieben Prinzipien eines guten Designers (2): Farbgebrauch

<br />Vorheriger Artikel: Sieben Prinzipien ...

Super einfache QPS-Statistikmethode (empfohlen)

Statistik der QPS-Werte der letzten N Sekunden (i...

Lösen Sie das Installationsproblem von Linux Tensorflow2.0

conda aktualisieren conda pip installieren tf-nig...

So zeigen Sie den Status von Remote-Serverdateien in Linux an

Wie unten dargestellt: Der Testbefehl stellt fest...

React+Koa-Beispiel zur Implementierung des Datei-Uploads

Inhaltsverzeichnis Hintergrund Serverabhängigkeit...

So ändern Sie den Inhalt eines vorhandenen Docker-Containers

1. Docker ps listet Container auf 2. Docker cp ko...

Tutorial zu HTML-Tabellen-Tags (8): Hintergrundbild-Attribut BACKGROUND

Legen Sie ein Hintergrundbild für die Tabelle fes...

Native Js-Implementierung des Kalender-Widgets

In diesem Artikelbeispiel wird der spezifische JS...