Suchen

Definition „Docker“ Was sind Docker-Container?

| Autor / Redakteur: LineFeed / Stephan Augsten

Docker bringt das Konzept der Apps auf den Server. Ein Docker-Container enthält eine Anwendung, aber auch alle Ressourcen, die diese zur Laufzeit benötigt. Seine Vorteile kann Docker besonders gut in Cluster-Umgebungen und Rechenzentren entfalten.

Firma zum Thema

Docker hat den Begriff Container als Alternative zu virtuellen Maschinen überhaupt erst populär gemacht.
Docker hat den Begriff Container als Alternative zu virtuellen Maschinen überhaupt erst populär gemacht.
(Bild: Docker, Inc.)

In einem griffigen Satz gefasst ist Docker eine Virtualisierung ohne Virtualisierung. Die Technik dahinter heißt Containerisierung. Docker ist eine Implementierung der Container-Technologie, die sich durch besonders benutzerfreundliche Eigenschaften auszeichnet und den Begriff Container als Alternative zu virtuellen Maschinen überhaupt erst populär gemacht hat.

Ein Container fasst eine einzelne Anwendung mitsamt aller Abhängigkeiten wie Bibliotheken, Hilfsprogrammen und statischer Daten in einer Image-Datei zusammen, ohne aber ein komplettes Betriebssystem zu beinhalten. Daher lassen sich Container mit einer leichtgewichtigen Virtualisierung vergleichen.

Wesentliche Eigenschaften und Vorteile von Containern

Container benötigen weniger Ressourcen als virtuelle Maschinen, da sie auf das Starten eines eigenen Betriebssystems verzichten und stattdessen im Kontext des Host-Betriebssystems laufen. Trotzdem sind die Container gegeneinander und vom Host-System abgeschottet, wenn auch nicht so stark, wie bei einer Virtualisierung. Möglich machen das mehrere Linux Features, unter anderem Namespaces und Cgroups.

Docker-Container werden aus einem Container-Image gestartet, das als einfache Datei leicht von einem System auf ein anderes übertragbar ist. Installation, Update und Deinstallation einer Software reduziert sich daher auf einen einfachen Kopiervorgang beziehungsweise eine einzelne Dateilöschung.

Aus einem Docker-Image heraus lassen sich beliebig viele Container starten, da Schreibzugriffe nicht auf das Container-Image wirken, sondern jeweils auf ein eigenes Dateisystem, das dem Image überlagert ist. Für viele Anwendungen können fertige Container-Images vom Docker-Hub heruntergeladen und unmittelbar gestartet werden. Die Konfiguration ist so weit wie möglich bereits im Image eingerichtet. Variable Teile, wie die Netzwerkkonfiguration, werden beim Start automatisch angelegt.

Ein bedeutender Vorteil der Docker-Container ist die gute Skalierbarkeit. Werden zusätzliche Instanzen einer Anwendung benötigt, dann können einfach neue Container gestartet werden, und nach dem Stoppen sind sie wieder vollständig aus dem System verschwunden. Die Verwaltung einer größeren Anzahl von Containern erleichtern Werkzeuge für die Container-Orchestrierung, zum Beispiel Google Kubernetes.

Software-Voraussetzungen für Docker

Mit Linux Namespaces lassen sich seit Kernel-Version 2.4.19 einzelne Prozesse in einen vorgegebenen Unterbereich des Dateisystems einsperren. Das ähnelt einem klassischen Change Root, bei dem ein Prozess über den Systemaufruf chroot das für ihn selbst sichtbare Dateisystem auf einen Unterbaum des Gesamtsystems beschränkt. In späteren Versionen wurde das Namespace-Konzept auf weitere Ressourcen erweitert.

In der Linux-Kernel-Version 4.10 sind die zusätzlichen Namespaces Prozess-ID (PID), Netzwerk, Interprozess-Kommunikation (IPC), Host- und Domainnamen (UTS) und User-ID (UID) nutzbar. Jeder Namespace verwaltet einen eigenen Satz der entsprechenden Ressource, unabhängig vom Hauptsystem. Dadurch ist es zum Beispiel möglich, dass der Superuser root im Container mit der gewohnten UID 0 erscheint, im Hauptsystem aber eine unprivilegierte UID hat.

Linux Cgroups bieten eine ähnliche Funktionalität wie Namespaces, indem sie die verfügbaren Ressourcen für bestimmte Prozesse einschränken, beispielsweise den Hauptspeicher. Sie wirken aber auf Gruppen von Prozessen und ermöglichen darüber hinaus eine separate Berechnung des Ressourcenverbrauchs innerhalb der jeweiligen Gruppe, sowie das gemeinsame Einfrieren und Aufwecken der Prozesse.

Mit Linux Namespaces und Cgroups lassen sich wesentliche Eigenschaften eines Linux-Betriebssystems innerhalb eines Containers emulieren. Für die im Container laufende Software wirkt er daher wie ein eigenständiges System, ohne dass eine vollständige Virtualisierung nötig wäre.

Nachteile der Containerisierung

Der Verzicht auf den Einschluss eines Betriebssystems in den Inhalt der Container-Images bedeutet eine gegenüber der Virtualisierung reduzierte Abschottung. Ähnliches trifft aber ebenfalls auf die Virtualisierung zu, die eine schwächere Trennung gegenüber jeweils eigenen, dedizierten Servern bietet.

Gleichzeitig kann der Verzicht auf ein komplettes Betriebssystem im Container aber auch eine höhere Sicherheit bieten, da ausschließlich die Software vorhanden sein muss, die von der Anwendung im Container benötigt wird. Das reduziert die Anzahl generischer Werkzeuge des Betriebssystems, die ein Angreifer ausnützen könnte.

Docker auf anderen Systemen als Linux

Docker ist zwar im Linux-Umfeld entstanden und entsprechend fokussiert sich die Beschreibung in diesem Text auf Linux-Betriebssysteme. Docker-Container lassen sich mittlerweile aber ebenfalls unter Mac OS und Windows nutzen, in Windows 10 beispielsweise auch nativ über Hyper-V.

(ID:44623069)