Docker-Container: Ein Überblick

Neben CoreOS ist Docker heute eine der wichtigsten Container-Technologien. René Büst, Analyst bei Crisp Research, gibt heute einen dicht gepackten Überblick, warum und für wen diese Technologien wichtig sind.

Ü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 ihre 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 zu 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 Schiffen 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 ebenfalls 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, 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 es auf dem Produktivserver der Fall ist
  • Für Continuous Integration und Continuous Delivery
  • Zur Optimierung des Entwicklungsprozesses (Entwicklung > Test > QA > Produktion)
  • Für das verteilte “Collaborative Development” im Team
  • Zur 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.
  • Für die 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 von dem 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 gehört GiantSwarm aus Deutschland, die neben einem gehosteten Service ebenfalls eine On-Premise Variante inkl. Infrastrukturberatung im Portfolio haben, mit der ein fertiger Stack vorgegeben wird.

Marktüberblick: Docker-Hosting Anbieter

Eine Alternative zu der eigenen On-Premise Container-Infrastruktur sind Docker-Hosting-Anbieter, die den direkten Betrieb und das Deployment von Docker-Anwendungscontainer 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 namenhafte Unternehmen wie Paypal, Uber, Spotify, ING oder BBC News setzen, gehören des Weiteren:

GiantSwarm

Das Startup GiantSwarm aus hat eine Microservice-Infrastruktur auf Basis der Docker-Technologie entwickelt, mit der Entwickler das Deployment von Applikationen innerhalb von Docker-Containern vereinfacht wird. Hierzu wird die Architektur in einer Konfigurationsdatei im JSON-Format hinterlegt, anhand welcher die Infrastruktur samt ihren Abhängigkeiten anschließend aufgespannt wird. GiantSwarm sorgt hierbei dafür, dass die Applikation laufen und verknüpft automatische 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 Software-Entwicklung 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 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 Cluster 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, 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 ebenfalls Cloud Marktplätze und Cloud-Brokerage Services wie der Deutsche Börse Cloud Exchange (DBCE) profitieren, um ihren Kunden die Möglichkeit zu bieten, Applikationen zwischen den unterschiedlichen Anbietern je nach Bedarf zu verschieben.