Was ist Docker und wie funktionieren Container?
Autor: Redaktion Domeny.ForSale Veröffentlicht
Kurz erklärt: Docker ist eine Plattform zum Erstellen und Ausführen von Anwendungen in Containern, also isolierten Umgebungen mit den benötigten Bibliotheken und Werkzeugen. Sie hilft, auf dem Entwicklungsrechner, bei Tests und auf dem Server ähnliche Bedingungen herzustellen. Sie ersetzt weder das Hosting noch ist sie eine vollständige virtuelle Maschine.
Wie Docker funktioniert und was ein Container ist
Eine Anwendung braucht nicht nur Code, sondern auch eine Laufzeitumgebung: etwa eine bestimmte Python-Version, Bibliotheken und Systemwerkzeuge. Unterscheiden sich diese Komponenten von Rechner zu Rechner, kann das Programm bei einer Person funktionieren und bei einer anderen Fehler melden. Docker hilft, diese Abhängigkeiten reproduzierbar zu beschreiben und bereitzustellen.
Ein Container ist ein laufender Prozess oder eine Gruppe von Prozessen, die vom übrigen System isoliert sind. Die Anwendung sieht ein eigenes Dateisystem und arbeitet in einer abgegrenzten Umgebung. Auch Ressourcen wie Arbeitsspeicher und Prozessorleistung lassen sich begrenzen.
Container teilen sich den Systemkernel, der unter anderem für die Verwaltung von Prozessen und Hardware zuständig ist. In einer typischen Linux-Umgebung nutzen sie den Kernel des Hostsystems. Werden Linux-Container mit Docker Desktop auf macOS und Windows ausgeführt, ist eine Linux-Schicht erforderlich. Diese wird durch eine virtuelle Maschine oder einen Mechanismus wie WSL 2 bereitgestellt.
Docker verringert Unterschiede zwischen den Umgebungen, beseitigt sie aber nicht vollständig. Die Prozessorarchitektur, die Konfiguration, der Netzwerkzugang und externe Dienste, mit denen sich die Anwendung verbindet, bleiben relevant.
Image, Dockerfile und Volume – die Grundbegriffe
Um ein typisches Projekt zu verstehen, genügt es, einige Bestandteile zu unterscheiden:
- Image – eine fertige Vorlage mit den Anwendungsdateien, ihren Abhängigkeiten und den zum Starten benötigten Informationen. Aus einem Image lassen sich mehrere Container starten.
- Dockerfile – eine Textdatei mit Anweisungen zum Erstellen eines Images, etwa zur Auswahl des Basis-Images, zur Installation von Bibliotheken und zum Kopieren des Codes.
- Image-Registry – ein Ort zum Speichern und Bereitstellen von Images. Ein Beispiel ist Docker Hub; eine Organisation kann auch eine private Registry nutzen.
- Volume – ein von Docker verwalteter Datenspeicher, dessen Lebenszyklus unabhängig von einem einzelnen Container ist.
- Docker Compose – ein Werkzeug, mit dem sich mehrere zusammengehörige Dienste in einer Datei beschreiben und gemeinsam starten lassen.
Der Unterschied zwischen einem Image und einem Container ähnelt dem Unterschied zwischen einer Dokumentvorlage und einem geöffneten Dokument, das auf dieser Vorlage beruht. Das Image bleibt der Ausgangspunkt, während jeder Container einen eigenen Laufzeitzustand und eine beschreibbare Dateischicht hat.
Datenbankdaten sollten nicht ausschließlich in der beschreibbaren Schicht des Containers gespeichert werden. Das bloße Stoppen des Containers löscht sie nicht. Wird der Container jedoch gelöscht, geht diese Schicht verloren. Ein Volume ermöglicht es, die Daten beim Austausch des Containers zu behalten. Es ersetzt aber kein Backup und kann ebenfalls gelöscht werden.
Docker im Vergleich zur virtuellen Maschine
Eine virtuelle Maschine führt ein separates Betriebssystem mit eigenem Kernel aus. Ein Container benötigt kein vollständiges Gastbetriebssystem, da er einen gemeinsamen Kernel nutzt. Deshalb starten Container in der Regel schneller und benötigen für ihren Betrieb weniger zusätzliche Ressourcen als vollständige virtuelle Maschinen.
Das bedeutet nicht, dass Docker immer die bessere Wahl ist. Eine virtuelle Maschine ist sinnvoll, wenn du ein separates Betriebssystem, einen anderen Kernel oder eine stärkere Isolation benötigst. Container eignen sich gut zum Paketieren und Ausführen von Anwendungsdiensten. Ihre Isolation sollte jedoch nicht mit der einer separaten Maschine gleichgesetzt werden.
Diese Lösungen werden häufig gemeinsam eingesetzt: Auf einem gemieteten virtuellen Server lässt sich Docker betreiben und darin mehrere Container ausführen. Das Hosting stellt dabei die Ressourcen bereit, während Docker das Starten und Ausführen der Anwendungen strukturiert.
Beispiel: Website mit Anwendung und Datenbank
Angenommen, du entwickelst eine Website mit einem Kundenbereich. Das Projekt benötigt eine Python-Anwendung und eine PostgreSQL-Datenbank. Ohne Container muss jedes Teammitglied selbst passende Versionen beider Komponenten installieren und ihr Zusammenspiel konfigurieren.
Mit Docker Compose lassen sich zwei Dienste beschreiben: die Anwendung und die Datenbank. Jeder läuft in einem eigenen Container; die Kommunikation erfolgt über ein gemeinsames Netzwerk. Die PostgreSQL-Daten werden in einem Volume gespeichert, und ein ausgewählter Port der Anwendung wird auf dem Rechner des Nutzers zugänglich gemacht.
Ein typischer Arbeitsablauf sieht so aus:
- Das Team hält die Anweisungen zum Erstellen des Anwendungs-Images in einer Datei namens Dockerfile fest.
- In der Compose-Datei legt es die Dienste, das Netzwerk, das Volume und die erforderlichen Einstellungen fest.
- Ein Entwickler lädt das Projekt herunter, ergänzt die lokale Konfiguration und führt
docker compose up --buildaus. - Docker erstellt das Image der Anwendung, lädt das benötigte Datenbank-Image herunter und startet die Container.
Der Befehl funktioniert nur in einem entsprechend vorbereiteten Projekt und bei laufendem Docker. Beim Bereitstellen auf einem Server musst du dich weiterhin um Passwörter, ein TLS-Zertifikat, Backups, Updates und Monitoring kümmern. Eine lokale Konfiguration ist nicht automatisch eine sichere Konfiguration für den Produktivbetrieb.
Wann sich Docker lohnt und wie du anfängst
Docker ist besonders hilfreich, wenn ein Projekt mehrere Dienste umfasst, das Team eine einheitliche Umgebung benötigt oder die Anwendung häufig auf einem Server bereitgestellt wird. Außerdem erleichtert es das Testen verschiedener Versionen von Abhängigkeiten, ohne sie direkt im Hauptsystem zu installieren.
Bei einer einfachen statischen Website oder einem einzelnen Skript können die zusätzlichen Dateien und die Verwaltung der Container unnötigen Aufwand verursachen. Auch gewöhnliches Shared Hosting erlaubt nicht unbedingt den Betrieb von Docker – das musst du beim Anbieter erfragen.
Wähle für den Einstieg ein kleines Projekt und starte einen einzelnen Dienst. Nutze ein vertrauenswürdiges Image, lies dessen Dokumentation und gib nur die benötigten Ports frei. Prüfe in der offiziellen Docker-Dokumentation die Installationsanleitung für dein Betriebssystem sowie die aktuellen Lizenzbedingungen von Docker Desktop, insbesondere vor dem Einsatz im Unternehmen.
Siehe auch: Was ist ein CDN?
