Docker-Image-Ebenen

Docker Image Ebenen



Docker hat die Art und Weise, wie wir als Entwickler Anwendungen erstellen und bereitstellen, schnell revolutioniert. Mit Docker können wir die Anwendungen in Containereinheiten mit allen Abhängigkeiten in einer einzigen Einheit entwickeln, verpacken, versenden und ausführen.

Einer der grundlegenden Aspekte von Docker ist das Konzept der Bildebenen. Docker-Images bestehen aus mehreren Ebenen, wobei jede Ebene eine Reihe von Dateiänderungen oder Anweisungen darstellt. Obwohl Sie die Docker-Image-Ebenen nicht konfigurieren müssen, können Sie durch das Erlernen ihrer Funktionsweise Kenntnisse darüber erlangen, wie Sie die Image-Größe optimieren und die Erstellungszeit eines Images verbessern können.

In diesem Tutorial führen wir Sie durch den Prozess, bei dem Sie lernen, was Docker-Image-Ebenen sind und wie sie funktionieren. Wir werden die grundlegenden Konzepte erforschen, ohne uns zu sehr mit den fortgeschrittenen Dingen zu befassen. Weitere Einzelheiten zu den einzelnen in diesem Beitrag behandelten Konzepten finden Sie in der Dokumentation.







Was sind Bildebenen in Docker?

In Docker sind Bildebenen ein grundlegendes Konzept, das eine effiziente Bilderstellung, -freigabe und -verteilung ermöglicht. Auf einer hohen Ebene besteht ein Docker-Image aus mehreren Ebenen, wobei jede Ebene eine Reihe von Dateisystemänderungen darstellt.



Wenn Sie ein Image erstellen oder aktualisieren, ändert Docker nur die geänderten Ebenen, was die Duplizierung reduziert und den Prozess der Image-Erstellung beschleunigt.



Bildebenen in Docker sind unveränderlich und schreibgeschützt. Die Unveränderlichkeitsfunktion der Ebenen stellt sicher, dass eine einmal erstellte Ebene nicht mehr geändert werden kann.





Daher führt jede Änderung am Bild zur Erstellung einer neuen Ebene.

Unveränderlichkeit der Docker-Image-Ebene

Wie bereits erwähnt, sind Bildebenen unveränderlich, sobald das Bild erstellt wurde. Wenn Docker also Änderungen am Container vornimmt, z. B. Dateien hinzufügt, neue Software hinzufügt usw., ändert er nicht die vorhandenen Ebenen, sondern erstellt stattdessen neue.



Die Bildunveränderlichkeit bietet folgende Vorteile:

  • Caching – Docker kann die Layer zwischenspeichern, was bedeutet, dass Docker einen bereits vorhandenen Layer für nachfolgende Builds wiederverwenden kann.
  • Rollback und Versionierung – Da Ebenen unveränderlich sind, können Sie problemlos auf eine frühere Version eines Bildes zurückgreifen, indem Sie auf dessen Ebenen verweisen.
  • Sicherheit – Sobald ein Image erstellt und signiert ist, können Sie darauf vertrauen, dass sich seine Ebenen nicht ohne Ihre Zustimmung ändern.

Bildebenenkonfiguration mit Dockerfile

Wie Sie sich vorstellen können, werden die Bildebenen durch die Dockerfile-Anweisungen definiert. Jede Anweisung in einer Docker-Datei generiert eine neue Bildebene.

Im Folgenden werden einige allgemeine Anweisungen und ihr Verhalten gegenüber der Bildebene erläutert:

  • FROM – Gibt das Basisbild an. Da das Basisbild aus mehreren Ebenen besteht, werden diese von Ihrem Bild übernommen.
  • RUN – Die RUN-Direktive ermöglicht es uns, die Befehle auszuführen und eine neue Bildebene zu erstellen. Zum Beispiel: Code kompilieren oder Pakete installieren.
  • COPY und ADD – Die COPY- und ADD-Anweisungen ermöglichen es uns, die Dateien in das Bild zu kopieren und so neue Ebenen zu erstellen.
  • ENV – Dies legt die Umgebungsvariablen fest, erstellt aber keine neue Ebene.
  • WORKDIR – Diese Anweisung ändert das Arbeitsverzeichnis, erstellt jedoch keine neue Ebene.

Ein Beispiel ist wie folgt:

AB kostenlos: 20.04

LAUFEN apt-get-Update && \

apt-get installieren -Und Nginx

KOPIEREN Sie index.html / War / www / html /

CMD [ „nginx“ , '-G' , „Daemon aus;“ ]

Mehrstufige Docker-Builds und Layer-Bereinigung

Mehrstufige Builds sind eine leistungsstarke Technik, mit der wir die Leistung der Docker-Image-Ebenen optimieren können.

Mehrstufig umfasst die Angabe mehrerer FROM-Anweisungen, die temporäre Bilder (Stufen) erstellen, um neue Ebenen zu generieren.

Sobald die Image-Erstellung abgeschlossen ist, fügt Docker nur die Ebenen der letzten Stufe in das endgültige Image ein, wodurch die Image-Größe reduziert werden kann.

Ein Beispiel für den mehrstufigen Build ist wie folgt:

# bauen

AB golang:1.21 AS-Build

WORKDIR /app

KOPIEREN . .

RUN go build -o main

# Bild erstellen

AB alpin:3.14

COPY --from=build /app/main /usr/local/bin/main

CMD [ 'hauptsächlich' ]

Im gegebenen Beispiel definieren wir die Docker-Datei in zwei Phasen. In der ersten Phase wird die Go-Anwendung erstellt und eine Binärdatei namens „main“ als Zwischenschicht erstellt.

Im nächsten Schritt beginnen wir mit einem sauberen und leichten Alpine Linux, das nur die Binärdatei aus dem vorherigen Schritt kopiert und alle anderen Schichten, die sich aus dem Kompilierungsprozess ergeben, reduziert.

Abschluss

In diesem Tutorial haben wir die Grundlagen der Docker-Image-Ebenen kennengelernt. Wir haben untersucht, was sie sind, wie sie funktionieren und wie man sie zur Bildoptimierung verwendet.