Detaillierte Erklärung des Prinzips der Docker-Image-Schichtung

Detaillierte Erklärung des Prinzips der Docker-Image-Schichtung

Basisbild

Das Basisbild hat zwei Bedeutungen:

  • Ist nicht von anderen Bildern abhängig, wird von Grund auf neu erstellt
  • Weitere Bilder können erweitert werden

Daher sind Basis-Images im Allgemeinen Docker-Images verschiedener Linux-Distributionen wie etwa Ubuntu, Debian oder CentOS.

Das Basis-Image stellt die Linux-Distribution mit der Mindestinstallation bereit.

Die meisten unserer Bilder werden auf Grundlage des Basisbildes erstellt. Daher wird normalerweise das offiziell veröffentlichte Basisimage verwendet. Es ist im Docker Hub zu finden. Beispielsweise centos: https://hub.docker.com/_/centos

Wir können selbst ein Docker-Basisimage erstellen oder direkt ein vorhandenes Basisimage verwenden. Zum Beispiel Centos. Wir können es direkt vom Docker-Hub abrufen.
Ziehen

Docker-Pull Centos

Überprüfen

Docker-Bilder Centos 
REPOSITORY TAG BILD ID ERSTELLT GRÖSSE
centos latest 1e1148e4cc2c vor 2 Monaten 202MB

Sie können sehen, dass das neueste CentOS-Image nur 200 MB groß ist. Denken Sie, dass es zu klein ist? Dies liegt daran, dass das Docker-Image bei der Ausführung direkt den Kernel der Docker-Hostmaschine verwendet.

Das Linux-Betriebssystem besteht aus Benutzerbereich und Kernelbereich.

Der Kernelbereich ist Kernel und der Benutzerbereich ist RootFS. Der Unterschied zwischen verschiedenen Distributionen besteht hauptsächlich in RootFS. Beispielsweise verwendet Ubuntu 14.04 Upstart zum Verwalten von Diensten und Apt zum Verwalten von Softwarepaketen, während CentOS 7 systemd und yum verwendet. Dies sind Unterschiede im Benutzerbereich, der Kernel unterscheidet sich nicht wesentlich.

Daher kann Docker mehrere Linux-Images gleichzeitig unterstützen und verschiedene Betriebssystemumgebungen simulieren.

Das Basisimage verfügt nur über denselben Benutzerbereich und dieselbe Release-Version, und der Kernelbereich verwendet den Kernel der Docker-Hostmaschine.

Speicherstruktur

Oben wird gezeigt, wie ein Basisimage heruntergeladen wird. Normalerweise erstellen wir unser eigenes Image auf Grundlage dieses Basisimages. Fügen Sie beispielsweise einen Nginx-Lastausgleich in CentOS hinzu. Zunächst müssen Sie die Struktur des Bildes verstehen.

Offizielle Dokumentation: https://docs.docker.com/storage/storagedriver/

Docker-Image-Ebenenstruktur

Wenn Sie ein Image starten, wird eine neue beschreibbare Ebene über das Image geladen. Diese Ebene wird üblicherweise als „Containerebene“ bezeichnet, darunter befindet sich die „Bildebene“.

Auf der Containerebene kann gelesen und geschrieben werden, und alle Dateiänderungen und -schreibvorgänge im Container erfolgen auf dieser Ebene. Die Bildebene erlaubt nur das Lesen, schreibgeschützt.

Kopieren beim Schreiben

Docker verwendet eine Kopierstrategie zum Zeitpunkt der Änderung, um die Sicherheit des Basis-Image sowie eine höhere Leistung und Speichernutzung zu gewährleisten.

  • Wenn der Container eine Datei lesen muss

Beginnen Sie mit der obersten Bildebene und suchen Sie nach unten. Nachdem Sie es gefunden haben, lesen Sie es in den Speicher ein. Wenn es bereits im Speicher ist, können Sie es direkt verwenden. Mit anderen Worten: Docker-Container, die auf derselben Maschine ausgeführt werden, teilen sich zur Laufzeit dieselben Dateien.

  • Wenn der Container die Datei ändern muss

Suchen Sie von oben nach unten und kopieren Sie es nach dem Finden in die Containerebene. Beim Container können Sie die Datei in der Containerebene sehen, aber nicht die Datei in der Bildebene. Anschließend können Sie die Datei in der Containerebene direkt ändern.

  • Wenn der Container eine Datei löschen muss

Suchen Sie von oben nach unten und zeichnen Sie die Löschung im Container auf, nachdem Sie sie gefunden haben. Dies ist keine echte Löschung, sondern eine sanfte Löschung. Dies führt dazu, dass die Bildgröße nur zunimmt, nicht abnimmt.

Wenn der Container Dateien hinzufügen muss, werden diese direkt zur beschreibbaren Containerebene der obersten Ebene hinzugefügt, ohne die Imageebene zu beeinträchtigen.

Straffung und Optimierung von Bildern

Optimieren des Basis-Images

Wählen Sie beim Auswählen eines Basisimages ein geeignetes kleineres Image. Häufig verwendete Linux-Systemimages sind Ubuntu, CentOs, Alpine usw.

Anweisungen zum Verketten von Dockerfiles

In einer Docker-Datei erstellt jede Anweisung eine Bildebene, die die Größe des Bildes erhöht. Änderungen an der aktuellen Ebene wirken sich nicht auf die vorherige Ebene aus.

  • Verwenden Sie &&, um Anweisungen zu verketten (in RUN-Anweisungen).
  • Denken Sie daran, nach der Installation der Software zu bereinigen

Konkrete Beispiele sind:

Benutzerdefiniertes Dockerfile:

VON Ubuntu:14.04
#Grundlegendes Quellbild MAINTAINER xiongkun
#Beschreiben Sie den Ersteller des Bildes, Name und E-Mail WORKDIR /home
RUN dd if=/dev/zero of=50M.file bs=1M count=50
#Erstellen Sie eine Testdatei mit der Größe 50 MB RUN rm -rf 50M.file
#Löschen Sie die Datei

Optimiertes Dockerfile:

VON Ubuntu:14.04
#Grundlegendes Quellbild MAINTAINER xiongkun
#Beschreiben Sie den Ersteller des Bildes, Name und E-Mail WORKDIR /home
RUN dd if=/dev/zero of=50M.file bs=1M count=50 && rm -rf 50M.file
#Erstellen Sie eine Datei und löschen Sie sie auf derselben Ebene

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Tiefgreifendes Verständnis der Schichtung von Docker-Images (ein Muss für Anfänger)
  • Verstehen Sie die Implementierung der Docker-Image-Schichtung gründlich
  • Kenntnisse im Bereich Docker-Image-Layering und Dockerfile-Schreiben
  • Detaillierte Analyse des Docker-Dateischichtprinzips

<<:  Detaillierte Beispiele für Variablen- und Funktionspromotion in JavaScript

>>:  Lernen Sie die Ausführungsreihenfolge von SQL-Abfragen von Grund auf

Artikel empfehlen

Mehrere häufig verwendete Single-Page-Anwendungswebsite-Sharing

CSS3Bitte Schauen Sie sich diese Website selbst a...

Ubuntu 20.04: Beispiel zum Ändern der IP-Adresse

veranschaulichen: Als ich heute das letzte Experi...

Detaillierte Erklärung der nmcli-Verwendung in CentOS8

Allgemeine nmcli-Befehle basierend auf RHEL8/Cent...

Detaillierte Erläuterung des Quellcodes der vue.$set()-Methode von Vue

Bei der Verwendung von Vue zum Entwickeln von Pro...

Detaillierte Analyse der Replikation in MySQL

1.MySQL-Replikationskonzept Dies bedeutet, dass d...

Zusammenfassung häufig verwendeter Leistungstestskripte für VPS-Server

Hier ist ein allgemeines Ein-Klick-Leistungstests...

14 Möglichkeiten zum Erstellen von Website-Inhalten, die Ihre Besucher fesseln

Wenn ich im Internet surfe, sehe ich oft Websites...

Vue-Vorlagenkonfiguration und Webstorm-Codeformatspezifikationseinstellungen

Inhaltsverzeichnis 1. Einstellungen für die Spezi...

Detailliertes Tutorial zum Bereitstellen eines Django-Projekts unter CentOS

Grundlegende Umgebung Pagoden-Montageservice [Pyt...

Beispiel zum Ändern des Zeilenabstands einer HTML-Tabelle

Bei der Verwendung von HTML-Tabellen müssen wir m...