Softwareentwicklung

Docker

Kurz: Docker ist eine Containerisierungstechnologie, die auf dem Linux Kernel basiert. Diese Technologie ermöglicht die isolierte Ausführung mehrerer Anwendungen auf einem Linux-System.

Containerisierung ist das Äquivalent der Abstraktion zwischen Betriebssystem und Anwendung, so wie das Betriebssystem die Abstraktion zwischen Hardware und Software schafft.

Hinter dieser kurzen Beschreibung verbirgt sich mehr, als sich in wenigen Sätzen zusammenfassen lässt.

Artikel
Docker Befehle
Ein Blick in die Vergangenheit
Docker unter Windows

Was ist Docker?

Wenn ein Programmierer von Docker spricht, meint er oft die Containerisierungstechnologie. Diese ermöglicht es, eine Anwendung mit all ihren Abhängigkeiten in ein Paket (ein sogenanntes Docker Image) zu verpacken. Dieses Docker Image kann dann in einer Container Registry veröffentlicht werden.

Diese Beschreibung ähnelt der Beschreibung einer exe-Datei oder einer ausführbaren Datei. Wie eine exe-Datei kann auch ein Docker Image ausgeführt werden, diese laufendende Instanz der Anwendung wird Container genannt. Der Unterschied zu einer ausführbaren Datei besteht darin, dass ein Docker-Image vereinfacht gesagt, mehrere ausführbare Dateien sowie jeden anderen Dateityp beinhalten kann.

Ein Container kann auf jedem System mit Docker ausgeführt werden. Hierfür müssen außer Docker keine anderen Abhängigkeiten installiert sein.

Vorteile

Durch die Abstraktion der Anwendung in Docker Images ergeben sich einige Vorteile:

  1. Das Docker Image beinhaltet alle Abhängigkeiten, Runtimes, etc.
    Dies behebt das "Works on My Machine"-Problem in vielen Fällen, da das Innere des Docker Images auf jedem System identisch ist, unabhängig von der installierten Software auf dem ausführenden Rechner.
    Außerdem wird die Ausführung unterschiedlicher Versionen erleichtert. Beispielsweise können mehrere Container mit unterschiedlichen PHP-Versionen betrieben werden, ohne dass diese etwas voneinander wissen.
  2. Das ausführende System sammelt weniger Datenmüll an:
    Bei einem klassischen Webserver fallen durch die verschiedenen PHP-Versionen beispielsweise im Laufe der Zeit viele ungenutzte Konfigurationsdateien an.
    Beim Arbeiten mit Containern ist nach dem Löschen des alten Standes des Container Images keine Spur mehr von der alten PHP-Version zu sehen.
  3. Der Umzug bzw. das Einrichten des Systems wird vereinfacht:
    Bei einem klassischen Server müssen ggf. verschiedene Abhängigkeiten und Laufzeiten für die auszuführenden Anwendungen installiert und konfiguriert werden.
    Durch die Verwendung von Containern kann die Einrichtung nahezu auf die Installation von Docker und das Starten der Container reduziert werden.

Was ist ein Docker Image?

Ein Docker Image besteht aus mehreren Schichten einer Ordnerstruktur, die übereinander gelegt werden, um eine temporäre Ordnerstruktur zu erzeugen, die bei der Ausführung genutzt wird. Diese Beschreibungen der Schichten werden Layers genannt. Zusätzlich enthält das Image einen Befehl, der beim Start des Containers ausgeführt wird, und Metadaten wie Erstellungszeit, Autor, etc.

Was ist ein Container?

Ein Container ist die ausgeführte Instanz eines Docker Images. Die Containerisierungstechnologie verwendet die Layers, um daraus ein temporäres Dateisystem zu erstellen und in diesem Kontext den Befehl auszuführen, der für den Start des Containers im Docker Image hinterlegt ist. Dies kann z.B. das Starten des Apache Webservers oder das Ausführen eines Skriptes sein.

Was ist eine Container Registry?

Eine Container Registry wird zur Speicherung und Bereitstellung von Docker Images verwendet.

Docker Hub ist wahrscheinlich die bekannteste Registry und auch der Standard, wenn man über Docker ein Image herunterladen möchte. Daneben gibt es noch weitere Anbieter, wie GitHub, Azure, etc.

Eine Container Registry kann öffentlich sein, wie z.B. Docker Hub. Es können aber auch private Registries verwendet werden. In diesem Fall ist für den Lese- und Schreibzugriff eine Anmeldung erforderlich.

<- Zurück zu Softwareentwicklung