Docker einfach erklärt (und was ist Kubernetes?)

Zuletzt aktualisiert am 17. Oktober 2023 von Lars

Wenn du in der IT unterwegs bist, wirst du immer mal wieder von Docker und Kubernetes hören. Damit du hier weisst, worum es geht, hier die wichtigsten theoretischen Informationen.

Problemstellung Anwendungsbereitstellung

Betrachten wir zunächst, worum es bei Docker geht: Docker hilft bei der Bereitstellung von Anwendungen. Wenn du eine Anwendung bereitstellen möchtest, musst du nicht nur das Programm, sondern auch viele Abhängigkeiten wie Bibliotheken, Betriebssystem-Spezifikationen und externe Dienste berücksichtigen. Man denke hier zum Beispiel an die DLL Dateien, die ein Windows-Programm in der Regel benötigt.

Früher gab es dafür zwei Hauptlösungen: klassische Installer oder virtuelle Maschinen. Beide hatten ihre Vor- und Nachteile.

Klassischer Installer

Vorteil des Installers ist seine Kompaktheit und die einfache Ausführbarkeit auf jedem Zielsystem. Problematisch wird es aber, wenn auf dem Zielsystem spezielle Konfigurationen vorhanden sein müssen, wie zum Beispiel eine bestimmte Datenbankversion, damit die Applikation einwandfrei funktioniert.

Virtuelle Maschine

Nachteil von virtuellen Maschinen ist deren Grösse. Sie enthalten immer das komplette Bestriebssystem, Bei lizenzpflichtigen Betriebssystemen wird zudem immer eine eigene Lizenz benötigt. Dafür sind virtuelle Maschinen in der Regel recht universell einsetzbar.

Siehe auch: Was ist Virtualisierung?

Lösung mit Docker

Docker nutzt das Konzept von sogenannten Linux Containern. Statt eine komplette virtuelle Maschine für jede Anwendung zu starten, isoliert Docker einfach den Prozess der Anwendung. Das bedeutet, dass mehrere Docker-Container den gleichen Betriebssystemkern nutzen können, wodurch sie leichter und schneller sind.

Docker (Container) Schemabild
Container: Jeder Container greift auf den gleichen Linux-Kernel zu.

Der Nachteil der Nutzung der Betriebssystemkern ist aber, dass auf einem Linux nur eine Linux-Applikation laufen kann und nicht zum Beispiel eine Windows-Applikation, wie das mit Virtualisierung möglich wäre.

Klassische Virtualisierung im Gegensatz zu Docker: Auf der Hardware läuft der sogenannte Hypervisor. Auf diesem laufen dann komplette Betriebssysteme (Guest OS) virtuell voneinander getrennt.

Wie funktioniert das?

Die Idee hinter der "Containerisierung" ist, einen Prozess und all seine Abhängigkeiten in einem "Image" zu verpacken. Wenn dieses Image (oder Archiv) gestartet wird, packt Docker es in einen Container und führt es aus. Dies ist der Vorgang der "Containerisierung".

Das ist aber stark vereinfacht ausgedrückt. Ein Container kann aus mehreren sogenannten Layern bestehen, die quasi übereinander gelegt werden können. Dadurch wird RAM gespart.

Beim Neustart eines Containers werden alle bestehenden Daten verworfen und es wird quasi wieder bei Null gestartet.

Wenn konstante Daten benötigt werden, werden sogenannte Volumes mit eingebunden. Volumes können in mehreren Containern eingebunden (gemountet) werden.

Docker wurde entwickelt, um die Verwendung von Linux Containern für Entwickler zu vereinfachen. Es ist im Wesentlichen ein Kommandozeilen-Tool und ein Betriebssystem-Service (=Daemon), der den Prozess steuert.

Docker auf Nicht-Linux Systemen

Wenn du ein MacOS- oder Windows-Benutzer bist, benötigst du eine virtuelle Maschine, um Docker auszuführen. Mit Produkten wie "Docker for Mac" oder "Docker for Windows" ist dies nahtlos möglich und erfordert minimalen Overhead.

Vor- und Nachteile von Docker

Vorteile von Docker

Die Liste der Vor- und Nachteile von Docker ist nicht abschliessend. Sie listet nur einige wichtige Punkte für Einsteiger auf.

  • Docker-Container sind leichtgewichtig und schnell.
  • Sie bieten eine bessere Isolation als klassische Installer.
  • Sie sind ressourceneffizient und so können viele Container auf einem System ausführen.

Nachteile von Docker

  • Da alle Container denselben Kernel verwenden, kann ein Kernel-Exploit in einem Container potenziell das gesamte Host-System beeinflussen.
  • Isolierung: Die Isolierung zwischen Containern ist nicht so stark wie die von echten virtuellen Maschinen.
  • Das Arbeiten mit Anwendungen, die Daten speichern müssen (z.B. Datenbanken) kann komplizierter sein.

Und was ist Kubernetes?

Auch wieder stark vereinfacht - Kubernetes ist:

  • Ein System zur Verwaltung eines Clusters (Verbund) von Docker-Containern.
  • Bietet automatisierte Planung und Verwaltung von Containern (beispielsweise Verschieben zwischen mehreren Servern).
Du willst meine Arbeit unterstützen? Dann freue ich mich über eine kleine Spende!

Schreibe einen Kommentar