2057447

Docker: Einzelne Linux-Tools virtuell isolieren

30.03.2015 | 12:21 Uhr |

Schneller und vor allem schlanker als virtuelle Maschinen: Docker packt Linux-Anwendungen in abgeschottete Container, die sich leicht zwischen Linux-Systemen verschieben lassen.

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.

Setzt direkt auf dem Kernel auf: Docker braucht keinen Hypervisor, da die gestarteten Container den gleichen Linux-Kernel wie der Host nutzen und über Control Groups (Cgroups) isoliert werden.
Vergrößern Setzt direkt auf dem Kernel auf: Docker braucht keinen Hypervisor, da die gestarteten Container den gleichen Linux-Kernel wie der Host nutzen und über Control Groups (Cgroups) isoliert werden.

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.

Virtualbox-Tricks für Profis

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.

Verbindung zu einem laufenden Docker-Container per VNC: In diesem System, das in einem isolierten Docker-Container läuft, ist ein minimaler Desktop, Firefox und ein VNC-Server installiert.
Vergrößern Verbindung zu einem laufenden Docker-Container per VNC: In diesem System, das in einem isolierten Docker-Container läuft, ist ein minimaler Desktop, Firefox und ein VNC-Server installiert.

Ä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: http://docker.io
Dokumentation: http://docs.docker.com

0 Kommentare zu diesem Artikel
2057447