Transportcontainer in der Logistik ermöglichen es, Waren jeglicher Art in einer standardisierten “Verpackung” flexibel und schnell mit unterschiedlichen Verkehrsmitteln zu verschicken und zu verteilen – ob per Schiff, Flugzeug, Bahn oder LKW. Ähnlich operieren Container in der IT: Sie verpacken eine Anwendung und alle zu ihrer Ausführung erforderlichen Dateien in ein handliches Paket.
Das vereinfacht sowohl die Installation und den Betrieb von Server-Anwendungen als auch deren Management und Verteilung. Somit erleichtern Container den Umgang mit komplexen Server-Anwendungen und ermöglichen eine weitgehende Automatisierung von Rollout-Prozessen im Rechenzentrum. Das ist besonders bei der Bereitstellung von skalierbaren, verteilten Anwendungen innerhalb von Cloud-Umgebungen wichtig.
Eine wesentliche Problematik beim Rollout von neuen Anwendungen oder neuen Releases ist es, dass jede Anwendung von gewissen Elementen ihrer Umgebung abhängt. Hierzu zählen beispielsweise lokale Einstellungen oder Funktionsbibliotheken. Oft unterscheiden sich die Einstellungen in der Entwicklungsumgebung von denen der Testumgebung und der Produktion. Dann kann es schnell passieren, dass eine Anwendung in der Produktion wider Erwarten anders oder gar nicht funktioniert.
Weitere Faktoren, die einen reibungsloses Rollout stören können, sind das der Anwendung zu Grunde liegende Betriebssystem, dessen Version und Einstellungen, alle hinzugefügten Pakete und Module oder die Konfiguration des Netzwerks. Die Bereitstellung mehrerer Anwendungen über unterschiedliche Plattformen ist also eine Herausforderung. Hier bietet der Einsatz von Containern unmittelbare Vorteile: Entwickler verpacken so ihre Anwendungen inklusive aller Abhängigkeiten wie Bibliotheken und Konfigurationsdateien in einem Container. Die Anwendungen werden also nicht mehr direkt auf den Zielsystemen installiert. Die Container stellen somit die komplette Laufzeitumgebung der Applikation in einem Paket bereit.
So haben Entwickler die Möglichkeit, Anwendungen zwischen verschiedenen Umgebungen hin- und herzuschieben – zum Beispiel für Tests in einem spezifischen Hardware-Umfeld und den Betrieb in einem anderen. Oder sie betreiben Applikationen erst auf einer physikalischen Maschine und dann in einer Private, Public oder Hybrid Cloud.
Container machen Anwendungen unabhängiger von der Umgebung, in der sie ausgeführt werden. Sie agieren damit ähnlich einer virtuellen Maschine (VM). Während eine VM jedoch ein vollständiges Betriebssystem sowie Applikationen enthält, teilen sich mehrere Container einen Betriebssystemkern. Jede Anwendung erhält lediglich einen neuen User Space und damit eine komplett isolierte Umgebung. Container verbrauchen also im Vergleich zu VMs deutlich weniger Ressourcen wie Rechenleistung, Hauptspeicher etc. Und es dreht sich hier um Megabytes bei Containern im Vergleich zu Gigabytes bei VMs. Daher passen auf einen Server sehr viel mehr Container als virtuelle Maschinen. Zudem sind Container schneller einsatzbereit: Während VMs manchmal mehrere Minuten zum Start benötigen, stehen Anwendungen hier beinahe sofort zur Verfügung.
Container ergänzen die Virtualisierung
Trotzdem werden Virtualisierungs-Lösungen weder überflüssig noch komplett ersetzt werden, da sie nicht für alle Anwendungsszenarien passen. So eignen sich Container zum Beispiel sehr gut für Infrastrukturen, in denen eine große Zahl von Applikationsinstanzen parallel laufen. Sie sind zudem ideal für Anwendungen, welche häufigen Updates und funktionalen Erweiterungen unterliegen. Bei Applikationen, die aus unterschiedlichen Komponenten bestehen und auf einer Microservices-Architektur basieren, bieten Container ebenfalls eine effiziente Möglichkeit, neue Rollouts ohne großen Overhead zu implementieren.
Für andere Anwendungsfelder hingegen ist die Virtualisierung mit Hypervisoren nach wie vor die bessere Wahl: Beispielsweise für die Bereitstellung und den Betrieb von Standard-Serverdiensten wie Datenbankservern, Directory Servern oder auch Webservern – also im Prinzip für standardisierte Anwendungen, die längeren Aktualisierungszyklen unterliegen und von Dritten bereitgestellt werden. Somit sind Container eher eine sinnvolle Ergänzung zur Virtualisierung als ein Ersatz.