Die Zeiten, in denen Software auf lokalen Maschinen programmiert und isoliert in abgeschirmten Firmennetzwerken betrieben wurde, sind längst vorbei. Im Cloud-Zeitalter steigt der Wert einer Applikation mit ihrem Vernetzungs- und Verbreitungsgrad. Dies hat fundamentale Auswirkungen auf die Art und Weise, wie Anwendungen heute entwickelt, getestet und betrieben werden. Ausfallsicherheit und Business Continuity sind in diesem Kontext nur zwei Schlagworte, die es dabei zu berücksichtigen gilt. Eine Technologie, die dabei immer weiter nach oben auf die Agenda von Entwicklern aber auch CTOs und IT-Architekten rückt, ist die der Container. Neben CoreOS ist Docker hierfür derzeit die bevorzugte Wahl.
Überblick: Container-Technologie und Docker
Software wurde traditionell für den Einsatz auf einem einzigen System entwickelt, erlebt seit dem Einzug von Cloud-Technologien jedoch eine Revolution. Skalierbarkeit, Hochverfügbarkeit und Portabilität sind die Top-Themen, mit denen sich CTOs und IT-Architekten seit geraumer Zeit beschäftigen müssen, um die technischen Erwartungen der Geschäftsseite zu erfüllen. Aber wie lässt sich eine Software über unterschiedliche Plattformen und Infrastrukturen "bewegen", ohne dabei ständig an die jeweiligen Voraussetzungen für das Deployment und den Betrieb angepasst zu werden? Unterschiedliche Hardware- und Softwarekonfigurationen sowie Abhängigkeiten von wechselnden Softwareversionen sorgen für eine stetig steigende Komplexität.
Eine Antwort bietet hierfür ein Ansatz, dessen Vorbild von der Transport-Industrie im Jahr 1956 geschaffen wurde. Container als Transportmittel für eine Vielzahl unterschiedlicher Güter, um diese per LKW und Schiff von einem Ort A an einen anderen Ort B zu verfrachten. Diesem Vorbild folgend wurde in den vergangenen Jahren ein ähnlicher Ansatz entwickelt, der nun immer stärker in der Anwendungsentwicklung Berücksichtigung findet. Docker, eine Technologie, die es seit dem Jahr 2013 ermöglicht, Applikationen zwischen verschiedenen Systemen zu portieren.
Docker ist ein Open-Source Projekt, das für die automatisierte Bereitstellung von Applikationen, die in einem Container organisiert sind, verwendet wird. Docker nutzt hierzu die Eigenschaften des Linux-Kernels. Ressourcen wie Prozessor, RAM, Netzwerk oder Block-Speicher lassen sich so voneinander isolieren, ohne auch nur eine einzige virtuelle Maschine starten zu müssen. Weiterhin können Applikationen vollständig von der jeweiligen Umgebung inklusive der Prozesse, Dateisysteme oder des Netzwerks getrennt und damit autonom betrieben werden. Mit dem Aufheben von externen Abhängigkeiten lassen sich Applikationen autonom über Systeme hinweg verschieben. Docker kapselt hierzu die eigentliche Anwendung und ihre notwendigen Abhängigkeiten wie Bibliotheken in einen virtuellen Container, welcher sich dann auf jedem beliebigen Linux- und Windows-System ausführen lässt. Dies erhöht den Portabilitätsgrad und erhöht die Flexibilität.
Während des Betriebs einer Applikation auf einer virtuellen Maschine wird nicht nur die Applikation selbst, sondern auch eine Reihe weiterer Ressourcen benötigt, die für einen enormen Overhead und große Abhängigkeiten sorgen. Dazu gehören die notwendigen Bibliotheken sowie ein vollwertiges Betriebssystem und ggf. weitere Dienste und Applikationen. Ein Docker Container hingegen umfasst nur die eigentliche Applikation sowie die dazugehörigen Abhängigkeiten. Dieser wird als isolierter Prozess auf dem Host-Betriebssystem ausgeführt und teilt sich den Linux-Kernel mit anderen Docker Containern. Durch die strickte Isolation können mehrere Container auf dieselben Kernel-Ressourcen zugreifen. Für jeden Container lässt sich dabei exakt definieren, wie viele Ressourcen (Prozessor, RAM, Bandbreite) ihm zur Verfügung stehen.
Wofür lässt sich Docker einsetzen?
Für die Container-Virtualisierung mit Docker bieten sich verschiedene Einsatzmöglichkeiten an, die für die tägliche Entwicklung und im Bereich DevOps Vorteile bieten:
· Offline-Entwicklung auf einem lokalen System, um dieselbe Umgebung zu nutzen wie auf dem Produktiv-Server
· Continuous Integration und Continuous Delivery
· Optimierung des Entwicklungsprozesses (Entwicklung > Test > QA > Produktion)
· verteiltes "Collaborative Development" im Team
· Umsetzung von Multi-Cloud-Szenarien (Umziehen / Betreiben der gleichen Applikation auf mehreren Cloud-Plattformen)
· Innerhalb von Cloud-IaaS-Marktplätzen, um Workloads zwischen den verschiedenen Anbieter-Infrastrukturen je nach Preis oder anderer Parameter zu bewegen.
· Umsetzung des "Immutable Infrastructure Pattern" und Blue-Green Deployments
Docker in der Praxis
Nachdem Docker unter Entwicklern zunehmend an Beliebtheit gewonnen hat, zieht die Container-Technologie nun auch verstärkt in die Enterprise-IT ein. CIOs und CTOs verfolgen damit das Ziel, ihren Entwicklern mehr Bequemlichkeit und Kontrolle bei der Anwendungsentwicklung zu ermöglichen und die Verfügbarkeit ihrer Applikationen zu erhöhen - wenn z.B. ein Container ausfällt oder eine Applikation ausgetauscht werden muss. Im selben Zug sehen IT-Entscheider in Container-Strategien die Möglichkeit, ihre Microservice-Architekturen innerhalb großer verteilter Infrastrukturen in den Griff zu bekommen, indem jeder Microservice seine eigene Container-Strategie erhält, mit der er verwaltet wird.
Große Unternehmen setzen dabei bevorzugt auf Private Cluster (2 bis 5 Maschinen), um die eigenen Anforderungen hinsichtlich Sicherheit und Performance umzusetzen. Hierbei verfolgen sie zwei Strategien: On-Premise Deployments und Docker-Hosting-Services. Die On-Premise Deployments werden dabei vornehmlich auf Bare Metal (physikalische Maschinen) zusammen mit der OpenStack-Cloud-Software aufgebaut, um vom Freiheitsgrad der Open-Source-Technologie zu profitieren. Die größte Herausforderung, der sich IT-Entscheider dabei ausgesetzt sehen, ist die Tatsache, dass derzeit nur wenig fertige Lösungen existieren, die ohne Anpassung in den gewünschten IT-Betrieb passen. Zu einem der wenigen Anbieter, die neben einem gehosteten Service auch eine On-Premise Variante inklusive Infrastrukturberatung im Portfolio haben, gehört GiantSwarm aus Deutschland.
Marktüberblick: Docker-Hosting-Anbieter
Eine Alternative zur eigenen On-Premise Container-Infrastruktur sind Docker-Hosting-Anbieter, die den direkten Betrieb und das Deployment von Docker-Anwendungscontainern ermöglichen, ohne für den Betrieb der dafür notwendigen Container-Infrastruktur selbst sorgen zu müssen. Neben der Docker-Plattform selbst, auf die bereits namhafte Unternehmen wie Paypal, Uber, Spotify, ING oder BBC News setzen, gehören dazu:
GiantSwarm
Das Startup GiantSwarm hat eine Microservice-Infrastruktur auf Basis der Docker-Technologie entwickelt, mit der Entwicklern das Deployment von Applikationen innerhalb von Docker-Containern vereinfacht wird. Hierzu wird die Architektur in einer Konfigurationsdatei im JSON-Format hinterlegt, anhand derer die Infrastruktur samt ihren Abhängigkeiten anschließend aufgespannt wird. GiantSwarm sorgt dafür, dass die Applikationen laufen und verknüpft automatisch sämtliche Services miteinander. Das Unternehmen aus Köln hat nicht nur einen eigenen Hosting-Service im Angebot, sondern berät vor allem große Unternehmen beim Aufbau und Betrieb von On-Premise Docker-Installationen im Kontext agiler Softwareentwicklung und DevOps-Prozessen. Kunden, die GiantSwarm bereits überzeugen konnte, sind neben internationalen Großunternehmen das deutsche Startup leanIX und die Entwicklerprofis von codecentric.
ProfitBricks
Der Zugang zu ProfitBricks Docker Hosting-Plattform ist derzeit über einen Early Access Invite möglich. ProfitBricks adressiert mit seiner Docker-Plattform das Problem mit dem "Noisy Neigbor", ein Phänom innerhalb von geteilten Infrastrukturen, bei dem eine virtuelle Maschine eine überproportionale Menge an Ressourcen in Anspruch nimmt. Nutzer der Docker-Plattform erhalten somit dedizierte CPU Cores und RAM für ihre Docker-Hosts, die bei Bedarf automatisch skalieren. Das bedeutet, dass die dedizierten Ressourcen mit einer Autoscaling-Funktion ausgestattet sind und sich damit dem Bedarf der Docker-Container anpassen können.
Amazon EC2 Container Service (ECS)
Mit dem EC2 Container Service (ECS) lassen sich verteilte Anwendungen in Docker-Containern innerhalb eines Clusters bestehend aus EC2-Instanzen betreiben. Der Cluster wird vollständig von AWS verwaltet. Das Ressourcen-Management von AWS verteilt die Container innerhalb des Clusters auf Basis der Konfiguration des Speicher- und CPU-Verbrauchs. Damit stehen die notwendigen Ressourcen dort zur Verfügung, wo sie gerade benötigt werden. Anhand der AWS APIs lassen sich die Anwendungen in den Docker-Containern starten und beenden sowie mit weiteren AWS-Services wie Elastic Load Balancing, Elastic Block Store Volumes und Identity and Access Management-Rollen verbinden.
Microsoft Azure Container Service
Die Basis des Azure Container Service bilden die Open-Source-Technologien Docker und Apache Mesos. Das Management erfolgt über das Data Center Management System Mesosphere DCOS. Microsoft will seinen Kunden damit die Möglichkeit geben, einen eigenen Mesos Container Cluster auf der Azure Cloud-Infrastruktur aufzubauen, um darüber Docker-ready Applikationen über mehrere virtuelle Maschinen horizontal zu skalieren. Der Service befindet sich bei Microsoft derzeit noch in der Entwicklung. Eine erste Preview ist gegen Ende 2015 zu erwarten. Allerdings werden dann wohl zunächst nur Linux-Container unterstützt, die Unterstützung für Windows-Server erfolgt dann in 2016.
Docker gehört auf den Tisch von IT-Entscheidern
Nachdem die IT-Industrie über Jahre hinweg Container in Form von virtuellen Maschinen genutzt hat, um eine Abstraktionsebene zu den physikalischen Plattformen zu schaffen, ermöglichen es Technologien wie Docker nun, Container zwischen Plattformen zu verschieben. Genauer gesagt geht es darum, Linux-Applikationen und Workloads zwischen mehreren Clouds zu bewegen, um damit die Portabilität zu verbessern. Im ersten Moment erscheint Docker damit als ein typisches Tool für Entwickler. Aus dem Blickwinkel eines CIOs handelt es sich allerdings klar um ein strategisches Werkzeug für die Optimierung von modernen Applikations-Deployments. Docker hilft dabei, die Portabilität einer Anwendung sicherzustellen, die Verfügbarkeit zu erhöhen und das Gesamtrisiko zu minimieren. Von dieser neuen Form der Portabilität können auch Cloud-Marktplätze und Cloud-Brokerage Services wie Deutsche Börse Cloud Exchange (DBCE) profitieren. Sie können ihren Kunden die Möglichkeit bieten, Applikationen zwischen den unterschiedlichen Anbietern je nach Bedarf zu verschieben. (wh)