Container-Technologien auf dem Vormarsch

Docker in a Nutshell

Lesen Sie, warum die Container-Technologie Docker derzeit einen Boom erlebt und wie sie die Art der Anwendungsbereitstellung über Plattformgrenzen hinweg verändert.

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.

Unterschied: Virtualisierung vs. Docker-Container
Unterschied: Virtualisierung vs. Docker-Container
Foto: Docker/ Crisp Research, 2014

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