1. Home
  2. Linux
  3. Docker
  4. Docker – Grundlagen und Funktionsweise

Docker – Grundlagen und Funktionsweise

Lesedauer: 7 Minuten

Docker ist eine Plattform zur Bereitstellung und Ausführung von Anwendungen in sogenannten Containern. Ein Container enthält eine Anwendung zusammen mit den Bibliotheken, Laufzeitumgebungen und weiteren Abhängigkeiten, die sie für ihren Betrieb benötigt.

Dadurch lässt sich eine Anwendung weitgehend unabhängig von der konkreten Konfiguration des Hostsystems betreiben. Statt beispielsweise PHP, einen Webserver und weitere benötigte Komponenten direkt auf einem Server zu installieren und aufeinander abzustimmen, können diese Bestandteile in einer definierten Container-Umgebung bereitgestellt werden.

Docker wird deshalb häufig für Webanwendungen, Datenbanken, Entwicklungsumgebungen, Serverdienste und zunehmend auch für selbst gehostete Anwendungen eingesetzt.

Container statt virtueller Maschinen

Container erinnern zunächst an virtuelle Maschinen, funktionieren technisch jedoch anders.

Bei einer klassischen Virtualisierung stellt ein Hypervisor virtuelle Hardware bereit. Jede virtuelle Maschine besitzt darauf ein eigenes Betriebssystem mit eigenem Kernel. Auf einem Linux-Host können beispielsweise mehrere virtuelle Maschinen betrieben werden, von denen jede wiederum ein vollständiges Linux- oder Windows-System enthält.

Container virtualisieren dagegen nicht die Hardware, sondern isolieren Prozesse voneinander. Unter Linux verwenden die Container grundsätzlich den Kernel des Hostsystems gemeinsam. Technologien des Linux-Kernels wie Namespaces sorgen dabei für die Trennung von Prozessen, Netzwerken und anderen Ressourcen, während Control Groups (cgroups) unter anderem die Nutzung von CPU und Arbeitsspeicher kontrollieren können.

Dadurch benötigen Container normalerweise deutlich weniger Ressourcen als vollständige virtuelle Maschinen und können sehr schnell gestartet und beendet werden.

Ein Container ist daher kein „kleiner virtueller Rechner“, auch wenn er aus Sicht einer darin laufenden Anwendung teilweise so erscheinen kann.

Docker und Linux

Containerisierung ist nicht ausschließlich auf Linux beschränkt. Docker kann auch unter Windows und macOS verwendet werden. Die klassische Docker-Containerwelt basiert jedoch sehr stark auf Linux.

Linux-Container benötigen einen Linux-Kernel. Auf einem Linux-Server können sie deshalb direkt über die Container-Laufzeit ausgeführt werden. Auf Windows- und macOS-Systemen wird für Linux-Container dagegen üblicherweise eine zusätzliche Linux-Umgebung beziehungsweise eine leichtgewichtige virtuelle Maschine verwendet.

Daneben existieren auch Windows-Container, die auf entsprechenden Windows-Systemen betrieben werden können.

Gerade im Serverbereich ist Linux deshalb eine besonders häufige Plattform für Docker.

Images und Container

Zwei grundlegende Begriffe bei Docker sind Image und Container.

Ein Image ist eine unveränderliche Vorlage, aus der Container erzeugt werden. Es enthält beispielsweise die Anwendung, benötigte Bibliotheken, Programme und eine definierte Verzeichnisstruktur.

Aus demselben Image können beliebig viele Container gestartet werden. Der Container ist damit die konkrete laufende Instanz eines Images.

Vereinfacht kann man sich das Verhältnis ähnlich wie bei einer Vorlage und den daraus erzeugten Instanzen vorstellen:

Image → Container

Wird eine Anwendung aktualisiert, wird üblicherweise nicht der bestehende Container manuell verändert. Stattdessen wird ein neues beziehungsweise aktualisiertes Image verwendet und daraus ein neuer Container erzeugt. Container werden daher grundsätzlich als austauschbar betrachtet.

Woher kommen Images?

Images können selbst erstellt oder aus sogenannten Container Registries bezogen werden. Eine Registry ist ein zentraler Speicher für Container-Images.

Eine bekannte öffentliche Registry ist Docker Hub. Viele Softwarehersteller und Open-Source-Projekte stellen dort oder in anderen Registries fertige Images ihrer Anwendungen bereit.

Dabei ist allerdings zu beachten, dass ein Container-Image ausführbaren Programmcode enthält. Images sollten deshalb nicht beliebig aus unbekannten Quellen übernommen werden. Herkunft, Pflegezustand und Vertrauenswürdigkeit eines Images sind insbesondere bei öffentlich erreichbaren Diensten sicherheitsrelevant.

Dockerfile

Soll ein eigenes Image erstellt werden, wird dessen Aufbau normalerweise in einem Dockerfile beschrieben.

Darin wird beispielsweise festgelegt, welches vorhandene Image als Grundlage dient, welche Dateien hinzugefügt werden, welche Pakete benötigt werden und welcher Prozess beim Start des Containers ausgeführt werden soll.

Das Dockerfile ist damit eine reproduzierbare Beschreibung des Images. Anstatt einen Server oder Container einmalig von Hand einzurichten, wird die benötigte Umgebung in einer Datei definiert und kann daraus erneut erzeugt werden.

Persistente Daten und Volumes

Container sind grundsätzlich als austauschbare Instanzen gedacht. Das bedeutet jedoch nicht, dass mit dem Löschen eines Containers auch alle Daten einer Anwendung verloren gehen müssen.

Dauerhaft benötigte Daten werden deshalb außerhalb der eigentlichen beschreibbaren Container-Schicht gespeichert. Docker stellt dafür unter anderem Volumes bereit. Alternativ können Verzeichnisse des Hosts direkt in einen Container eingebunden werden.

Eine Datenbank kann beispielsweise in einem Container laufen, während ihre Daten in einem persistenten Volume gespeichert werden. Der Container kann anschließend ersetzt werden, ohne dass dadurch automatisch die Datenbank verloren geht.

Die Trennung zwischen Anwendung und persistenten Daten gehört zu den grundlegenden Konzepten beim Betrieb von Containern.

Netzwerk

Container können über virtuelle Netzwerke miteinander und mit anderen Systemen kommunizieren.

Docker kann für einen Container eigene Netzwerkumgebungen bereitstellen. Mehrere zusammengehörige Container können dadurch miteinander kommunizieren, ohne dass sämtliche verwendeten Ports unmittelbar im Netzwerk des Hosts erreichbar sein müssen.

Soll ein Dienst von außen erreichbar sein, können gezielt Ports des Hosts auf einen Container weitergeleitet beziehungsweise veröffentlicht werden.

So kann beispielsweise ein Webserver innerhalb eines Containers auf Port 80 lauschen, während Docker diesen Dienst über einen festgelegten Port oder eine bestimmte Netzwerkschnittstelle des Hosts erreichbar macht.

Anwendungen aus mehreren Containern

Komplexere Anwendungen bestehen häufig nicht aus nur einem Container.

Eine Webanwendung könnte beispielsweise aus einem Container für die eigentliche Anwendung, einem weiteren für eine Datenbank und einem zusätzlichen Dienst für einen Cache bestehen. Die einzelnen Container übernehmen jeweils eine klar abgegrenzte Aufgabe und kommunizieren über ein gemeinsames Container-Netzwerk miteinander.

Für solche Umgebungen wird häufig Docker Compose verwendet. Dabei wird die gesamte Anwendung mit ihren Containern, Netzwerken, Volumes und weiteren Einstellungen in einer Konfigurationsdatei beschrieben.

Eine komplette Anwendung kann dadurch reproduzierbar als zusammengehöriger Verbund bereitgestellt werden.

Vorteile von Docker

Ein wesentlicher Vorteil von Docker ist die weitgehend reproduzierbare Bereitstellung von Anwendungen. Benötigte Softwarestände und Abhängigkeiten können zusammen mit der Anwendung definiert werden, anstatt sämtliche Komponenten direkt auf dem Host installieren zu müssen.

Gleichzeitig sind Container vergleichsweise leichtgewichtig. Mehrere Anwendungen können voneinander getrennt auf demselben Server betrieben werden, obwohl sie beispielsweise unterschiedliche Versionen bestimmter Bibliotheken oder Laufzeitumgebungen benötigen.

Auch Updates und Migrationen können dadurch vereinfacht werden, weil Anwendungen und ihre Abhängigkeiten klarer voneinander getrennt sind.

Container sind keine Sicherheitsgrenze wie virtuelle Maschinen

Die Isolation von Containern verbessert die Trennung verschiedener Anwendungen, sie sollte jedoch nicht mit der Isolation vollständig virtualisierter Systeme gleichgesetzt werden.

Linux-Container teilen sich den Kernel des Hosts. Eine Schwachstelle im Kernel oder in der Container-Laufzeit kann deshalb grundsätzlich Auswirkungen über die Grenzen eines Containers hinaus haben. Auch zu weitreichende Berechtigungen, privilegierte Container oder unnötig eingebundene Verzeichnisse des Hosts können die Isolation erheblich reduzieren.

Docker ersetzt daher keine Sicherheitsmaßnahmen des Hostsystems. Der Host muss weiterhin gepflegt, aktualisiert und abgesichert werden. Ebenso müssen die verwendeten Images und die darin enthaltenen Anwendungen regelmäßig aktualisiert werden.

Docker als zusätzliche Abstraktionsschicht

Docker verändert letztlich die Art, wie Anwendungen auf einem System bereitgestellt werden.

Bei einer klassischen Installation werden Anwendung und Abhängigkeiten direkt auf dem Betriebssystem installiert:

Hardware → Betriebssystem → Anwendung

Bei einer containerisierten Bereitstellung kommt eine zusätzliche Ebene hinzu:

Hardware → Betriebssystem → Container-Laufzeit → Container → Anwendung

Diese zusätzliche Abstraktionsschicht ermöglicht es, Anwendungen und ihre Abhängigkeiten stärker vom eigentlichen Hostsystem zu trennen.

Docker ist damit weder eine virtuelle Maschine noch ein eigenes Betriebssystem. Es ist eine Plattform zur Verwaltung und Ausführung isolierter Anwendungsumgebungen auf Basis von Container-Technologien.

Wer die Begriffe Image, Container, Registry, Volume, Netzwerk, Dockerfile und Docker Compose einordnen kann, kennt bereits die wichtigsten Grundlagen, auf denen der praktische Umgang mit Docker aufbaut.

Loading

Updated on 29. September 2026
Was this article helpful?