Docker dominiert

Docker-Tools im Vergleich: Welches Container-Tool passt zu mir?
Kommentare

In Zeiten von DevOps, Microservices und IaaS stoßen VMs an ihre Grenzen. Welche Möglichkeiten und Alternativen gibt es zum Arbeiten mit Docker?

Docker-Tools im Vergleich

Anbieter von virtuellen Servern bieten ihre Maschinen mittlerweile stunden- oder gar minutenweise zur Miete an. Dank Microservices unterteilen Entwickler ihre Systeme zudem in immer feingranularere Einheiten: Was einst die Aufgabe eines Servers war, erfolgt nun auf einem Dutzend kleiner „Minimaschinen“. Docker bringt ob seines in Abbildung 1 gezeigten Containeransatzes die idealen Voraussetzungen zur Realisierung von Microservices-Infrastrukturen mit.

Abb. 1: Docker-Container teilen sich ein Betriebssystem

Abb. 1: Docker-Container teilen sich ein Betriebssystem

Ob der immer größer werdenden Verbreitung von Docker versuchen diverse Unternehmen, durch Anbieten eines Benutzerinterface im Markt mitzuspielen. Angehende Administratoren von Clusterverbünden haben heute die Qual der Wahl: Es gibt eine Vielzahl verschiedener Möglichkeiten zur Administration.

Dieser Artikel strebt danach, seinen Lesern einen Überblick über die Möglichkeiten zu bieten. Eine detaillierte technische Besprechung tritt dabei in den Hintergrund – unser Fokus liegt darauf, die verschiedenen Vorgehensweisen und ihre Expedienten qualitativ zu vergleichen und so bei der Auswahl von für weitere Beschäftigung lohnenden Produkten zu helfen.

Ein Wort für die Kommandozeile

Docker bringt mit „docker“ ein Werkzeug mit, das seit der ersten Betaversion zur Kommunikation mit dem Cluster eingespannt wird. Das Produkt wirkt auf an grafische Oberflächen gewohnte Entwickler und Administratoren abstoßend, hat im praktischen Einsatz aber zwei wesentliche Vorteile: Erstens funktionieren Kommandozeilenwerkzeuge notfalls auch von unterwegs aus. Das Streamen einer kompletten Benutzerschnittstelle ist auch in Zeiten von Telefonen mit Full HD alles andere als befriedigend, während der Datenverbrauch von SSH und Co. notfalls auch per Roaming finanzierbar bleibt. Vorteil Nummer zwei ist die vergleichsweise einfache Integration in Shellskripte und andere Administrationshelferlein. Wer seine Container ohne manuelles Zutun initialisieren und abtragen kann, tut dies häufiger – dem Autor ist mehr als nur ein Unternehmen bekannt, in dem eine viel zu große VM-Infrastruktur aufgrund des Aufwands für Abtragung und Terminierung weiterbetrieben wird.

Zur Vermeidung wütender Kommentare sei angemerkt, dass dem Autor Werkzeuge zur Automatisierung der Interaktion mit grafischen Benutzerschnittstellen bekannt sind. Leider erwiesen sich diese durch die Bank als derart instabil, dass ihre Nutzung in wirtschaftlich bedeutenden Workflows ein klassisches Vabanquespiel darstellt.

Offizielles Werkzeug

Kitematic war ursprünglich ein eigenes Projekt, das im März dieses Jahres vom Docker-Team übernommen wurde. Seither steht das seit jeher für Mac OS X vorgesehene Administrationswerkzeug auch in einer Version für Windows 7+ zur Verfügung.

Docker bietet Kitematik als Teil eines als Docker Toolbox bezeichneten Produkts an. Die bereitstehende Installationsdatei erweitert ihr Windows-System um die folgenden vier Komponenten:

  • Docker Client
  • Docker Machine
  • Docker Kitematic
  • VirtualBox

An dieser Stelle zeigt sich der geringe Platzbedarf: Der Gutteil der rund 300 MB Plattenplatz entfallen auf das grafische Administrationswerkzeug. Wundern Sie sich zudem nicht, falls die Toolbox während der Installation einige Werkzeuge eliminiert: Git für Windows wird durch eine neue Version ersetzt. Nach getaner Arbeit ist Ihr Desktop um die drei in Abbildung 2 gezeigten Verknüpfungen reicher.

Abb. 2: Der Installationsassistent hat seine Arbeit getan

Abb. 2: Der Installationsassistent hat seine Arbeit getan

Starten Sie Kitematic durch Anklicken des Symbols. Da das Produkt automatisch eine Docker VM mitstartet, ist etwas Geduld und das Abnicken diverser Treibersignierungsdialoge erforderlich. Kitematic bleibt gern bei 99 Prozent stecken: Es handelt sich dabei um einen bekannten Fehler, der von Seiten des Docker-Teams eifrig bejagt wird. In den meisten Fällen reicht es aus, das Werkzeug zu schließen und danach unter Verwerfen der schon angelegten VM neu zu starten.

Die Verbindung mit Docker Hub ist nur dann notwendig, wenn Sie private Images verwenden möchten: Klicken Sie stattdessen auf Skip for Now, um die Konfiguration „normal“ fortzusetzen. Im nächsten Schritt erscheint das in Abbildung 3 gezeigte Fenster am Bildschirm.

docker3-1024x551

Abb. 3: Kitematic bietet eine Vielzahl verschiedener Images an

Kitematic sieht sich selbst als „Speisekarte“ für Docker: Das Produkt zeigt alle vorhandenen Images an. Wenn Sie mit MySQL loslegen möchten, so klicken Sie auf den Create-Button in der betreffenden Karte – nach dem Aufbau einer Verbindung zu Docker Hub wird das betreffende Image heruntergeladen und zur Ausführung bereitgestellt.

Wenn die Bereitstellung mit einem Netzwerkkommunikationsfehler scheitert, so müssen Sie die Firewall von Windows komplett deaktivieren. Öffnen Sie danach VirtualBox und löschen Sie die VM „default“ vollständig vom Computer.

VirtualBox bietet unter DATEI | EINSTELLUNGEN | NETZWERK Methoden zur Konfiguration von Netzwerken, die zwischen allen virtuellen Maschinen geteilt werden. Entfernen Sie alle in der Rubrik HOST-ONLY Netzwerke befindlichen Adapter. Starten Sie Kitematic danach neu, um das Werkzeug zur Erstellung einer neuen virtuellen Maschine samt den dazugehörenden Netzwerkadaptern zu animieren. Falls Kitematic nun abermals bei 99 Prozent steckenbleibt, ist dies kein Problem – öffnen Sie die Eigenschaften der neu erstellten VM und verbinden Sie jeden der Netzwerkadapter mit einem der neu erstellten Netzwerke. Achten Sie dabei darauf, dass das Feld ANGESCHLOSSEN AN auf beiden Maschinen auf „Host-only Adapter“ steht. Scheitert die Installation danach immer noch, so sollten Sie das Produktpaket deinstallieren und neu herunterladen. Prüfen Sie sodann, ob die VM aus dem Docker-Quickstart-Terminal ansprechbar ist – ist dies der Fall, so sollte alles problemlos funktionieren.

Bevölkerte Container erscheinen in der Liste auf der linken Seite des Bildschirms. Klicken Sie einen davon an, um seine Web- und Konsolenansichten zu öffnen (Abb. 4).

Abb. 4: Kitematic stellt Web- und Konsolenansicht übersichtlich dar

Abb. 4: Kitematic stellt Web- und Konsolenansicht übersichtlich dar

Der auf der Oberseite des Bildschirms befindliche Exec-Button öffnet eine PowerShell, die mit der gerade ausgewählten Containerinstanz verbunden ist. Das SETTINGS-Tab bietet diverse Möglichkeiten zum Einstellen des Systemverhaltens: Neben Umgebungsvariablen können Sie hier auch Volumes und exponierte Netzwerkports ansehen und konfigurieren.

Für Kitematic spricht, dass es GUI und Kommandozeile laut Eigendefinition „zu vereinen versucht“. Ein Klick auf den in der unteren rechten Bildschirmkante befindlichen Docker-CLI-Button öffnet eine PowerShell-Instanz, die für die Konfiguration der als Containerhost dienenden VM vorkonfiguriert ist. Dort neu angelegte Container tauchen automatisch in der Liste auf. Falls Sie die Verwaltungsfunktionen von Kitematic mit aus der Kommandozeile erstellten Containern nutzen wollen, so müssen Sie die Errichtung durch Eingabe von docker run -d anstoßen.

Auf der Sollseite steht, dass das Administrationswerkzeug zum Zeitpunkt der Drucklegung nur mit seinem VM-Host zusammenarbeitet. Bei der Wartung eines komplexen Verbunds ist Kitematic trotzdem nützlich: Es vereinfacht das „explorative Testen“ von Containerkonfigurationen und das Ausprobieren von Umgebungsvariablen und anderen Parametern.

Administriere dich selbst

Webbasierte GUIs sind spätestens seit dem Erfolg von Gmail fixer Bestandteil der IT. Michael Crosby wartet mit dem bereitstehenden DockerUI ein Projekt, das Docker mit einer derartigen Benutzerschnittstelle ausstattet. Das derzeit unter aktiver Entwicklung befindliche Produkt zeichnet sich dadurch aus, dass es in Form eines Docker-Containers vorliegt: Wer sein Docker-System aus der Ferne administrieren möchte, muss den neuen Container folgendermaßen einpflegen:

docker run -d -p 9000:9000 --privileged -v /var/run/docker.sock:/var/run/docker.sock dockerui/dockerui

Docker wirft dabei im ersten Schritt einen Fehler in Bezug auf das Fehlen eines lokalen Images, um die Daten daraufhin aus dem Docker-Repository zu holen. Nach getaner Installation präsentiert sich die VM unter dem Namen adoring_archimedes. Öffnen Sie den URL http://192.168.99.101:9000/#/ in einem Browser Ihrer Wahl.

Das Produkt präsentiert daraufhin eine eher spröde gestaltete Benutzerschnittstelle: Das Dashboard zeigt eine Übersicht aller im System befindlichen Container und Images an. Container lassen sich in Tab Nummer zwei neu starten oder anhalten, während Tab drei für das Löschen von am Server befindlichen Images vorgesehen ist.

Interaktivität wird hier nicht besonders groß geschrieben: DockerUI bietet keine Möglichkeit zum Anwerfen neuer Container oder zur Anpassung von Konfigurationseinstellungen. Das Produkt beschränkt sich auf die Anzeige von Verwaltungsinformationen. Abbildung 5 zeigt, was Sie erwarten dürfen.

Abb. 5: Container lassen sich per DockerUI anhalten, löschen oder neu starten

Abb. 5: Container lassen sich per DockerUI anhalten, löschen oder neu starten

DockerUI zeichnet sich dadurch aus, dass es „von überall aus“ ansprechbar ist: Bei korrekter Konfiguration können Sie Ihrem Server auch aus Pyongyang oder Timbuktu auf die Pelle rücken. Wie im Fall von Kitematic gilt auch hier, dass DockerUI eine 1:1-Beziehung zum jeweiligen Host eingeht. Wenn Sie mehrere Hosts konfigurieren möchten, müssen Sie pro System einen URL aufrufen. Zudem besteht – wie bei allen Web-Apps – das Risiko „unbefugten Zugriffs“: Da DockerUI nicht sonderlich gut abgesichert ist, sollten Sie es nicht aus dem öffentlichen Internet heraus ansprechbar machen.

Alles ist wahnsinnig kompliziert …

Docker bietet mit Swarm ein Werkzeug zur Verwaltung von Docker-Verbünden an. Das hier beschriebene Tool befindet sich noch in der Betaphase, ist aber schon jetzt zur Interaktion mit Jenkins, Krane und Co. befähigt. Als „Discovery Backend“ bezeichnete Dienste helfen dabei, Teile des Clusters ausfindig zu machen – eine noch genauere Besprechung würde den Rahmen dieses Artikels sprengen.

Für uns ist Docker Swarm insofern interessant, als es als Teil des Web-UI Shipyard auftritt. Zum Deployment des virtuellen Hafens genügt die Eingabe des Kommandos curl -sSL https://shipyard-project.com/deploy | bash -s. Das vom Entwicklerteam bereitgestellte Set-up-Skript erledigt den Rest der Arbeit normalerweise automatisch. Mit Kitematic arbeitende Entwickler bekommen auch bei Verwendung des Bash-basierten Docker Quickstart Terminal Probleme: Eine bereitliegende Installationsanleitung erlaubt das manuelle Installieren fehlender Komponenten.

Achten Sie dabei darauf, dass einige Container beim Deployment Informationen über die IP-Adresse des zu verwendenden Hosts benötigen. Im Fall des Swarm-Agenten findet sich in der Dokumentation beispielsweise folgendes Kommando:

$> docker run \
  -ti \
  -d \
  --restart=always \
  --name shipyard-swarm-agent \
  swarm:latest \
  join --addr <ip-of-host>:2375 etcd://<ip-of-host>:4001

Für die von Kitematic erzeugte und verwaltete VM würde der Befehl so aussehen:

$> docker run \
  -ti \
  -d \
  --restart=always \
  --name shipyard-swarm-agent \
  swarm:latest \
  join --addr 192.168.99.101:2375 etcd://192.168.99.101:4001

Spiele im Rudel

Shipyard besteht aus einer Gruppe von VMs: Datastore enthält eine Instanz von RethinkDB. Discovery und Proxy bieten weitere Hilfsdienste an, während Swarm Manager und Swarm Agent für die Verwaltung der zu betreuenden Nodes zuständig sind. Der zu guter Letzt zu deployende Controller exponiert sodann ein per Port 8080 ansprechbares Webinterface, über das die Interaktion zwischen User und Shipyard erfolgt.

Nach dem ersten Aufruf des Portals sollten Sie sich durch Eingabe von admin/shipyard authentifizieren. Dieses von Haus aus festgelegte Passwort muss unbedingt verändert werden, bevor der Cluster mit dem Internet verbunden wird.

Vor dem praktischen Einsatz muss Shipyard mit einem oder mehreren Nodes verbunden werden, die die für die Ausführung des Containers notwendigen Ressourcen bereitstellen. Für die Arbeit mit einer einzelnen VM ist dieser Aufwand nur wenig zielführend, weshalb wir unsere Betrachtungen des Produkts an dieser Stelle beenden.

Dank der Integration in Swarm stellt Shipyard die mit Abstand vollständigste Administrationslösung für Docker-Verbünde dar: Neue Container lassen sich nach Bedarf anwerfen und über den Cluster verteilen. Das aus einem beliebigen Browser heraus ansprechbare Produkt kann – die Erstellung neuer Images sei ausgeklammert – eigentlich alles, was man als Docker-Administrator braucht. Leider ist das Anmelden neuer Nodes in kleinen Installationen vergleichsweise schwierig: Wer nur einen Docker Daemon verwalten möchte, dürfte mit DockerUI besser fahren.

Docker, kompakt

Für die folgenden Versuche wollen wir einen kleinen Docker-Cluster realisieren, um die unter Windows nicht oder nur leidlich lauffähigen Produkte in Aktion zeigen zu können. Obwohl das hier als Hostsystem dienende Ubuntu 14.04 Docker theoretisch auch nativ ausführen kann, nutzen wir stattdessen Docker Machine. Zum Herunterladen der benötigten Komponenten ist die Eingabe folgender Kommandos notwendig:

sudo apt-get install docker

sudo curl -L https://github.com/docker/machine/releases/download/v0.4.0/docker-machine_linux-amd64 > /home/tamhan/Desktop/docker-machine
cd /home/tamhan/Desktop/dockerdir
chmod +x docker-machine

Nach dem Herunterladen des Docker-Hauptkommandos beschaffen wir uns Docker Machine. Es handelt sich dabei um ein Kommandozeilenwerkzeug, das für die Interaktion zwischen VirtualBox (manuell installieren), dem VM-Server und dem Hostbetriebssystem zuständig ist.

Das eigentliche Anlegen der virtuellen Maschine beginnt sodann durch Eingabe von docker-machine create. Das Driver-Argument legt dabei den zu verwendenden Hypervisor fest, während dev der Name der neu erstellten Maschine ist:

tamhan@TAMHAN14:~/Desktop$ ./docker-machine create --driver virtualbox dev
Creating CA: /home/tamhan/.docker/machine/certs/ca.pem

Nach dem erfolgreichen Anlegen der VM – quasi nebenbei entstehen einige SSH-Schlüssel und andere Hilfsdateien, deren Pfade in die Konsole ausgeworfen werden – kann das Kommando über die VM durch Eingabe des Befehls eval „$(./docker-machine env dev)“ übernommen werden. Das Aussehen der Shell verändert sich dabei nicht, da sich das Skript auf das Laden einiger Umgebungsvariablen beschränkt.

VM für Admins

Panamax – namentliche Ähnlichkeiten zur Steueroase sind rein zufällig – ist eine stark erweiterte Form von DockerUI, die wesentlich mehr Funktionen anbietet. Die Entwickler unterstützen im Moment nur Mac OS X und Ubuntu – wer noch unter Windows arbeitet, muss an dieser Stelle einen Partitionswechsel durchführen. Die Installation unter Ubuntu beginnt durch die Eingabe der folgenden Kommandos, die Vagrant herunterladen und einen Ordner erstellen:

mkdir panamax
cd panamax
sudo apt-get install vagrant

Öffnen Sie im nächsten Schritt die bereitstehende Vagrant-Downloadseite, auf der Sie ein .deb-Archiv mit der aktuellsten Version des Produkts herunterladen. Installieren Sie es wie gewohnt mittels Software Center, um danach folgendes Kommando in das Terminal einzugeben:

curl http://download.panamax.io/installer/ubuntu.sh | bash

Panamax unterscheidet sich von den bisher vorgestellten Systemen dadurch, dass das Administrationswerkzeug in einer per VirtualBox bereitgestellten VM residiert. Der durch Eingabe des obigen Befehls angeworfene Assistent lädt die zur Erstellung einer unter CoreOS betriebenen VM notwendigen Komponenten herunter und nutzt das Kommandozeilen-API von VirtualBox zur Einrichtung und Konfiguration.

Was ist CoreOS?

Herkömmliche Unix-Systeme sind für die Nutzung als Docker-Hypervisor „zu schwer“: CoreOS ist eine von Googles Chrome OS Toolchain abgeleitete Linux-Variante, die sich selbst auf die Rolle des Hosts für Containerverwaltungen beschränkt. Nutzcode muss in Form von Docker-Containern vorliegen – der Lohn dieser Mühen ist ein extrem kompaktes System, das mit sehr wenig Festwertspeicher auskommt.

Nach dem erfolgreichen Abarbeiten des Installationsassistenten erscheint ein nach dem Schema http://10.0.0.200:3000/ aufgebauter URL im Konsolenfenster. Füttern Sie ihn in einen Browser Ihrer Wahl, um die Panamax-Oberfläche anzuwerfen. Dank der CoreOS-VM ist sie direkt zur Ausführung von Docker-Containern befähigt. Die in Abbildung 6 gezeigte Startoberfläche bietet einige fertige Pakete an.

Abb. 6: Ähnlichkeiten mit Kitematic sind rein zufällig …

Abb. 6: Ähnlichkeiten mit Kitematic sind rein zufällig …

Wirklich interessant wird Panamax erst durch den Remote Agent. Es handelt sich dabei um ein Werkzeug, das auf „Zielsystemen“ installiert wird und dort für das Entgegennehmen der per Panamax angelieferten Kommandos zuständig ist. Besitzer eines AWS-Accounts können es unter MANAGE | REMOTE DEPLOYMENT TARGETS einpflegen. Panamax erweckt dann bei Bedarf virtuelle Maschinen „zum Leben“, um den Docker-Containern so neuen Raum zur Verfügung zu stellen.

Es geht auch anders …

Project Atomic ist eine Gruppe von stark abgespeckten Distributionen, die – analog zu CoreOS – auf die Rolle als Containerhost optimiert sind. Sie unterscheiden sich von CoreOS dadurch, dass das als Basis dienende Fedora bzw. Red Hat Enterprise Linux mit beliebigen RPM-Paketen erweitert werden kann.

Im Umfeld dieser „Schmalspurdistributionen“ wird mit Cockpit ein Webadministrationswerkzeug gepflegt, das eine vom Konzept her mit Shipyard und DockerUI vergleichbare Ausrichtung verfolgt. Es lässt sich in einem Atomic-Host durch Eingabe von sudo atomic run cockpit/ws starten und bietet danach unter Port 9000 ein Webinterface mit an DockerUI erinnerndem Funktionsumfang an. Cockpit unterscheidet sich von den vorher besprochenen „Klassikern“ dadurch, dass es neben den für die Administration von Docker vorgesehenen Werkzeugen zusätzliche Tools zur Verwaltung des als Basis dienenden Linuxsystems mitbringt. Dadurch ergibt sich eine etwas höhere Komplexität – Geschmackssache.

Werkzeug Marke Eigenbau

Bei einer Übersicht der für Docker zur Verfügung stehenden Administrationsoberflächen darf die Möglichkeit zur Erzeugung eines Tools „Marke Eigenbau“ nicht zu kurz kommen: Docker bietet mit dem Remote-API eine Programmierschnittstelle an, die Drittanbietern die Verwaltung von Containern erleichtert.

Die technische Implementierung des Interface ist einfach: Ein laufender Docker Daemon bietet einen per unix:///var/run/docker.sock ansprechbaren Socket an, auf dem REST-Befehle entgegengenommen werden. Da das manuelle Implementieren des im Detail beschriebenen API in Arbeit ausartet, sollten Sie stattdessen auf eine fertige Bibliothek zurückgreifen. Das Docker-Team bietet unter eine Liste von Bibliotheken an, die sowohl C#, Java und C++ als auch diverse Webtechnologien abdecken.

Ein von Hand geschriebenes Administrationswerkzeug stellt mit Sicherheit den maximal möglichen Aufwand dar: Das „Zusammenklicken“ eines Clusterverbunds geht mit allen hier besprochenen Tools schneller von der Hand. Andererseits ist ein selbst erzeugtes Tool auf die Bedürfnisse der vorliegenden Situation optimiert. Verfügt Ihr Unternehmen beispielsweise über eine Vielzahl von Qt-Programmierern, so sollte die Vertrautheit eines C++-API nicht unter den Tisch fallen.

Beachten Sie allerdings, dass die Bibliotheken allesamt von Drittanbietern gewartet werden. Wenn einer von diesen die weitere Pflege seines „Babys“ einstellt, so steht man als Nutzer dumm da.

Management als Service

Alle hier besprochenen Systeme setzen auf Seiten des angehenden Admins Arbeit voraus: Container müssen deployt, virtuelle Maschinen angelassen werden. Das Deployment von mist.io beginnt mit dem Anmelden auf der Webseite des Anbieters. Im nächsten Schritt können neue Server durch Eingeben der IP-Adresse und des SSH-Schlüssels eingepflegt werden.

Achten Sie dabei darauf, dass die Server prinzipiell aus dem öffentlichen Internet erreichbar sein müssen – unsere per Kitematic oder Docker Machine erstellten Container lassen sich nicht ohne Weiteres per mist.io verwalten.

Das Anhalten und Anwerfen von Docker-Containern ist dabei nur ein Teilaspekt der Möglichkeiten des Produkts. Besitzer eines bezahlten Kontos können diverse Monitorregeln festlegen, die den Administrator über kritische Zustände im Clusterverbund informieren.

Fazit

Bei der Auswahl des für Ihre Applikation idealen Administrationswerkzeugs sind mehrere Kriterien zu beachten. Ist der zu verwaltende Verbund groß, so zahlen sich Systeme wie Shipyard oder Panamax aus. Ob des Aufwands für die Einrichtung der Node-Erkennung kann DockerUI mit einer handgeschriebenen Startseite bei kleineren Verbünden sinnvoller sein.

Kitematic ist primär zur explorativen Nutzung vorgesehen. Wer mit Docker oder mit einem der als Docker Machine angebotenen Produkte „herumspielen“ möchte, findet hier einen grafisch ansprechenden und leicht zu bedienenden Laufstall. Selbstentwickelte Skripte oder Werkzeuge stehen am anderen Ende der Komplexitätshierarchie. Sie bieten fast unbegrenzten Funktionsumfang, sind von der Erstellung her aber auch mit Abstand am schwierigsten.

mist.io nimmt in der Kohorte eine Sonderstellung ein. Es handelt sich dabei um die konsequente Weiterentwicklung des Cloud-Paradigmas: Wenn man Hardware und Betriebssystem „agil“ beschafft, so kann man doch auch das Management ebendieser Ressourcen auf die selbige Art und Weise abhandeln.

Aufmacherbild: red paper ship leading von Shutterstock / Urheberrecht: Kenishirotie

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -