Frank PientkaInnovation und Technologie

DevOps: Docker – auf zu neuen Ufern (Teil 2)

Zum Transport von Waren wurden schon immer spezielle Verpackungs- und Transportkisten eingesetzt. Ende der 50er Jahre des vergangenen Jahrhunderts wurde der Güterverkehr durch die Einführung der ISO genormten 40-Fuß-Frachtcontainer revolutioniert. Durch die genormte Form konnten diese seither mit den verschiedensten Transportmitteln zu Wasser, Schiene, und Straße befördert und schnell mit dazu gehörigen Kränen umgeschlagen werden. Sie bilden so das Rückgrat der globalisierten Wirtschaft, da inzwischen der Großteil des Warenhandels damit erfolgt.

Ähnlich wie Container für die Handelsschifffahrt schickt sich Docker seit über einem Jahr an, die Art, wie wir Umgebungen für verteilte Anwendungen zur Verfügung stellen, zu revolutionieren. Der Grundsatz „build, ship and run any app anywhere” erinnert ein wenig an dem Java-Ansatz “write once run anywhere”. Manchmal auch karikiert, als „write once, debug and test everywhere“.

Das große Thema, was beide verbindet, ist die Virtualisierung von Anwendungen und deren Ressourcen. Dabei handelt es sich bei Docker um einen leichtgewichtigen Linux-Container, der über eine einheitliche Art schrittweise aufgesetzt und betrieben werden kann. Im Gegensatz zu Virtualisierungslösungen, die neben einem Hypervisor ein komplettes Gastbetriebssystem benötigen, erweitert Docker den Linux-Prozessraum um Virtualisierungskonzepte, so dass kein neues Betriebssystem installiert werden muss. Die in einem Docker-Container installierten Anwendungen sind jedoch physikalisch und logisch so weit voneinander getrennt, dass diese eigene Ressourcen und Anwendungen verwalten können.

Devops teil 2

Zu den fünf Hauptzielen des Containers gehören:

  • Standardoperationen zum Umgang mit dem Container. So wie die Logistik-Container unabhängig von ihrem Inhalt verschoben, geöffnet, verschlossen, markiert werden können, so besitzen Docker-Container auch einen standardisierten Tool-Stack, mit dem sie verwaltet, gestartet, gestoppt, geklont usw. werden können.
  • Content-Unabhängig: Identisch zu der Art wie ein Logistik-Container gänzlich unabhängig von seinem Inhalt behandelt werden kann, können Docker-Container auf exakt dieselbe Art verwendet werden; unabhängig vom eigentlich Inhalt, der sich im Container befindet.
  • Infrastruktur-Unabhängig: So wie ein Logistik-Container bspw. in Deutschland auf einen LKW verladen, im Hafen von Rotterdam auf ein Schiff verladen und in den USA – wieder mit einem Infrastruktur-Wechsel, zum Beispiel auf die Schiene – zum Zielort gebracht werden kann, können Docker-Container ihren Ursprung auf dem lokalen Entwicklungs-System des Developers ihren Ursprung nehmen und den Weg von der Dev- zur Integrations- und Test-Umgebung bis hin zur Staging- und Produktiv-Umgebung finden.
  • Basis-Technologie für Automatisierung: Inzwischen gehören Verladestationen, die mit geringem menschlichen Einsatz ganze transatlantische Containerschiffe be- und entladen, zur Infrastruktur von Logistik-Unternehmen. Lediglich ein menschlicher Kranführer ist noch notwendig, um die Wellenbewegungen des Schiffes zu kompensieren – alle weiteren Schritte übernehmen vollautomatisierte Dronen. Ähnliches Potenzial kann mit Docker-Containern ausgeschöpft werden: automatisierte Tests, Build und Deployments können auf dem Abstraktionslevel des Containers ansetzen und somit einen weitaus effizienteren Workflow ermöglichen, als dies mit bisherigen Konfigurations-Management- und Deployment-Tools möglich ist.
  • Skalierbarkeit in Hochlastsituationen: Zugegeben, auch virtuelle Maschinen können skaliert werden. Nehmen wir jedoch Hochlastszenarien, in denen Burstzeiten und -amplituden extreme Ausmaße annehmen. Hier haben Docker-Container eindeutige Vorteile gegenüber herkömmlicher Virtualisierung. Durch die infrastrukturelle Unabhängigkeit kann viel schneller reagiert und skaliert werden, als dies mit homogenen Virtualisierungslösungen möglich ist.

Das finale Ziel ist die industriereife Auslieferung von in Containern verpackten Anwendungen.

Neben Skripten besteht Docker aus drei Haupteilen: Daemon zur Verwaltung der Laufzeitumgebungen, Images und Repository als Registry für die Images.

Durch die deklarative Beschreibung der verwendeten Ressourcen und Software-Images ist es einfach, solche Umgebungen schrittweise anzupassen oder zu aktualisieren. Da wichtige Komponenten außerhalb des Containers in einer Textdatei beschrieben sind (Infrastructure-as-code), erhält man schnell und transparent den Überblick über die verwendeten und angebotenen Ressourcen. Redundanzen werden hierbei vermieden: Ein Container wird schrittweise definiert – teilen Container identische Konfigurationsschritte, können diese Redundanzen durch das Docker-Caching vermieden werden.

Nach dem DevOps-Grundsatz wird die Docker-Infrastruktur genauso wie der Anwendungscode behandelt. Das bedeutet, alles ist versioniert, getestet und automatisiert. Durch die kurzen Start- und Stop-Zeiten und dem geringen Ressourcenverbrauch ist es ohne viel Aufwand möglich, bedarfsgerecht neue Container hochzufahren, wenn diese z. B. für Lastspitzen benötigten werden.

Das Logo von Docker ist ein blauer Wal. Da Wale zwar große, aber trotzdem sehr gesellige Tiere sind, ist um Docker bereits ein neues Ökosystem entstanden. Da Docker unter der freien Apache-Lizenz veröffentlicht wird, sind auch viele namhafte Hersteller, wie Google, RedHat, Microsoft und IBM inzwischen im Boot. Docker entwickelt sich immer weiter weg vom Container hin zu einer Plattform mit eigenen Werkzeugen und Zusatzprodukten, die es sowohl ermöglichen, Docker in bestehende Systemumgebungen besser zu integrieren, als auch im Großen zu betreiben.

Vieles in Docker ist vom Grundsatz nicht neu. Es basiert auf Grundlagen wie Linux Containers (LXC ist inzwischen durch die eigene Docker-Bibliothek libcontainer ersetzt), Kernel-Namespaces, chroot und Cgroups, die schon länger Teil des Linux-Kernels sind und einfach das Linux-Architekturkonzept weiterentwickeln. Doch in der Kombination und Erweiterung dieser Technologien schafft es Docker, den Bedarf nach skalierbaren und heterogenen Infrastrukturen für verteilte Anwendungen schnell, transparent und ressourcenschonend zur Verfügung zu stellen. Gerade Web-Anwendungen, die nach der Zwölf-Faktoren-Methode entwickelt werden, profitieren von der Docker-Herangehensweise, auch wenn Docker selbst noch nicht alle zwölf Faktoren erfüllt.

Eine exzellente und stabile API, ausführliche Dokumentation und Beispiele sowie eine aktive Open Source Community geben Docker den notwendigen Anschub, um in derartigem Sturm die Infrastrukturwelt auf den Kopf zu stellen.

IaaS- und PaaS-Lösungen wachsen immer mehr zu hybriden Plattformen zusammen. Wir stehen noch am Anfang einer vielsprechenden Entwicklung, die uns hilft, auf den wachsenden Bedarf von IT-Ressourcen flexibel zu reagieren und die damit verbundene Komplexität und Risiken zu minimieren.

Weitere Informationen: https://www.docker.com/whatisdocker

Schlagwörter: ,