Definition

Docker Image

Ein Docker Image ist eine Datei, die aus mehreren Schichten besteht und zur Ausführung von Code in einem Docker-Container verwendet wird. Ein Image wird im Wesentlichen aus den Anweisungen für eine vollständige und ausführbare Version einer Anwendung erstellt, die sich auf den Kernel des Host-Betriebssystems stützt. Wenn der Docker-Benutzer ein Image ausführt, kann es zu einer oder mehreren Instanzen dieses Containers werden.

Docker ist eine Open-Source-Virtualisierungsplattform auf Betriebssystemebene, die in erster Linie für Linux, Windows und MacOS entwickelt wurde. Manchmal führt das Verschieben von Software von einem Host-Computer auf einen anderen zu Problemen, da die Software möglicherweise Abhängigkeiten aufweist. Ein Container, der von einer Docker-Umgebung in eine andere mit demselben Betriebssystem verschoben wird, funktioniert ohne jegliche Änderungen, da das Image alle zur Ausführung des Codes erforderlichen Abhängigkeiten enthält. Docker verwendet Ressourcen-Isolationsfunktionen im Betriebssystem-Kernel, wie zum Beispiel cgroups in Linux, um mehrere unabhängige Container auf demselben Betriebssystem auszuführen.

Dabei gilt es zu beachten, dass sich Container von virtuellen Maschinen (VMs) unterscheiden. Diese kapseln ein ganzes Betriebssystem mit dem ausführbaren Code auf einer Abstraktionsschicht von den physischen Hardwareressourcen ab.

Ein Docker-Host kann entweder eine virtuelle oder eine physische Maschine sein, auf der das Host-Betriebssystem ausgeführt wird. Das Erstellen und Ausführen von Containern auf dem Host wird von einem Docker Daemon übernommen.

Manchmal kommt es zu Unklarheiten bezüglich des Speicherplatzes mit Docker Images und Containern. Die Begriffe Größe und virtuelle Größe haben nämlich unterschiedliche Bedeutungen. Die Größe bezieht sich auf den von der beschreibbaren Schicht jedes Containers verwendeten Speicherplatz. Der für den Container und die beschreibbare Schicht benötigte Speicherplatz hingegen wird als virtuelle Größe bezeichnet. Dies liegt daran, dass die schreibgeschützten Schichten eines Images von jedem Container, der vom selben Image gestartet wird, gemeinsam genutzt werden können.

Verwendung eines Docker Image

Ein Anwendungsfall für ein Docker Image ist das Vermitteln zwischen anderen Docker-Funktionen.

Ein Docker Image enthält die Elemente, die zur Ausführung einer Anwendung als Container benötigt werden – wie Code, Konfigurationsdateien, Umgebungsvariablen, Bibliotheken und Laufzeit. Wenn das Image in einer Docker-Umgebung eingesetzt wird, kann es als Docker-Container ausgeführt werden. Der Befehl zum Ausführen von Docker erzeugt einen Container anhand eins bestimmten Images.

Docker Images sind auch eine wiederverwendbare Ressource, die auf jedem Host eingesetzt werden kann.

Docker-Container versus Docker Image

Ein Docker Image entspricht in etwa dem sogenannten Snapshot in anderen Umgebungen mit virtuellen Maschinen. Es ist eine Aufzeichnung einer virtuellen Maschine oder eines Docker-Containers zu einem bestimmten Zeitpunkt. Man stelle sich ein Docker Image als ein digitales Bild vor. Ein Docker-Container kann als ein Druck dieses Bildes angesehen werden. Docker Images haben die besondere Eigenschaft, unveränderlich zu sein. Sie können jedoch dupliziert und gemeinsam genutzt oder gelöscht werden. Diese Eigenschaften machen sie zu einem wichtigen Werkzeug beim Testen neuer Software oder Konfigurationen, denn egal, was passiert, das Image ist immer noch da und kann durch Einstellungen und Bugs nicht kompromittiert werden.

Docker Images und -Ebenen

Ein Docker Image besteht aus mehreren Schichten. Benutzer setzen jedes Docker Image so zusammen, dass es Systembibliotheken, Werkzeuge und andere Dateien und Abhängigkeiten für den ausführbaren Code enthält. Die Entwickler von Images können statische Image-Ebenen für verschiedene Projekte wiederverwenden. Die Wiederverwendung spart Zeit, da ein Benutzer nicht alles in einem einzelnen Image erstellen muss.

Die meisten Docker-Images beginnen mit einem Basis-Image – obwohl ein Benutzer ein solches komplett von Grund auf neu erstellen kann – mit dem Befehl build. Ein Docker-Webserver-Image kann auch zum Erstellen eines Containers verwendet werden. Jedes Image hat eine lesbare und schreibbare obere Schicht über den statischen Schichten. Dem Basis-Image werden Ebenen hinzugefügt, die auf den Code zugeschnitten sind, so dass es in einem Container laufen kann. Jede Ebene eines Docker-Images ist unter /var/lib/docker/aufs/diff oder über den Docker-History-Befehl in der Kommandozeile (CLI) sichtbar. Standardmäßig zeigt Docker alle Images der obersten Ebene an, wie zum Beispiel das Repository, Tags und Dateigrößen. Zwischenschichten werden in einem Cache gespeichert, wodurch die oberen Schichten leichter zu sehen sind. Docker verwendet Speichertreiber, um den Inhalt der Image-Ebenen zu verwalten.

Wenn aus einem Image ein neuer Container erstellt wird, wird auch eine beschreibbare Ebene erstellt. Diese Ebene wird als Container-Ebene bezeichnet und beherbergt alle Änderungen, die am laufenden Container vorgenommen werden. Diese Ebene verzeichnet das Speichern neuer Dateien, Änderungen an bestehenden Dateien und das Löschen von Dateien. Die beschreibbare Ebene ermöglicht die Anpassung des Containers. Alle Änderungen, die an der beschreibbaren Schicht vorgenommen werden, werden auf dieser Schicht gespeichert. Mehrere Container können sich dasselbe darunter liegende Basis-Image teilen und dank der beschreibbaren Ebene dennoch ihren eigenen Datenzustand haben.

Docker Image Repositories

Docker-Benutzer können Images in privaten oder öffentlichen Repositories speichern und von dort aus Container bereitstellen, Images testen und freigeben. Docker bietet mit Docker Hub einen Registry-Service in der Cloud an, der private und öffentliche Image-Repositories umfasst. Er verfügt auch über die Docker Trusted Registry, die Funktionen zur Image-Verwaltung und Zugriffskontrolle bietet.

Offizielle Images wurden von Docker erstellt, während Community Images von Docker-Benutzern erstellt werden. CoScale Agent ist ein Beispiel für ein offizielles Docker Image, das die Überwachung von dockerisierten Anwendungen ermöglicht. Ein Beispiel für ein Community Docker Image ist datadog/docker-dd-agent, ein Docker-Container für Agenten im Protokollverwaltungsprogramm Datadog.

Ein vorhandenes Image kann auch zur Erstellung eines neuen Images verwendet werden. Darüber hinaus können Benutzer ihr eigenes benutzerdefiniertes Image mit dem Docker-Push-Befehl auf den Docker-Hub hochladen. Um die Qualität der Community-Images zu gewährleisten, überprüft Docker das Image und gibt dem Urheber vor der Veröffentlichung Feedback. Nach der Veröffentlichung ist der Image-Autor für Aktualisierungen verantwortlich. Vorsicht ist geboten, wenn Images aus anderen Quellen bezogen werden, da Angreifer durch nachgeahmte Images Zugang zu einem System erhalten können.

Auch das Konzept eines aktuellen Images kann zu Verwirrung führen. Docker Images, die mit :latest getaggt sind, sind nicht unbedingt latest im eigentlichen Sinne. Dieser Tag bezieht sich nicht auf die zuletzt gedrückte Version eines Images. In Wirklichkeit wird dieser Tag standardmäßig vergeben.

Docker-Image-Befehle

Laut Docker gibt es eine Reihe von primären Docker-Image-Befehlen, die als untergeordnete Befehle kategorisiert sind. Hierzu gehören:

  • docker image build: Erstellt ein Image von einer Docker-Datei ausgehend.
  • docker image inspect: Zeigt informationen zu einem oder mehreren Images.
  • docker image load: Läd ein Image aus einem TAR-Archiv oder einem Datenstromzeiger für Input (STDIN).
  • docker image prune: Entfernt ungenutzte Images.
  • docker image pull: Zieht ein Image oder ein Repository von einer Registry.
  • docker image push: Schiebt ein Image oder ein Repository in eine Registry.
  • docker image rm: Entfernt ein oder mehrere Images.
  • docker image save: Speichert ein oder mehrere Images in ein TAR-Archiv (in den Voreinstellungen wird zu STDOUT gestreamt).
  • docker image tag: Erstellt das Tag target_image, das sich auf source_image bezieht.

Die Docker CLI ermöglicht es Nutzern, Befehle auszuführen, die Docker-Images anpassen. Beispiele für Docker-Befehle sind:

  • docker history: Zeigt die History eines Images, inklusive der Veränderungen am Image und seiner Ebenen.
  • docker update: Ermöglicht einem Nutzer, die Aktualisierung der Einstellungen eines Containers.
  • docker tag: Erstellt ein Tag, zum Beispiel target_image, anhand dessen Nutzer Container-Images gruppieren und organisieren können.
  • docker search: Sucht im Docker Hub nach dem eingegenen Begriff.
  • docker save: Speichert Images in einem Archiv.
  • docker compose: Anpassung von Umgebungs-Variablen.
Diese Definition wurde zuletzt im März 2020 aktualisiert

Erfahren Sie mehr über Containervirtualisierung

ComputerWeekly.de
Close