Wo es „nur“ um die Bereitstellung einzelner, isolierter Anwendungen oder Server-Prozesse geht, ist Virtualisierung in Sachen Ressourcenbedarf eine teure Technik. Denn eine VM braucht ein komplettes Gastbetriebssystem, das Arbeitsspeicher und CPU-Leistung belegt. Der Hypervisor muss dafür genügend Hardware emulieren. Zudem verlangt das virtuelle System Pflege und Administrationsaufwand wie ein realer Rechner. Eine Antwort auf das Ressourcenproblem ist Docker, das einen deutlich anderen Weg einschlägt.
Container statt virtuelle Maschinen
Docker ist eine junge Technik, die seit Anfang 2014 Linux-Größen wie Red Hat, IBM, Google und Microsoft in Atem hält. Docker vereint Kernel-Virtualisierung mit Anwendungs-Sandboxen: Statt eines kompletten Betriebssystems virtualisiert Docker nur Teile davon. Einen aufwendigen Hypervisor spart es sich und setzt direkt auf dem laufenden Linux-Kernel auf, ohne eine neue Kernel-Instanz zu starten. Der Clou ist, dass Docker geschickt die vorhandenen Fähigkeiten des Kernels verwendet, um isolierte Container für Programme bereitzustellen: Control Groups (Cgroups) limitieren Speicher, CPU-Zyklen, I/O-Leistung für einen Prozess und Kernel-Namespaces isolieren Prozesse strikt voneinander. Für seine virtuellen Festplatten-Images, die Snapshots und Layer unterstützen, kommen wahlweise die Dateisysteme BTRFS oder AUFS zum Einsatz. Docker dient für alle Komponenten als Verwaltungswerkzeug und definiert ein portables Container-Format, das es erlaubt, Container zwischen Linux-Systemen zu verschieben.

Ein weiterer Pluspunkt ist, dass man bei Docker kein Gastbetriebssystem installieren muss. Docker macht System-Images verbreiteter Linux-Distributionen über ein Online-Verzeichnis verfügbar. Zum Start eines Containers kann Docker einfach das gewünschte Gastsystem über eine Internetverbindung herunterladen. Es gibt aber auch Einschränkungen, die das Docker-Konzept bedingt: Die Technik eignet sich nicht zur Vollvirtualisierung von Betriebssystemen, da Docker-Container immer den Linux-Kernel des Host-Systems mitbenutzen. Dementsprechend können Container natürlich auch nur Linux-Systeme und Linux-Programme enthalten.
Docker kann außerdem keine Hardware oder gar andere Prozessorplattformen emulieren. Das Konzept hat also mehr mit einer Chroot-Umgebung oder mit Free-BSD-Jails gemein als mit Virtualisierung.
Entwickelt hat Docker der französische Auswanderer Solomon Hykes, heute ein Wunderkind in Silicon Valley. Docker 1.0 erschien im Juni 2014 und ist fit für den produktiven Einsatz. Glaubt man den Investoren, die Docker gerade mit einem Kapitalsegen von 40 Millionen US-Dollar überschüttet haben, dann ist Docker die interessanteste Linux-Technologie seit Jahren und wird Virtualisierung im Server- und Cloud-Umfeld nochmals revolutionieren. Auch Software-Hersteller können recht einfach ganze Server-Installationen mit ihren Produkten per Docker-Image oder Docker-Scripts ausliefern.
Aber auch auf einzelnen Linux-PCs, die als Heim-Server oder als Entwicklungsrechner dienen, kann Docker seine Vorzüge ausspielen.
Docker einrichten und der erste Test
Der Hype um Docker hat erfreulicherweise dazu geführt, dass Docker in den aktuellen Versionen populärer Linux-Distributionen enthalten ist. In Ubuntu 14.04/14.10, Fedora 20, Cent-OS 7 und Open Suse 13.2 steht Docker zur einfachen Installation über den Paketmanager bereit. In Ubuntu 14.04/14.10 und seinen Varianten heißt das Paket „docker.io“ und ist mit
sudo apt-get install docker.io
schnell installiert, da das Paket mit allen Abhängigkeiten nur etwa 50 MB schwer ist. Docker läuft als Systemdienst mit root-Rechten, und auch der Client braucht privilegierte Rechte. Treten Sie der Gruppe „docker“ mit dem Kommando
sudo usermod -a -G docker [Benutzername]
bei, damit Sie den Docker-Client ohne sudo aufrufen können. Danach empfiehlt sich ein Neustart, damit der Docker-Dienst läuft und die neue Gruppenmitgliedschaft gültig ist. Als ersten Test können Sie einen Container mit Bash in einem virtuellen Cent-OS starten:
docker run -i -t centos /bin/bash
Docker lädt hier automatisch ein minimales Image von Cent-OS herunter (80 MB) und startet die Shell in dieser isolierten Umgebung. Eine durchsuchbare Datenbank aller Images gibt es unter https://registry.hub.docker.com . Images legt Docker permanent im Verzeichnis „/var/lib/docker“ ab. Mit exit beenden Sie diese Shell wieder und schließen den Container.

Änderungen in Images übernehmen
Standardmäßig verwirft Docker alle Änderungen und startet das Image stets im Originalzustand. Das ist zwar für Testumgebungen nützlich, nicht aber, wenn man ein Linux-System in Docker einrichten will. Soll Docker vorgenommene Änderungen übernehmen, dann kann der Commit-Befehl von Docker diese in einen neuen Container schreiben. Dazu ein Beispiel: Mit dem Kommando
docker run centos yum install -y mc
installieren Sie im virtuellen Cent-OS den Midnight Commander, und Docker legt für diese Änderungen einen neuen Container außerhalb des Images an. Diesen temporären Container können Sie jetzt mit dem Image verschmelzen. Geben Sie dazu den Befehl
docker ps -l
ein, der den gerade neu angelegten Container von Cent-OS mit dem installierten Midnight Commander auflistet. In der Liste benötigen Sie die ID links. Lautet diese ID beispielsweise „9731014183b6“, dann sichern Sie mit dem Kommando
docker commit 9731014183b6 centos-mit-mc
den Container-Zustand dauerhaft mit dem Namen „centos-mit-mc“. Wenn Sie diesen Container dann wieder mit
docker run -i -t centos-mit-mc /bin/bash
starten, dann können Sie mit dem Befehl mc den dort installierten Midnight Commander im virtuellen Cent-OS starten. Auf diese Weise lassen sich auch grafische Anwendungen sowie der SSH-Server installieren, um sich vom Host aus zu einem laufenden Container zu verbinden und über X11-Forwarding dort ausgeführte grafische Programme anzuzeigen. Beispiele zu diesen fortgeschrittenen Möglichkeiten liefert die Dokumentation.
Docker: Docker ist ein Container-System für Linux, um isolierte Anwendungen unter virtuellem Linux zu starten. Der Container läuft ohne Hypervisor und VM direkt auf dem Kernel des Host-Systems. Webseite: https://docker.io Dokumentation: https://docs.docker.com