Definition

Docker Image

Was ist ein Docker Image?

Ein Docker Image ist eine Datei, die zur Ausführung von Code in einem Docker-Container verwendet wird. DockerImages dienen als eine Reihe von Anweisungen zum Erstellen eines Docker-Containers, zum Beispiel eine Vorlage. Docker Images dienen auch als Ausgangspunkt für die Verwendung von Docker. Ein Image ist vergleichbar mit einem Snapshot in Umgebungen mit virtuellen Maschinen (VM).

Docker ist ein Open-Source-Projekt, mit dem Anwendungen in Containern erstellt, ausgeführt und bereitgestellt werden können. Ein Docker Image enthält Anwendungscode, Bibliotheken, Tools, Abhängigkeiten und andere Dateien, die für die Ausführung einer Anwendung erforderlich sind. Wenn ein Benutzer ein Image ausführt, kann es zu einer oder mehreren Instanzen eines Containers werden. Ein Docker Daemon arbeitet im Hintergrund, um Images, Container und damit verbundene Aufgaben zu überwachen. Die Kommunikation zwischen einem Client und dem Daemon wird durch Sockets oder eine RESTful API erleichtert.

Ebenen von Docker Images

Docker Images bestehen aus mehreren Schichten, die jeweils aus der vorherigen Schicht hervorgehen, aber unterschiedlich sind. Die Schichten – oder Ebenen – beschleunigen die Erstellung von Docker Images bei gleichzeitiger Erhöhung der Wiederverwendbarkeit und Verringerung des Disk-Verbrauchs. Schichten helfen dabei, die Übertragung redundanter Daten zu vermeiden und alle Erstellungsschritte zu überspringen, die nicht durch den Docker-Cache geändert wurden.

Image-Ebenen sind ebenfalls schreibgeschützte Dateien. Nach der Erstellung eines Containers wird eine beschreibbare Schicht über die unveränderlichen Images gelegt, so dass ein Benutzer Änderungen vornehmen kann.

Verweise auf den Disk-Platz in Docker Images und Containern können verwirrend sein. Es ist wichtig, zwischen Größe und virtueller Größe zu unterscheiden. Die Größe bezieht sich auf den Festplattenspeicher, den die beschreibbare Schicht eines Containers verwendet, während die virtuelle Größe der Festplattenspeicher ist, der für den Container und die beschreibbare Schicht verwendet wird. Die schreibgeschützten Schichten eines Images können von allen Containern, die aus demselben Image gestartet werden, gemeinsam genutzt werden.

Anwendungsfälle für Docker Images

Ein Docker Image bietet eine breite Palette von Anwendungsfällen, die folgende Vorteile bieten:

  • Effiziente Entwicklung und Bereitstellung. Ein Docker Image enthält alles, was zum Ausführen einer containerisierten Anwendung erforderlich ist, einschließlich Code, Konfigurationsdateien, Umgebungsvariablen, Bibliotheken und Laufzeiten. Wenn das Image in einer Docker-Umgebung bereitgestellt wird, kann es als Docker-Container ausgeführt werden. Der Befehl docker run erstellt einen Container aus einem bestimmten Image.
  • Konsistenz. Docker bietet eine konsistente Umgebung für Anwendungen, so dass diese in allen Umgebungen von der Entwicklung bis zur Produktion konsistent funktionieren. Außerdem sorgt die Paritätsfunktion von Docker dafür, dass die Images unabhängig vom Server oder Laptop, auf dem sie ausgeführt werden, gleich funktionieren, was Zeit bei der Konfiguration von Umgebungen und der Behebung von Problemen spart, die für jede Umgebung einzigartig sind.
  • Plattformunabhängigkeit. Ein Docker Image ist ein plattformübergreifendes Image. Es kann zum Beispiel in der Windows-Umgebung erstellt, an den Docker Hub übermittelt und von Benutzern mit Linux und anderen Betriebssystemen abgerufen werden.
  • Portabilität. Docker Images sind leichtgewichtig, klein und schnell, was sie extrem portabel für alle verschiedenen Linux-Versionen, Laptops oder die Cloud macht.
  • Schnelligkeit und Agilität. Mit Docker können Benutzer Container sofort erstellen und bereitstellen, ohne das Betriebssystem booten zu müssen. Durch die Möglichkeit, Container einfach zu erstellen, zu zerstören, zu stoppen oder zu starten und die Bereitstellung über YAML-Konfigurationsdateien zu automatisieren, optimiert Docker die Skalierung der Infrastruktur. Durch die Verwendung von Container-Images in der gesamten Pipeline und die Möglichkeit, nicht voneinander abhängige Aufgaben gleichzeitig auszuführen, werden CI/CD-Pipelinesbeschleunigt, was zu einer kürzeren Markteinführungszeit und höherer Produktivität führt.
  • Isolierung und Sicherheit. Docker Images bieten Isolation, indem sie Anwendungen in Containern ausführen. Da jeder Container über ein eigenes Dateisystem, eigene Prozesse und einen eigenen Netzwerkstapel (Network Stack) verfügt, werden Abhängigkeiten und Programme sowohl vom Host-System als auch voneinander getrennt. Diese Isolierung verbessert die Sicherheit und verhindert Konflikte zwischen Anwendungen.
  • Versionierung und Rollback. Die Funktionen von Docker zur Übermittlung von Änderungen und zur Versionskontrolle ermöglichen ein sofortiges Rollback zu früheren Versionen, wenn neue Änderungen die Umgebung stören.
  • Wiederverwendbarkeit. Docker Images sind ein wiederverwendbares Asset, das auf jedem Host eingesetzt werden kann. Die Entwickler können die statischen Image-Ebenen aus einem Projekt übernehmen und in einem anderen verwenden. Dies spart dem Benutzer Zeit, da er ein Image nicht von Grund auf neu erstellen muss.
  • Skalierbarkeit. Durch das Aufsetzen mehrerer Instanzen von Containern ermöglichen Docker Images eine einfache horizontale Anwendungsskalierung. Durch den Einsatz von Orchestrierungs- und Verwaltungsoptionen wie Docker Swarm oder Kubernetes können Unternehmen den Lastausgleich und die Skalierung je nach Bedarf automatisieren.

Docker-Container und Docker Image im Vergleich

Docker-Container und Docker Images sind beides grundlegende Konzepte in Docker, die einzigartige Merkmale aufweisen. Zu den wichtigsten Unterschieden zwischen einem Docker-Container und einem Docker-Image gehören die folgenden:

Docker-Container

  • Ein Docker-Container ist eine virtualisierte Laufzeitumgebung, die bei der Anwendungsentwicklung verwendet wird.
  • Er wird zur Erstellung, Ausführung und Bereitstellung von Anwendungen verwendet, die von der zugrunde liegenden Hardware isoliert sind.
  • Ein Docker-Container kann eine Maschine verwenden, ihren Kernel gemeinsam nutzen und das Betriebssystem virtualisieren, um mehr isolierte Prozesse auszuführen. Daher sind Docker-Container leichtgewichtig.
  • Docker-Container können schnell skaliert werden, um die Anforderungen einer sich ändernden Arbeitslast zu erfüllen. Dadurch eignen sie sich für Microservices-Architekturen und Cloud-native Anwendungen.

Docker Image

  • Ein Docker Image ist vergleichbar mit einem Snapshot in anderen Arten von VM-Umgebungen. Es ist eine Aufzeichnung eines Docker-Containers zu einem bestimmten Zeitpunkt.
  • Docker Images sind außerdem unveränderlich. Sie können zwar nicht verändert werden, aber sie können dupliziert, geteilt oder gelöscht werden. Diese Funktion ist nützlich für das Testen neuer Software oder Konfigurationen, da das Image in jedem Fall unverändert bleibt.
  • Container sind von Docker Images abhängig und benötigen ein lauffähiges Image, da Images zum Aufbau von Laufzeitumgebungen verwendet werden und zur Ausführung einer Anwendung erforderlich sind.
  • Docker Images werden mit dem build-Befehl erstellt und sind in einer Docker Registry untergebracht. Aufgrund ihrer schichtweisen Struktur, bei der mehrere Ebenen von Images aufeinander aufbauen, erfordern sie nur eine minimale Datenübertragung über Netzwerke.

Anatomie eines Docker Image

Ein Docker Image besteht aus vielen Schichten. Jedes Image enthält alles, was zur Konfiguration einer Containerumgebung benötigt wird, einschließlich Systembibliotheken, Tools, Abhängigkeiten und andere Dateien. Zu den Bestandteilen eines Images gehören die folgenden:

  • Basis Image. Der Benutzer kann diese erste Schicht mit dem Befehl build von Grund auf neu erstellen. Ein Basis-Image fungiert als anfänglich leere Schicht und erleichtert die Erstellung von Docker Images von Grund auf. Während es die volle Kontrolle über den Inhalt des Images bietet, sind Basis-Images im Allgemeinen für Benutzer mit fortgeschrittenen Docker-Kenntnissen geeignet.
  • Parent Image. Als Alternative zu einem Basis-Image kann ein Parent-Image die erste Schicht in einem Docker Image sein. Es ist ein wiederverwendetes Image, das als Grundlage für alle anderen Schichten dient. Ein Standard-Parent-Image besteht in der Regel aus einer einfachen Linux-Distribution oder wird mit einem installierten Dienst geliefert, zum Beispiel einem Content Management System (CMS) oder einem Datenbank-Management-System(DBMS).
  • Ebenen. Ebenen (Layer) werden dem Basis-Image mithilfe von Code hinzugefügt, der es ermöglicht, es in einem Container auszuführen. Jede Schicht eines Docker-Abbilds kann unter /var/lib/docker/aufs/diff oder über den Befehl Docker history in der Befehlszeilenschnittstelle (CLI) angezeigt werden. Der Standardstatus von Docker ist die Anzeige aller Images der obersten Schicht, einschließlich Repository, Tags und Dateigrößen. Die Zwischenschichten werden zwischengespeichert, so dass die oberen Ebenen leichter angezeigt werden können. Docker-Speicherlaufwerke verwalten die Inhalte der Image-Schicht.
  • Container-Schicht. Ein Docker Image erzeugt nicht nur einen neuen Container, sondern auch eine beschreibbare oder eine Container-Schicht. In dieser Ebene werden die am laufenden Container vorgenommenen Änderungen gespeichert, und sie speichert neu geschriebene und gelöschte Dateien sowie Änderungen an vorhandenen Dateien. Diese Schicht wird auch zur Anpassung von Containern verwendet.
  • Docker Manifest. Dieser Teil des Docker Images ist eine zusätzliche Datei. Sie verwendet das Format JavaScript Object Notation, um das Image zu beschreiben, und enthält Informationen wie Image Tags, digitale Signaturen und Anweisungen zum Einrichten des Containers für verschiedene Plattformtypen.
Abbildung 1: Hier sehen Sie, wie ein Image zur Ausführung eines HTTP-Serverprogramms für Apache aussehen könnte.
Abbildung 1: Hier sehen Sie, wie ein Image zur Ausführung eines HTTP-Serverprogramms für Apache aussehen könnte.

Docker Image Repositories

Ein Docker Image Repository ist ein zentraler Ort, an dem Docker Images gespeichert und verwaltet werden. Die Images werden in privaten oder öffentlichen Repositories gespeichert, zum Beispiel in der Docker Hub Registry, von wo aus Benutzer Container bereitstellen und Images testen und gemeinsam nutzen können. Die Docker Trusted Registry von Docker Hub bietet außerdem Funktionen für die Verwaltung von Images und die Zugriffskontrolle.

Offizielle Images werden von Docker produziert, während Community Images von Docker-Benutzern erstellt werden. Datadog/docker-dd-agent, ein Docker-Container für Agenten im Datadog Log Management-Programm, ist ein Beispiel für ein Community Docker Image.

Benutzer können auch neue Images aus vorhandenen Images erstellen und den Befehl docker push verwenden, um benutzerdefinierte Images in den Docker Hub hochzuladen. Um die Qualität der Community Images zu gewährleisten, gibt Docker den Autoren vor der Veröffentlichung ein Feedback. Sobald das Image veröffentlicht ist, ist der Autor für die Aktualisierungen verantwortlich. Autoren müssen vorsichtig sein, wenn sie ein Image von einer anderen Partei beziehen, denn Angreifer können sich durch nachgeahmte Images, die dem Benutzer vorgaukeln, sie stammten aus einer vertrauenswürdigen Quelle, Zugriff auf ein System verschaffen.

Auch das Konzept des neuesten Images kann Verwirrung stiften. Docker Images, die mit : latest gekennzeichnet sind, sind nicht unbedingt die neuesten im herkömmlichen Sinne. Das latest-Tag bezieht sich nicht auf die zuletzt veröffentlichte Version eines Images; es ist einfach ein Standard-Tag.

Ein Docker Image erstellen

Docker Images können entweder mit einer interaktiven oder einer Dockerfile-Methode erstellt werden.

Interaktive Methode

Die interaktive Methode ist der einfachste Weg, Docker Images zu erstellen. Bei dieser Methode führen die Benutzer einen Container aus einem vorhandenen Docker Image aus und nehmen manuell alle erforderlichen Änderungen an der Umgebung vor, bevor sie das Image speichern. Dieser Ansatz eignet sich für Szenarien, in denen ein praktischerer Ansatz zur Image-Erstellung bevorzugt wird, der eine direkte Manipulation und Anpassung der Containerumgebung ermöglicht.

Die folgenden Schritte sind für die Erstellung eines Docker Images erforderlich:

  1. Starten Sie Docker und öffnen Sie eine Terminalsitzung.
  2. Verwenden Sie den Docker-Ausführungsbefehl image_name:tag_name. Dies startet eine Shell-Sitzung mit dem Container, der aus dem Image gestartet wurde. Wenn der Tag-Name weggelassen wird, verwendet Docker die neueste Version des Images.
  3. Danach sollte das Image in der Ergebnisliste erscheinen.

Dockerfile-Methode

Ein Dockerfile ist eine textbasierte Datei ohne Dateierweiterung, die ein Skript mit Anweisungen enthält, die Docker zum Erstellen eines Container-Images verwendet. Dieser Prozess ist schwieriger und zeitaufwändiger, eignet sich aber gut für kontinuierliche Bereitstellungsumgebungen. Die Methode umfasst die Erstellung der Docker-Datei und das Hinzufügen der für das Image benötigten Befehle.

Im Folgenden werden die Schritte zur Erstellung eines Docker-Images beschrieben:

  1. Sobald das Dockerfile gestartet ist, legt der Benutzer eine .dockerignore-Datei an, um alle Dateien auszuschließen, die für den endgültigen Build nicht benötigt werden. Die .dockerignore-Datei befindet sich im Stammverzeichnis.
  2. Mit dem Befehl Docker build wird ein Docker Image erstellt, und es werden ein Image-Name und ein Tag festgelegt.
  3. Der Befehl Docker images wird verwendet, um das erstellte Abbild anzuzeigen.

Docker-Image-Befehle

Es gibt eine Reihe von primären Docker-Image-Befehlen, die als Child-Befehle kategorisiert sind; einige davon sind die folgenden:

  • Docker image build. Erzeugt ein Image aus einer Docker-Datei.
  • Docker image inspect. Zeigt Informationen über ein oder mehrere Images an.
  • Docker image load. Lädt ein Image aus einem tar-Archiv oder Streams zum Empfangen oder Lesen von Eingaben. Dies wird auch als STDIN bezeichnet.
  • Docker image prune. Entfernt unbenutzte Images.
  • Docker image pull. Zieht ein Image oder ein Repository aus einer Registry.
  • Docker image push. Verschiebt ein Image oder ein Repository in eine Registry.
  • Docker image rm. Entfernt ein oder mehrere Images.
  • Docker image save. Speichert ein oder mehrere Bilder in einem tar-Archiv und wird standardmäßig auf die normale Ausgabe oder STDOUT übertragen.
  • Docker image tag. Erzeugt ein Tag TARGET_IMAGE, das auf SOURCE_IMAGE verweist.

Die Docker-Befehlszeilenschnittstelle bietet Befehle, mit denen Docker Images angepasst werden können. Beispiele für Docker-Image-Befehle sind die folgenden:

  • Docker image history. Zeigt die Historie eines Abbilds an, einschließlich der daran vorgenommenen Änderungen und seiner Schichten.
  • Docker update. Aktualisiert die Konfiguration von Containern.
  • Docker tag. Erstellt ein Tag, zum Beispiel TARGET_IMAGE, um Container-Images zu gruppieren und zu organisieren.
  • Docker search. Sucht in Docker Hub nach dem, was der Benutzer braucht.
  • Docker save. Speichert Bilder in einem Archiv.
  • Docker compose. Behandelt eine Umgebungsvariable.
Diese Definition wurde zuletzt im August 2024 aktualisiert

Erfahren Sie mehr über Containervirtualisierung