Entwickler Spezial 03/15

Docker Basics: Einführung in die System-Level-Virtualisierung

Autor:

Möchte man sich tiefer in eine neue Technologie einarbeiten, ist fundiertes Grundlagenwissen unabdingbar. Zum Auftakt dieses Entwickler Magazin Spezials möchten wir Sie deshalb in die Basics von Docker einführen. Dabei wird unter anderem demonstriert, wie man hundert virtuelle Maschinen auf einem eigenen Rechner starten kann. Alle Beispiele können von GitHub heruntergeladen und ausprobiert werden.

Der Einsatz von virtuellen Maschinen hat viele Vorteile. Sie lasten Hardware besser aus, man kann leicht Backups machen und einzelne Dienste auf einer Hardware voneinander isolieren. Virtuelle Maschinen haben aber auch Nachteile. Ihre Images sind meist mehrere Gigabytes groß und sperrig. Wesentlicher ist jedoch, dass virtuelle Maschinen viele Ressourcen verbrauchen, da stets ein gesamter Rechner emuliert und ein Betriebssystemkernel gestartet werden muss. Docker [1] ist eine leichtgewichtige Alternative, die System-Level-Virtualisierung unter Linux nutzt und so die Vorteile von virtuellen Maschinen ohne die genannten Nachteile erreicht. Dieser Einführungsartikel bezieht sich auf die Docker-Version 1.2.0. Alle Beispiele sind vollständig auf GitHub unter [2] verfügbar.

Was ist Docker?

Docker hat in diesem Jahr sehr viel Traktion entwickelt und wird in aktuellen Distributionen von Red Hat und Ubuntu ausgeliefert. Firmen wie Spotify, Google, BBC, eBay, CenterDevice und seit Kurzem auch Zalando (Interview auf Seite 94) setzen Docker bereits produktiv ein. Die geschickte Kombination aus Laufzeitumgebung und Image Repository erleichtert den Einsatz von virtuellen Maschinen enorm. Zur Unterscheidung von Hypervisor-basierten virtuellen Maschinen wird von System-Level-basierten virtuellen Maschinen oder einfach Containern gesprochen. Damit ist Docker ein hervorragendes Werkzeug, um die tägliche Arbeit von Entwicklern und Administratoren zu vereinfachen.
Docker nutzt spezielle Kernelfunktionalitäten, um einzelne Prozesse in Containern voneinander zu isolieren. Für Prozesse, die mit Containern gestartet werden, scheint es so, als würden sie auf einem eigenen System laufen. Bis Version 0.8.1 setzte Docker für die Prozessisolation das Linux-Containers-Projekt (LXC, [3]) ein. Seit Version 0.9 bringt Docker eine eigene Containerbibliothek namens libcontainer [4] mit. LXC wird jedoch weiterhin unterstützt.
Die Basis von Linux-Containern sind Kernel-Namespaces, cgroups und Containertemplates. Wie Java Packages ermöglichen Kernel-Namespaces eigene Namensräume für Prozesse zu erzeugen. Prozess-IDs, Mount Points, Netzwerkgeräte und mehr können so pro Prozess wiederverwendet werden. (…)

Vollständiger Artikel