Container vs. Virtualisierung

Was sind Container und was macht man damit?

Paul Rubens ist Journalist mit dem Fachgebiet Technologie und lebt in England.
Wofür sind Container gut? Hier sind zehn häufig gestellte Fragen bezüglich Application Container im Allgemeinen und Docker im Speziellen.

Docker ist erst vor wenigen Jahren in der IT-Szene erschienen, sorgt seit dem aber beständig für Aufregung. Das Application Container-Verfahren von Docker verspricht die IT genauso umzukrempeln, wie das die Virtualisierung vor einigen Jahren bereits getan hat.

Was sind eigentlich Container und was macht man damit?
Was sind eigentlich Container und was macht man damit?
Foto: agsandrew_shutterstock.com

Hier sind die zehn am häufigsten zu dieser Technologie gestellten Fragen:

Was sind Container und wofür sind sie gut?

Container sorgen dafür, dass Software verlässlich läuft, nachdem sie von einer Umgebung in eine andere versetzt worden ist, beispielsweise vom Laptop des Entwicklers in eine Testumgebung, von der Testumgebung in die Produktion oder von einem physikalischen Computer in einem Rechenzentrum auf eine virtuelle Maschine (VM) in einer privaten oder öffentlichen Cloud. Dafür können Sie Container verwenden. Wenn sie keine Hardware anfassen wollen, dann können Sie auch Virtualisierung einsetzen.

Die ersten Probleme tauchen auf, sobald die die verschobene Software umgebenden Systeme nicht identisch sind, so Solomon Hykes, der Entwickler von Docker, "Sie haben es mit Python 2.7 getestet, danach läuft es aber in der Produktion auf Python 3, und schon passieren die wildesten Sachen. Oder Sie verlassen sich darauf, dass eine bestimmte Version einer SSL-Bibliothek installiert ist, tatsächlich aber handelt es sich um eine andere. Oder sie haben im Testbetrieb Debian eingesetzt, in der Produktion ist aber Red Hat installiert. Wieder werden wilde Sachen passieren."

Aber nicht nur die Softwareumgebung hat großen Einfluss, fügt er hinzu: "Die Netzwerktopologie mag anders sein, oder die Sicherheitsbestimmungen oder der Speicher - trotzdem muss die Software laufen."

Wie versuchen Container dieses Problem zu lösen?

Nehmen wir der einfachheithalber an, dass ein Container aus einer kompletten Runtime-Umgebung besteht: aus einer Applikation inklusive aller Abhängigkeiten, Bibliotheken und andere Binär- und Konfigurationsdateien sowie Konfigurationsfunktionen, alles in ein Paket verschnürt. Durch die Containerisierung der Applikationsplattform und ihrer Anhängsel werden die Unterschiede in den diversen Betriebssystemdistributionen abstrahiert und damit ausgehebelt.

Hört sich nach Virtualisierung an. Wo ist der Unterschied?

Bei der Virtualisierung besteht das Paket aus einer VM inklusive Betriebssystem und Applikation. Ein physikalischer Server mit drei virtuellen Maschinen würde über einen Hypervisor und darauf drei separate Betriebssysteme bestehen.

Im Unterschied dazu läuft auf einem Server mit drei containerisierten Applikationen nur ein Betriebssystem, das sich alle drei Container teilen. Die von allen dreien genutzten Teile des Betriebssystems werden nur einmal gelesen, dazu hat jeder Container individuelle Zugriffsrechte auf das Betriebssystem. Dadurch sind Container sehr viel "leichter" als virtuelle Maschinen und benötigen weniger Ressourcen.

Welchen Unterschied macht das in der Praxis?

Ein Container mit demselben Inhalt wie eine VM enthält extreme viel weniger Bytes, wir sprechen von Megabytes bei Container im Gegensatz zu Gigabytes bei VMs. Daher kann ein Server auch sehr viel mehr Container fassen als VMs. Zudem benötigen VMs manchmal mehrere Minuten um zu booten, Apps in Container dagegen stehen beinahe sofort zur Verfügung.

Wenn Container sich dasselbe Betriebssystem teilen - wie sicher sind sie dann?

Allgemein gilt, dass Container nicht ganz so sicher sind wie VMs. Das kommt daher, dass eine Sicherheitslücke im Kernel möglicherweise Auswirkungen auf alle Container hat, die daran hängen (allerdings kann SELinux hier helfen). Das trifft auch auf Hypervisor zu, diese verfügen aber über sehr viel weniger Funktionen als ein typischer Linux-Kernel (der üblicherweise File Systems, Netzwerkfunktionalitäten, Application Process Controls und anderes enthält) und bieten dadurch viel weniger Angriffsfläche. Alles in allem offerieren Container generell nicht denselben Level an Isolation wie man das von der Hardware-Virtualisierung her gewohnt ist.

Worin liegt der Unterschied zwischen Docker und anderen Container?

Docker ist zum Synonym für die Container-Technologie geworden, weil das Unternehmen sehr gutes Marketing betrieben hat. Container sind aber keine neue Erfindung: In Linux finden sie sich in Form von LXC bereits seit fast zehn Jahren. FreeBSD jails, AIX Workload Partitions sowie Solaris Container offerieren eine ähnliche Virtualisierung auf Betriebssystem-Ebene.

Docker ist beileibe nicht der einzige Anbieter für Linux. Eine gangbare Alternative stelltrkt dar, ein Command Line Tool für App Container von CoreOS. rkt kann mit Docker-Container genauso gut umgehen wie mit eigenen.

Ein Grund für die Existenz von rkt ist der Fakt, dass Docker zu groß und kompliziert geworden ist, so Alex Polvi, CEO von CoreOS: "Docker baut nun Tools für Cloud-Server, Systeme fürs Clustern sowie eine ganze Reihe von Funktionen, vom Image-Building und Running über Up- und Downloading bis zu Overlay Networking, alles in einem monolithischen Binärsystem zusammengefasst, was in erster Linie als Root auf Ihrem Server ausgeführt wird."

Der Chief Advocate von CoreOS, Kelsey Hightower, fügt hinzu, dass App Container Images in der Regel sicherer sind als Docker Images, weil diese von ihren Erstellern gekennzeichnet sind. "Ich denke die Nutzer wollen das, genauso wie Apple seine Apps im App Store kennzeichnet", so Hightower. "Wenn Sie rkt einsetzen und ein App Container Image ziehen, können Sie anhand der Signatur auf seine Verlässlichkeit schließen. rkt kann auch mit Docker Images umgehen, aber diese sind nicht immer gekennzeichnet."

Auf welchen Betriebssystemen sollten Docker und rkt laufen?

LXC (und libcontainer, Dockers eigene Container-Technologie, die LXC ersetzt) sind Linux-basiert, entsprechend tut es jede Linux-Distribution mit einem relative neuen Kernel 3.8 oder höher).

Die meisten Linux-Distributionen sind unnötig aufgeblasen, wenn sie für das Ausführen von Container ausgelegt sind. Das ist keine Überraschung, da sich eine Reihe von Linux-Distributionen ganz auf Container spezialisiert hat. Beispiele dafür sind CoreOS, Red Hats Project Atomic, Canonicals Snappy Ubuntu sowie VMwares Project Photon.

Gibt es kommerzielle Linux Container-Lösungen?

Ja, und zwar u.a. folgende:

  • Docker Subscription for Enterprise - eine gebündelte Lösung inklusive Docker Hub Enterprise, Docker Engine sowie einer kostenpflichtigen Support-Unterstützung.

  • CoreOS Tectonic- ein integrierter Stack voll mit Software von CoreOS plus einer Managementkonsole für Workflow und Dashboards, einem Register für den Bau und das Teilen von Container, zusätzliche Tools für die automatisierte Verteilung und für Updates sowie Googles Container Management Plattform Kubernetes.

Was ist, wenn ich Windows nutze? Kann ich trotzdem Container einsetzen?

Microsoft hat angekündigt, die Container-Technologie von Docker für Windows Server auszulegen. Zudem sollen Windows Server Container kommen, die auf dem Windows Server laufen.

Eine "dünne" Version des Windows Server mit dem Namen Nano Server, die speziell für Container ausgelegt ist, soll folgen. Ähnlich wie das Konzept des Windows Server Core im Windows Server 2008 soll dieser lediglich fünf Prozent der Größe eines typischen Windows Servers erreichen.

Werden Container die Server Virtualisierung ersetzen?

Das ist kurzfristig unwahrscheinlich, weil VMs mehr Sicherheit bieten als Container. Auch sind die Orchestrierungs-Tools für eine große Anzahl an Container können es noch nicht mit Software wie VMwares vCenter oder Microsofts System Center aufnehmen, die virtuelle Infrastrukturen managen.

Auch kann es sein, dass Container eher als Ergänzung zu VMs gesehen werden denn als Konkurrenz. Container können schließlich in leichtgewichtigen VMs laufen, um so die Isolierung weiter zu treiben und die Sicherheit zu erhöhen. Auch lässt sich mittels Hardware-Virtualisierung die Hardware-Infrastruktur, bestehend aus Netzwerke, Server und Storage, viel leichter managen. Auf sie sind Container angewiesen.

"Kaum einer mag Hardware managen, also wird sie in VMware abgebildet und softwareseitig verwaltet", so Hightower. "Container ändern daran nichts. Sie können Container nutzen und wenn Sie keinen Bock auf Hardware-Management haben, setzen Sie eben zusätzlich Virtualisierung ein."

Dieser Beitrag erschien zuerst auf CIO.com