© Excellent backgrounds/Shutterstock.com
System-Level-Virtualisierung für Linux

Docker


Dieser Artikel stellt Docker im Detail vor und zeigt, wie man hundert virtuelle Maschinen auf seinem Entwicklernotebook 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 Back-ups 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 sie viele Ressourcen verbrauchen, da stets ein gesamter Rechner emuliert und ein Betriebssystem-Kernel 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. Anhand von mehreren Beispielen wird Docker 0.10 vorgestellt. Diese Beispiele sind vollständig bei GitHub [2] verfügbar.

Was ist Docker?

Docker hat in den letzen sechs Monaten sehr viel Traktion entwickelt und wird in Distributionen von Red Hat und Ubuntu ausgeliefert. Firmen wie eBay und CenterDevice setzen Docker bereits produktiv ein. Die geschickte Kombination aus Laufzeitumgebung und Image Repository erleichtert den Einsatz von virtuellen Maschinen enorm. Damit ist Docker ein hervorragendes Werkzeug, um die tägliche Arbeit von Entwicklern und Administratoren zu vereinfachen.

Docker baut auf dem Linux-Container-(LXC-)Projekt [3] auf, das spezielle Kernel-Funktionalitäten nutzt, um einzelne Prozesse voneinander zu isolieren. Für Prozesse, die mit Linux-Containern gestartet werden, scheint es so, als würden sie auf einem eigenen System laufen.

Die Basis von Linux-Containern sind Kernel Name­spaces, cgroups und Container Templates. Kernel Namespaces ermöglichen es, wie Java Packages eigene Namensräume für Prozesse zu erzeugen. Prozess-IDs, Mount Points, Netzwerkgeräte etc. können so pro Prozess wiederverwendet werden. Zum Beispiel können zwei Prozesse auf die Netzwerkschnittstelle eth0 zugreifen, die jedoch tatsächlich vom Kernel auf die zwei physikalischen Schnittstellen eth1 und eth2 gemappt werden. Die Prozesse bekommen davon nichts mit. cgroups sind eine Kernelerweiterung, die ursprünglich von Google entwickelt worden ist und es erlaubt, Ressourcenbeschränkungen auf Prozessebene zu definieren. Damit lässt sich zum Beispiel festlegen, wie viel Speicher ein Prozess nutzen darf. Container-Templates sind eine Konvention einer Verze...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang