In den letzten Jahren hat kaum eine andere Technologie so viel Zuspruch in der IT-Welt erhalten wie Container: Docker hat bei Entwicklern einen Nerv getroffen und IT-Projekte im Sturm erobert. Noch im ersten Jahr wurde diese Technologie produktiv eingesetzt – und das, obwohl sie noch nicht einmal die Version 1.0 erreicht hatte.
Mithilfe von Containern lassen sich oft ohne großen Aufwand die Komponenten des Produktionssystems auf der lokalen Workstation der Entwickler nachbilden, was die Genauigkeit von Tests erhöht. Docker hat, unabhängig von Plattform und Programmiersprache, ein einheitliches Format für Packaging und Deployment, was die Anzahl der Deployment-Pipelines reduziert. Alle Abhängigkeiten werden zusammen mit der Anwendung im Docker Image selbst paketiert. Container erlauben potentiell eine bessere Nutzung vorhandener Compute-Ressourcen, da mehrere unterschiedliche Workloads auf derselben virtuellen Maschine laufen können.
AWS und Container
Auf der Hausmesse re:Invent im Jahr 2014 hat AWS den Container-Management-Service Amazon Elastic Container Service (ECS) vorgestellt. Vorher war es notwendig, eigene Mechanismen zur Orchestrierung und Verwaltung von Containern zu implementieren. Amazon ECS unterstützt Docker-Container und erlaubt es, Anwendungen auf einem verwalteten Cluster von Amazon EC2-Instanzen zu betreiben. Mit Amazon ECS entfällt es, eine eigene Clustermanagementinfrastruktur zu installieren, zu betreiben oder zu skalieren. Mit einfachen API-Befehlen lassen sich auf Docker basierende Anwendungen starten und beenden sowie der gesamte Zustand des Clusters abfragen werden. Amazon ECS ist tief in die bestehende AWS-Infrastruktur integriert und es lassen sich beispielsweise Security Groups, Elastic Load Balancing, EBS Volumes und IAM-Rollen nutzen. Ein Amazon EBS Volume ist ein robustes Speichergerät auf Blockebene, das an einzelne EC2 Instances angefügt werden kann. Eine Security Group agiert als virtuelle Firewall, die den Datenverkehr für eine oder mehrere Instances steuert.
Abbildung 1 zeigt die grobe Architektur von Amazon ECS. Das Backplane basiert auf einem Key Value Store, auf dem ein Clustermanagementservice aufsetzt. Auf diesen Service greifen sowohl ein API als auch ein Agent-Communication-Service zu. ECS ist ein agentenbasiertes System, was bedeutet, dass auf jeder EC2 Container Instance der ECS Agent läuft und ECS-Kommandos in Docker-Aufrufe umsetzt. Der Agent ist in Golang implementiert und quelloffen auf GitHub verfügbar. Ein weiteres interessantes Open-Source-Projekt ist Blox. Blox ermöglicht mehr Kontrolle darüber, wie Anwendungen in Docker-Containern in Amazon ECS laufen. Dieses Framework ermöglicht es, eigene Scheduler zu bauen und Scheduler von Dritten in Amazon ECS laufen zu lassen.