Virtuelle Maschinen und Container

Linux-Container und virtuelle Maschinen (VM) sind paketierte Computing-Umgebungen, die verschiedene IT-Komponenten vereinen und vom Rest des Systems isolieren. Sie unterscheiden sich hauptsächlich in Bezug auf ihre Skalierbarkeit und Portierbarkeit.

Was ist der Unterschied zwischen einer virtuelle Maschine und einem Container?

Virtuelle Maschinen

Eine virtuelle Maschine (VM) emuliert durch Software ein Computersystem. Dadurch ist es möglich, viele dieser „virtuellen Maschinen“ getrennt voneinander auf einer einzigen Hardware zu betreiben, dem Host-Server. Dabei teilen sich die Softwares der VM – also Betriebssysteme wie Linux oder Windows und entsprechende Anwendungen – die Hardware-Ressourcen wie Festplatten, Arbeitsspeicher und CPU des Host-Servers. Jede VM hat dabei ein eigenes, vollständiges Betriebssystem, das auf einer emulierten Hardware läuft. Diese wird durch eine Software simuliert, die man Hypervisor nennt. Sie sitzt zwischen dem Betriebssystem des Host-Servers und der virtuellen Maschine.

Vorteile von VM´s

  • Dank der zahlreichen, ihnen zur Verfügung stehenden Ressourcen können VM´s ganze Server, Betriebssysteme, Desktops, Datenbanken und Netzwerke abstrahieren, aufteilen, duplizieren und emulieren.

Nachteile von VM´s

  • Jede einzelne VM muß getrennt voneinander administriert werden, da diese ja komplett getrennt sind. Dadurch ist der Verwaltungs- und Zeitaufwand beispielsweise bei Updates durch ein vielfaches höher.
  • Ausserdem sind VM´s eine enorme Belastung an Systemressourcen. Jede VM führt nicht nur eine vollständige Kopie eines Betriebssystems aus, sondern auch eine virtuelle Simulation der gesamten Hardware, die dieses Betriebssystem zur Ausführung benötigt. Dies summiert sich schnell zu einer Menge an Arbeitsspeicher und CPU-Zyklen, die blockiert werden.
  • VM´s haben eine geringere Performance (sind langsamer) als reale Maschinen, da sie indirekt über den Hypervisor auf die Hardware zugreifen.

Container

In einen Container werden nur die App und alle zum Ausführen erforderlichen Dateien paketiert. Häufig werden darin auch einzelne Funktionen paketiert, die bestimmte Aufgaben (sogenannte Microservices) ausführen. Container können aufgrund ihrer geringen Größe und ihres gemeinsam genutzten Betriebssystems (OS) sehr einfach in verschiedenen Umgebungen hin- und hergeschoben werden.

Wie VM´s sind auch Container ein Weg zur Virtualisierung. Doch sie virtualisieren dabei nicht ein ganzes Computersystem, sondern nur das Betriebssystem. In der Regel enthält ein Container nur eine Anwendung mit allen Binärdateien, Bibliotheken und Konfigurationsdateien, welche diese braucht. Dabei teilt sich jeder Container den Kernel des Host-Betriebssystems und normalerweise auch dessen Binärdateien und Bibliotheken. Diese von allen Containern verwendeten Komponenten sind schreibgeschützt. Durch diese gemeinsame Nutzung ist es nicht notwendig, dass der Code des Betriebssystems mehrmals kopiert werden muss.

Daher sind Container außergewöhnlich klein – sie sind nur wenige Megabyte groß und benötigen daher auch nur Sekunden zum Starten. VM´s dagegen brauchen oft Minuten, bis sie am laufen sind. Durch die geringe Größe von Containern kann man eine sehr große Zahl gleichzeitig auf einem Host-Server ausführen.

Container spielen heute eine große Rolle bei der agilen Softwareentwicklung, da man mit ihnen unzählige Versionen einer Anwendung mit all ihren Abhängigkeiten gleichzeitig testen kann. Zudem machen sie es möglich, sehr große und komplexe Softwarearchitekturen in Softwarekomponenten, sogenannte Microservices, zu zerlegen. Dabei läuft jeder Anwendungsprozess als Microservice in einem eigenen Container und kommuniziert über eine Schnittstelle mit anderen Prozessen. Dadurch ist es möglich, jederzeit einzelne Microservices unabhängig von den anderen zu ändern oder neu zu deployen, ohne die Stabilität der gesamten Softwarearchitektur zu gefährden. Firmen können so schnell große Architekturen aufbauen, skalieren und im laufenden Betrieb entwickeln. Beispiel von Unternehmen, die auf Microservices setzen, sind Google, Amazon und Netflix.

Die am häufigsten verwendete Plattform zur Container-Virtualisierung ist Docker. Ihr Name wird oft auch als Synonym für die Technologie benutzt. Auch die Cloud Container Engine der Open Telekom Cloud basiert auf Docker.

Vorteile von Containern

  • Weniger Kosten: Container benötigen weniger Systemressourcen als herkömmliche oder virtuelle Maschinen, da sie nur die erforderlichen Daten zur Ausführung der Applikation enthalten. Unternehmen können durch Container die Zahl ihrer Server und notwendiger Lizenzen stark reduzieren.
  • Portabilität: Einmal „containerisiert“, können Anwendungen auf jeder beliebigen Infrastruktur bereitgestellt und verschoben werden – auf virtuellen Maschinen, auf Bare Metal und auf verschiedenen Public Clouds mit unterschiedlichen Hypervisoren. DevOps-Teams wissen, dass Anwendungen in Containern unabhängig vom Einsatzort immer gleich ausgeführt werden.
  • Größere Effizienz: In Containern können Anwendungen schneller bereitgestellt, gepatcht oder skaliert werden als in VM´s. Container können daher zum Beispiel Entwicklungs-, Test- und Produktionszyklen stark beschleunigen.

Nachteile von Containern

  • Schwierige Persistenz von Daten: Das Design von Containern sieht vor, dass alle Daten verschwinden, wenn der Container heruntergefahren wird, es sei denn, Sie speichern sie zuerst an einem anderen Ort.
  • Nicht alle Anwendungen profitieren von Containern: Im Allgemeinen können nur Anwendungen, die für die Ausführung als Mikrodienste ausgelegt sind, das meiste aus Containern herausholen.
  • Sicherheit: Der gemeinsam genutzte Linux-Kernel bietet weit mehr Angriffsfläche für Attacken als ein Hypervisor in einer VM. Gelingt es einem Angreifer, von einem Container aus auf den Kernel zuzugreifen, sind in der Regel alle an ihn geknüpften Container betroffen. VMs isolieren daher Anwendungen in der Regel besser als Container.

Wissenswertes zu diesem Thema

  • VM´s können in VM´s ausgeführt werden (VM-Kaskade)
  • Container können in VM´s ausgeführt werden, nicht aber VM´s in Containern
  • Container und VM´s sind keine konkurrierenden, sondern aufeinander erweiternde Technologien
Navigation

Alternative Startseite
Helpdesk
Links
Maps
Radio
Suchmaschine


Drucken/exportieren