Container sind gekapselte, virtuelle Server und stellen eine Umgebung für die Ausführung (schlanker) Softwaremodule mit einem eng abgegrenzten Funktionsbereich bereit. In diesen Container-Anwendungen sind alle benötigten Komponenten als Bibliothek enthalten. So ist sichergestellt, dass die Ausführung unabhängig von externen Komponenten und der Umgebung möglich ist und sich die Container-Anwendung, unabhängig von ihrer jeweiligen Ausführungsumgebung, immer identisch verhält. Kommen mehrere Container-Anwendungen auf einer Hardwareplattform zum Einsatz, laufen diese als unabhängige Instanzen und sind voneinander und vom Gesamtsystem getrennt. Sie teilen sich aber das Betriebssystem und gegebenenfalls bestimmte Hardwareressourcen, sie können auch aufeinander aufbauen oder Daten untereinander austauschen. Die 2013 als Open-Source-Projekt gestartete Docker-Laufzeitumgebung (Docker Engine) hat sich in der Zwischenzeit zum De-facto-Standard für Container-Umgebungen entwickelt.
Unterschied zu virtuellen Maschinen
Wie virtuelle Maschinen greift auch die Container-Technik über eine Abstraktionsschicht auf die Nachbildung eines Hardware- oder Softwareobjekts zu. Der Unterschied ist allerdings, dass für die Ausführung von Containern die Virtualisierung eine Ebene höher aufsetzt und statt der physikalischen Hardware das Betriebssystem emuliert wird, das dann auch die Container-Laufzeitumgebung bereitstellt. So wird es möglich, dass sich mehrere Container-Anwendungen ein Betriebssystem mit den vorhandenen Ressourcen ohne feste Reservierung teilen. Da außerdem in jeder Container-Anwendung nur die benötigten Betriebssystemkomponenten und Bibliotheken enthalten sein müssen, gilt die Container-Technik als besonders leichtgewichtig und ressourcenschonend.
Lokal oder in der Cloud lauffähig
Ursprünglich wurde die Container-Technik für Linux-Betriebssysteme entwickelt. Seit der Einführung von Hyper-V können auch die Betriebssysteme ab Windows 10 und Windows Server 2016 für Virtualisierungsaufgaben und damit für Container-Anwendungen genutzt werden. Daneben unterstützen auch Cloud-Plattformen wie z.B. Amazon Web Services (AWS), Microsoft Azure oder Google Cloud Computing den Einsatz von Containern, sodass heute eine Container-Laufzeitumgebung auf Hosts oder in Serverumgebungen, lokal oder in der Cloud, aufsetzend auf den Betriebssystemen Windows, Linux oder Mac OS genutzt werden kann. Aufgrund ihrer geringen Größe können Container-Anwendungen je nach Bedarf auch problemlos aus lokalen Architekturen in Bare-Metal-Systeme sowie in Public-, Private-, Hybrid- und Multi-Cloud-Umgebungen verschoben werden.
Vor- und Nachteile von Container-Anwendungen
Ein großer Vorteil von Container-Anwendungen ist die Bereitstellung innerhalb weniger Sekunden: Nach dem Pull (Herunterladen) ist nur noch der Start über die Ausführung eines einzelnen Befehls notwendig. Auf diesem Weg lassen sich auch neue Versions- und Konfigurationsstände in Sekundenschnelle übernehmen. Ändert sich die Auslastung, kann die Arbeit schnell auf mehrere Container-Anwendungen verteilt werden, sofern diese Funktion unterstützt wird. Weitere Vorteile sind die Verwendung identischer Hardwareressourcen bei einem parallelen Einsatz und die Unterstützung verschiedener Betriebssystemumgebungen sowie hybrider Architekturen, sodass die Verwendung auch in einer Cloud-Umgebung möglich ist.