Docker

Docker für Softwareentwickler: Einstieg und Grundlagen (Teil 1)

Docker revolutioniert die Softwareentwicklung, indem es eine konsistente und portable Umgebung für Anwendungen bereitstellt. Der Einsatz von Containern ermöglicht Entwicklern, eine Anwendung in einer einheitlichen Umgebung auszuführen, unabhängig vom Host-System. Dieser Abschnitt erklärt die Grundlagen von Docker und vergleicht Container mit virtuellen Maschinen, um die Vorteile für moderne Entwicklungsprozesse aufzuzeigen.

Illustration: Code-Editorfenster und Terminals speisen einen leuchtenden Container-Würfel, aus dem Verbindungen zu mehreren kleinen Container-Würfeln führen KI-generiertes Bild

Einführung: Was ist Docker?

In der modernen Softwareentwicklung ist die Nachfrage nach Flexibilität, Geschwindigkeit und Konsistenz so groß wie nie zuvor. Entwickler arbeiten ständig daran, Code zu schreiben, zu testen und zu deployen – ein Prozess, der oft von zahlreichen Hindernissen und Schwierigkeiten begleitet wird. Hier kommt Docker ins Spiel, ein Tool, das die Art und Weise, wie Software entwickelt und bereitgestellt wird, revolutioniert hat. Doch was genau ist Docker, und warum ist es so nützlich für Entwickler?

Was ist Docker?

Docker ist eine Open-Source-Plattform, die Entwicklern ermöglicht, Anwendungen in sogenannten Containern zu verpacken, zu verteilen und auszuführen. Container sind in gewisser Weise mit virtuellen Maschinen (VMs) vergleichbar, aber sie unterscheiden sich in ihrer Funktionsweise und Flexibilität.

  • Container: Ein Container ist eine leichtgewichtige, eigenständige Ausführungsumgebung, die alle notwendigen Dateien, Bibliotheken und Abhängigkeiten enthält, um eine Anwendung konsistent und unabhängig von der Umgebung auszuführen. Im Gegensatz zu VMs, die ein komplettes Betriebssystem emulieren, teilt ein Docker-Container den Kernel des Host-Betriebssystems, was ihn deutlich ressourceneffizienter und schneller macht.
  • Docker Engine: Das ist die Client-Server-Anwendung, die Container erstellt und ausführt. Sie besteht aus dem Daemon dockerd, der Images, Container, Netzwerke und Volumes verwaltet, der Docker-API und der Docker-CLI als Client. Docker Desktop ist ein Produkt, das die Engine zusammen mit einer grafischen Oberfläche und weiteren Werkzeugen für den Arbeitsplatz bündelt – nicht die Engine selbst. Die Orchestrierung vieler Container übernehmen Werkzeuge, die auf der Engine aufsetzen.
Diagramm: Schichten Docker-Container, Docker Engine, Host-Betriebssystem und Infrastruktur übereinanderKI-generiertes Bild
Docker Container

Docker vereinfacht die Bereitstellung von Anwendungen erheblich, da ein Container überall ausgeführt werden kann – sei es auf einem lokalen Computer, einem Server in der Cloud oder auf einem On-Premises-Server. Diese Portabilität ist ein großer Vorteil, der Entwicklern eine nie dagewesene Flexibilität bietet.

Warum ist Docker für Entwickler so interessant?

Die Containerisierung mit Docker hat den Entwicklungsprozess in vielerlei Hinsicht verändert. Früher war die Einrichtung einer Entwicklungsumgebung oft mühsam und zeitaufwendig. Entwickler mussten sicherstellen, dass die Umgebung, in der sie ihren Code ausführen, identisch mit der Produktionsumgebung ist, um Fehler zu vermeiden. Jede Änderung an den Systemkonfigurationen konnte zu unerwarteten Problemen führen. Docker vereinfacht diesen Prozess, indem es eine einheitliche und konsistente Umgebung bietet.

Docker ermöglicht es, eine Anwendung einmal zu verpacken und sie dann auf jedem System auszuführen, das Docker unterstützt – ohne dass weitere Anpassungen erforderlich sind. Diese Flexibilität reduziert den Zeitaufwand für das Setup erheblich und beseitigt viele der traditionellen Probleme der Softwareentwicklung.

Screenshot: Docker Desktop mit der Container-Übersicht, drei laufende Container einer Compose-Anwendung mit CPU- und Speicheranzeige
Docker Desktop

Docker vs. Virtuelle Maschinen: Der Vergleich

Um den Nutzen von Docker wirklich zu verstehen, ist es hilfreich, Docker-Container mit herkömmlichen virtuellen Maschinen zu vergleichen.

Feature Docker-Container Virtuelle Maschinen
Ressourcenverbrauch Gering, teilt den Host-Kernel Hoch, emuliert komplettes OS
Startzeit Sehr schnell (Sekunden) Langsam (Minuten)
Portabilität Hoch, läuft überall mit Docker Engine Eingeschränkt, erfordert VM-Software
Isolation Prozess-Isolation Vollständige OS-Isolation
Größe Leicht (MBs) Schwer (GBs)

Gegenüberstellung von Docker und VM

Docker-Container sind wesentlich ressourceneffizienter als VMs, da sie nicht jedes Mal ein vollständiges Betriebssystem emulieren müssen. Stattdessen nutzen sie den Kernel des Host-Betriebssystems und kapseln nur die für die Anwendung notwendigen Ressourcen und Abhängigkeiten. Das Ergebnis ist eine schlankere und schnellere Umgebung, die Entwickler optimal nutzen können.

Im nächsten Abschnitt werde ich näher auf die Probleme eingehen, die bei der Softwareentwicklung ohne Docker auftreten, und aufzeigen, wie Docker diese Herausforderungen löst.

Quellen