Container-Virtualisierung

Sandboxing mit Docker - Anwendungen in Container packen

02.07.2014 von Thomas Drilling
Das Projekt Docker, das unter anderem Anwendungen samt Abhängigkeiten in virtuelle Container packt, die dann auf allen Linux-Systemen laufen, hat sich innerhalb eines Jahres vom Nobody zu einer der momentan spannendsten Technologien entwickelt. Inzwischen hat Docker Inc. die lang erwartete erste stabile Version 1.0 veröffentlicht.

Das Unternehmen Docker Inc. hat auf der am 09. und 10. Juni in San Francisco stattgefundenen ersten Docker-Konferenz dockercon14 die von vielen Nutzern und Unternehmen erwartete stabile Version 1.0 von Docker, sowie einen neuen Cloud-Dienst Docker Hub vorgestellt. Hierbei handelt es sich um ein zentrales Repositiory, dass bis Redaktionsschluss rund 14000 "dockerisierte" Apps zum Herunteladen und Verwenden bereithält; viele davon kostenlos.

Beispielloser Aufstieg

Docker Inc. konnte sich im Januar dieses Jahres 15 Millionen US-Dollar Risikokapital sichern. Daran spiegelt sich die Einschätzung der Geldgeber wider, dass eine Virtualisierungstechnologie, die im Gegensatz zu vollwertigen virtuellen Maschinen viel weniger Ressourcen verschlingt, Zukunft hat. Docker gebührt die Anerkennung, die an sich nicht neue Container-Virtualisierung industrialisiert und salonfähig gemacht zu haben, denn viele Unternehmen haben die Phase der Server-Konsolidierung bereits abgeschlossen und profitieren von virtualisierten Anwendungen in Docker-Containern in mehrfacher Hinsicht.

Im Westen nichts Neues

Die X86-Server-Virtualisierung steht bei IT-Managern aller Unternehmensgrößen seit mehr als 10 Jahren ganz oben auf der Agenda. Der Markt und die verfügbaren Produkte gelten als gereift und die Vorteile der Server-Konsolidierung, wie etwa das Einsparpotenzial bei Energie- und Betriebskosten, das Vermeiden von Abhängigkeiten (Vendor-Lockin), die schnelle Provisionierbarkeit neuer Server, die Steigerung der Verfügbarkeit und Effizienz, die Fähigkeit zum Isolieren von Anwendungen oder die sichere Weiterverwendbarkeit "älterer" Anwendungen stellt niemand in Frage.

Das Virtualisieren von Servern, Speicher, Netzwerken oder Anwendungen bedeutet nicht mehr und nicht weniger als das Aufheben der "festen Verdrahtung" von Hardware, Betriebssystem und Anwendung, eine entscheidende Voraussetzung für die Industrialisierung der IT insgesamt, welche damit selbst zu einem standardisierbaren Service mutiert. Virtualisierung ist das Mittel für einen effizienteren Umgang mit IT-Ressourcen und die Grundlage für Cloud Computing. Marktführer VMware spricht inzwischen von einer zweiten und dritten Phase der Virtualisierung. Je nach zitierter Studie laufen bis zu 70 Prozent aller Server weltweit virtuell. Trotzdem bietet der Markt noch Potenzial etwa im Bereich der Desktop- und Anwendungsvirtualisierung.

Server-Virtualisierung und was dann?

Bei vielen Unternehmen ist die Phase der Server-Konsolidierung abgeschlossen, bzw. Tagesgeschäft. Die Desktop-Virtualisierung ist für viele zwar konzeptionell interessant, schreckt aber häufig durch Ihre Komplexität und den Ressourcen-Bedarf. Dem tragen die Hersteller von VDI-Lösungen dadurch Rechnung, dass Produkte wie etwa VMwares neue Version 6 von View/Horizon HTTPS/HTML5 Sitzungs-basierte Desktops (RD Session Host) oder einzelne Anwendungen bereitstellen können.

Vielen Unternehmen genügt es nämlich völlig, einzelne Anwendungen virtualisiert betreiben zu können. Dazu sind zahlreiche Szenarien vorstellbar. So lassen sich etwa ältere geschäftskritische Anwendungen, für die sich das Pflegen einer eigenen Betriebssystem-Umgebung nicht lohnt oder nicht möglich ist, trotzdem relativ einfach bereit stellen. Meist geht es aber bei Anwendungs-Containern um Sicherheit und Portabilität. Bei einer in einen virtuellen Container gesperrten Anwendung können Administratoren gezielt beeinflussen, welche Ressourcen der Applikation, abhängig vom Host-Ökosystem zur Verfügung stehen und damit bei einem Angriff oder Sicherheitsleck die Schadens-Reichweite begrenzen.

Hinzu kommt der Komfort beim Provisionieren, der sich durch die Portabilität mittels Containern virtualisierter Anwendungen ergibt. Dabei ist Anwendungs-Virtualisierung keineswegs neu. Blendet man Mainframe-Technologien aus und schaut auf die x86-Virtualisierung, stehen mit Solaris Zones, BSD Jails oder Virtuozzo/OpenVZ und LXC für Linux-basierte Umgebungen seit langem entsprechende Technologien zur Verfügung, die vor allem Internet-Service-Provider nutzen. Parallels Virtuozzo, die kommerzielle OpenVZ-Variante ist beispielsweise eine Technologie, die hinter vielen vServern und Web-Spaces dieser Welt steht.

LXC als Docker-Wegbereiter

In Verlauf der vergangenen zwei Jahre hat insbesondere LXC (Linux Containers) enorm an Popularität gewonnen, dessen Code abgesehen von entsprechenden User-Space-Tools im Gegensatz zu OpenVZ seit einiger Zeit offizielle Bestandteil des Vanilla-Kernels ist. Technisch betrachtet ist LXC eine Technologie, die einen Prozess unter Zuhilfenahme von chroot/pivot_root in einen mit Namespaces, Capabilities und Cgroups ausgestatteten Container packt.

Aus Sicht des Host-System ist jeder Container ein gewöhnlicher Prozess mit einer PID. Architektonisch besteht LXC aus dem im Vanilla-Kernel enthaltenen Code, einer Programmbibliothek, verschiedenen APIs, einer Reihe von Tools zum Verwalten und Steuern der Container, sowie den Container-Vorlagen. Die LXC-Management-Werkzeuge verwenden neben Namespaces und Cgroups noch eine Reihe weiterer Kernel-Funktionen, wie SELinux oder AppArmor, weshalb man sich den LXC-Kernelcode besser als einer Art Wrapper vorstellt, den auch anderen Anwendungen nutzen können, etwa der LXC-Treiber des libvirt-Projektes.

Ein Meilenstein in der Entwicklung von LXC ist die Version 1.0 vom Februar 2014, die unter anderem erstmals unpriviligierte Container unterstützt und damit auch in der Container- und Anwendungsvirtualisierung ein hohes Sicherheit-Niveau ermöglicht. Im Gegensatz zu voneinander völlig unabhängigen virtuellen Maschinen besteht bei Containern zumindest theoretisch immer die Gefahr einer gegenseitigen Beeinflussung, weil sich sämtliche Container und das Host-System die gleiche Hardware teilen. Somit ist beispielsweise bei LXC < 1.0 der root-Nutzer eines Containers mit dem root auf dem Host-System identisch, was theoretisch ein hohes Sicherheitsrisiko darstellt.

Und Docker?

Docker ist eine ursprünglich vom Unternehmen DotCloud Inc. entwickelte Software zur Anwendungs-Virtualisierung, die bis einschließlich der Version 0.8 unter anderem auf LXC basierte. LXC kann gleichermaßen System-Container, also komplette virtualisierte Betriebssysteme, als auch spezielle Anwendungs-Container, die ausschließlich zum Virtualisieren einer einzigen Anwendung dienen, zur Verfügung stellen.

Container-Virtualisierung: Bei Docker werden Anwendungen samt Abhängigkeiten in einen Container gepackt.
Foto: Docker Inc.

Dabei ist das Bereitstellen von System-Containern (Betriebssystem-Virtualisierung) der eigentlich einfachere Part, weil sich der System-Architekt hierbei nicht mit dem gezielten Isolieren von einzelnen Ressourcen auseinander setzen muss. Dass dies bei LXC kein Pappenstil ist, zeigt ein Blick in die "man lxc.conf". Docker dagegen konzentriert sich ausschließlich auf das Verpacken, Ausliefern und Ausführen von beliebigen Applikationen. Docker verfrachtet Anwendungen samt der jeweils benötigten Laufzeit-Umgebung transparent in (virtuelle) Container, die sich dann nahezu überall ausführen lassen. Docker´s Ansatz zur Industrialisierung und Standardisierung der Anwendungs-Virtualisierung hat offenbar bei vielen Unternehmen einen Nerv getroffen.

Shooting Star Docker

Docker selbst wurde erst im März vergangenen Jahres vom Unternehmen DotCloud Inc. als kleines Open-Source-Projekt gestartet. Der phänomenalen Erfolg von Docker machte es im Sommer 2013 erforderlich, Projekt und Firma einem professionelle geführten Management zu unterstellen. So leitet seit Juli 2013 der früher bei Gluster und Plaxo als CEO tätige Ben Golub die Weiterentwicklung. Ende letzten Jahres benannte sich DotCloud Inc. in Docker Inc. um.

Das neu entstandene Unternehmen kann und will sich mit dem Polster einer im Januar dieses Jahres erhaltenen Finanzspritze ausschließlich auf die Software selbst, sowie auf das darum aufzubauende Ökosystem konzentrieren, wie etwa den jetzt vorgestellten Dienst Docker-Hub. Im Detail soll das Geld laut CEO Ben Golub in das Projekt selbst, in den Ausbau der Community-Plattform und den Aufbau, sowie die Vermarktung von Dienstleistungen rund um Docker fließen. So bietet Docker ab sofort offiziell Unterstützung für Docker einsetzende Unternehmen. Diese umfasst auch eine System-Integrations-Initiative mit angegliederten Trainingsprogrammen. Neben kommerziellen Support plant das Unternehmen auch diverse Hosting-Angebote, wie die jüngst verkündeten Kooperationen mit Google oder Red Hat unter Beweis stellten. Ben Golub versicherte aber in Anbetracht der momentan zu verzeichnenden Kommerzialisierungsmaßnahmen, dass Docker auch in Zukunft kostenlos und quelloffen bleiben wird.

Der Code steht unter der Apache 2.0 Lizenz. Der Geldsegen brachte allerdings auch einige personelle Veränderungen. So wechselte der die abgeschlossene Finanzierungsrunde leitende Jerry Chen vom Investment-Unternehmen Greylock Partners in den Unternehmensvorstand von Docker. Chen war vor seinem Engagement bei Greylock Vice President of Cloud and Application Services bei VMware. Mit Jerry Murdock von Insight Venture Partners wechselte zudem ein weiterer Investor zum Management-Team und gehört jetzt den Beratungsausschuss von Docker an.

Zwischenstopp

Docker kann seit dem Launch im März 2013 auf über 14.000 offiziell mit Docker bearbeitete Apps verweisen. Bis heute liegt die Zahl der Downloads bei mehr als 2,5 Mio. Über 450 Beitragende haben bis heute in Form von über 8000 Commits an der Software mitgewirkt.

Die der aktuelle stabilen Version 1.0 voraus gegangene Release Candidate 0.11 vom Mai dieses Jahres, sowie die Version 0.10 vom hatten zur Vorbereitung des finalen Launches zum Ziel, die Zusammenarbeit von Docker mit Werkzeugen von Administratoren zu verbessern, etwa beim Stop-Verhalten oder der Signalbehandlung. Außerdem führte Docker mit der Version 0.10 TLS-Authentifikation, Systemd-Slices und Prüfsummen ein. Docker 0.11 unterstützt zudem erstmals auch SELinux, Host-Networking und enthält eine Hostnamen-basierte Autodiscovery-Funktion.

Der SELinux-Support geht auf Initiative von Red Hats SELinux-Guru Dan Walsh zurück. Mit dem neuen Host-Networking-Modus kann die Anwendung im Container direkt auf die Netzwerk-Schnittstelle des Host-Systems zugreifen. Ein Container im Host-Networking-Modus ist eine gewöhnlichen Docker-Sandbox, die jedoch ihren Netzwerk-Stack mit dem Host-System teilt, während im Normalfall im der Docker-Sandbox nur die Loopback-Schnittstelle und eine virtuelle Netzwerkkarte eth1 existieren. Letztere ist per Default mit einem Bridge-Device auf dem Host verbunden. Der neue Host-Networking-Modus (aktivierbar mir der Option (--net=host) ist deutlich schneller. Mit der neuen Funktionen "Link hostnames" können sich miteinander verlinkte Container gegenseitig anhand des Hostnames identifizieren.

So kann etwa ein Anwendungs-Frontend für eine Datenbank-Applikation mit Hilfe des Hostname auf eine in einem anderen Container laufende Datenbank zugreifen. Schon seit der Version 0.10 ist es der Zugriff auf die Docker-Remote-API zudem mit SSL-Zertifikaten absicherbar. Außerdem verfügte Docker 0.10 erstmals über ein Plugin für systemd. Darüber hinaus wird seit Docker 0.10 jede Docker-Version mit SHA256- und MD5-Prüfsummen ausgeliefert.

Ohne LXC

Seit der Version 0.9 vom 2014 funktioniert Docker zudem unabhängig von LXC, die Container-Technologie auf der die Software ursprünglich im Kern basierte. Die Unabhängigkeit von LXC haben die Docker-Entwickler mit Hilfe eines integrierten Treiber (Execution Driver) realisiert, der auf der in Go geschriebenen libcontainer-Bibliothek aufsetzt. Die erlaubt die Kommunikation zwischen Docker und der Container-API im Kernel, etwa zum selbstständigen Bearbeiten von Namespaces, Cgroups, AppArmor-Profilen, Netzwerkschnittstellen oder Firewall-Regeln und scheint so stabil zu sein, dass sie seit Docker 0.9 als Standard-Verfahren zum Einsatz kommt. Docker unterstützt LXC optional aber nach wie vor.

Docker 1.0 bringt übrigens neben den Stabilisierung der APIS weitere neue Funktionen mit. Ein neuer Befehl Copy ermöglicht etwa das Kopieren von Dateien und Verzeichnissen direkt aus der Build-Umgebung. Auch beim Device Mapper gab es einige Verbesserungen. Zudem unterstützt Docker jetzt XFS als Dateisystem. Darüber können Anwender die Docker Engine jetzt pausieren. Damit ist es möglich, vorübergehend Rechenzeit für andere Aufgaben freizugeben. Zum Launch von Docker 1.0 hat die Docker Inc. zudem bei der IANA (Internet Assigned Numbers Authority) zwei offizielle Ports für Docker 2375 (HTTP) und 2376 (2376) registriert.

Docker und Red Hat

Das rege Interesse an Docker ist auch den größeren Unternehmen der IT-Branche nicht verborgen geblieben. Open-Source-Primus Red Hat, stets eines der regen Unternehmen, wenn es um das Erkennen und Aufgreifen neues Trend geht, hat die Zusammenarbeit mit Docker zur Chefsache gemacht.

So kooperieren Red Hat und Docker schon seit September letzten Jahres, unter anderem um Docker in Red Hats Platform-as-a-Service-Angebot OpenShift zu integrieren. Zudem hat Red Hat auf dem ebenfalls im April in San Francisco über die Bühne gegangenen Red Hat Summit 2014 das Project Atomic vorgestellt, mit dem Red Hat Virtualisierungstechniken weiter vorantreiben will. Atomic ist ein Gemeinschaftsprojekt mit Docker das die Entwicklung eines extrem sicheren Betriebssystem unter der Bezeichnung "Red Hat Enterprise Linux Atomic Host" zum Ziel hat, deren Anwendungen auf Docker-Containern basieren. Dabei sollen RHEL, CentOS und Fedora als Technologie- und Komponenten-Lieferanten dienen.

Die beim Fedora-Projekt beheimatete Atomic-Initiative bietet bereits beinahe tägliche neue Builds an, gilt aber momentan noch als experimentell. Das Besondere an Red Hat Enterprise Linux Atomic Host liegt in der Art und Weise, wie das System die Paketbasis und die Anwendungen in den Containern auf dem Laufenden hält, was die Entwickler mit der Bezeichnung "atomic" andeuten. Während herkömmliche Betriebssysteme Pakete stets nacheinander unter Berücksichtigung der jeweiligen Abhängigkeiten aktualisieren müssen, kann das neue Betriebssystem theoretisch stets sämtliche anstehenden Aktualisierungen in einem Durchgang einspielen, wozu ein neues Werkzeug RPM-OSTree zum Einsatz kommt, ein Tool das die Entwickler als Zwitter aus Paketverwalter und Disk-Imager bezeichnen.

Google und Docker

Auch Internet-Riese Google honoriert das allgemein große Interesse an Docker und hat jüngst eine offene Preview-Version von Docker-Containern für die virtuellen Maschinen seiner Compute Engine angekündigt. Diese könnte die Open-Source-Version von Googles eigenem Container-Stack Let Me Contain That For You (LMCTFY) erweitern. Google bezeichnet die jetzt angekündigte Preview als "Container-optimiertes OS-Image".

Sie besteht aus einer Version von Debian 7, der Laufzeitumgebung von Docker und einem Open-Source-Agenten zum Verwalten der Container. Ein Container-VM-Image lässt sich genauso spezifizieren, wie jedes andere Google Compute Engine Image und wird über den Parameter -image übergeben. Die beim Start aufgerufenen Container werden von Google Compute Engine überwacht und bei einem Ausfall automatisch neu gestartet. Der Docker-Support ist aber momentan noch experimentell.

Fazit

Docker ist zur Zeit eines der interessantesten Projekte im Linux-Umfeld. Das gleichnamige hinter Docker stehende Unternehmen will die Software zur einheitlichen Plattform zum Ausliefern von Anwendungen in Ressourcen sparende virtuelle Container machen und findet dabei Anerkennung auf allen Ebenen.

Dass sich potenzielle Partner von Google bis Red Hat bei Docker die Klinke in die Hand geben ist ein Indiz für den enormen Bedarf nach einer standardisierten Container-Technologie und dabei sind noch längst nicht all potenziellen Einsatzgebiete ausgelotet. (mje)