Definition Containerisierung
Bei Containervirtualisierung (Containerisierung) wird derselbe Kernel des Host-Systems für alle Gastsysteme (Container) verwendet. Aus diesem Grund läuft ein Container auf demselben Betriebssystemtyp wie der Host, zum Beispiel “Linux auf Linux” oder “Windows auf Windows”.
Virtualisierungstechologien Übersicht:
- 1. Teil: Was ist Virtualisierung & Vergleich von Virtualisierungstechnologien
- 2. Teil: Was ist Hardware Emulation?
- 3. Teil: Was ist Hardware Virtualisierung?
- 4. Teil: Was ist Paravirtualisierung?
- 5. Teil: Was ist Betriebssystemvirtualisierung bzw. Containerisierung?
Container-Virtualisierungstechnologien bieten neue Anwendungsmöglichkeiten
Der Begriff Virtualisierung wird häufig bei Beschreibung und Implementierung abstrakter Hardware- oder Software-Modelle verwendet. Eine virtuelle Umgebung eröffnet den Weg für neue Technologien, bietet zusätzliche Möglichkeiten und senkt die Kosten für Softwareentwicklung und Betrieb. Besonders vielversprechend ist der Ansatz der Virtualisierung einer Betriebssystemumgebung.
Virtualisierungsmethoden werden in zwei Hauptgruppen eingeteilt: Hardware-Virtualisierung, die als VM bekannt ist, und Virtualisierung auf Betriebssystemebene (Betriebssystem- oder Containervirtualisierung).
Containerisierung ist eine Virtualisierungsmethode, bei der der Betriebssystemkern mehrere Container als isolierte Instanzen der Benutzerumgebung gleichzeitig steuert.
Aus Anwendersicht sind Container funktionell identisch mit der Instanz des Betriebssystems. Der Betriebssystemkern unterstützt eine vollständige Isolierung von Containern, sodass sich Anwendungen aus verschiedenen Containern nicht gegenseitig stören können.
Da die Anwendungen und ihre Laufzeitumgebungen in einzelnen Containern voneinander getrennt sind, ist die Containerisierung die perfekte Technik, um mehrere Applikationen auf einem demselben Host sicher zu testen und zu betreiben.
Beispiele für Containervirtualisierung sind LXC, FreeBSD Jails, OpenVZ und Docker.
Es gibt sowohl Implementierungen, die sich auf die Erstellung praktisch vollwertiger Instanzen von Betriebssystemen (Solaris-Container, Virtuozzo-Container, OpenVZ) konzentrieren, als auch Optionen, die darauf spezialisiert sind, bestimmte Dienste mit einer minimalen Betriebsumgebung (Jails, Docker) bereitzustellen.
Im Vergleich zu einer Emulation virtueller Geräte entsteht bei einer Containerisierung kein zusätzlicher Ressourcenverbrauch. Auch ein Start einer Instanz des Betriebssystems, wie es für VM typisch ist, ist für Container überflüssig.
Vorteile
- Hervorragende Leistung (keine virtualisierte Hardware, nur die Verwendung realer Hardware und Treiber)
- Skalierbarkeit auf die Ressourcen des physischen Servers
- Einfache Wartbarkeit (alle Container eines Hosts verwenden ein einziges Betriebssystem)
- Mehr Anwendungen auf einem physischen Server ausführbar im Vergleich zu einer VM, die mehr Systemressourcen beansprucht
- Eine hohe Anwendungsdichte (die Anzahl der virtuellen Umgebungen, die auf einem Server ausgeführt werden können, ist bis zu dreimal so hoch wie die der VM)
- Eine hohe Effizienz durch die gemeinsame Nutzung der HW-/BS-Ressourcen
Zu den Vorteilen von Containervirtualisierung zählen auch eine effiziente Hardwareauslastung, eine schnelle Bereitstellung von Anwendungen, deren Mobilität, Skalierbarkeit und hohe Leistung, einfache Wartung und Einsatzmöglichkeit für Microservices.
Nachteile
Da es sich bei einem Container um eine isolierte BS-Instanz mit eigener Benutzerumgebung handelt, besteht keine Möglichkeit einer umfassenden Anpassung, Konfigurierung, Selbstinstallation des Betriebssystems oder der Verwendung eines anderen Betriebssystems als des Host-Betriebssystems. Zu möglichen Problemen von Containern zählen auch komplexe Systemabhängigkeiten und Mangel an Managementsoftware für Container-Umgebungen.
Aus Anwendungssicht ist jeder Container ein eigenständiges Betriebssystem. Die BS-Virtualisierungsschicht (OS Virtualization Layer), die logisch zwischen der Host-Hardware und den Containern liegt, bietet Ressourcenisolation und -sicherheit für die sämtlichen Container.
In einem inaktiven Zustand ist ein Container entweder eine Image-Datei oder eine Reihe von Dateien. Wenn der Container gestartet wird, entpackt die Container-Engine (Docker, Railcar, LXC, CRI-O, RKT) das Container-Image mit den erforderlichen Dateien und Metadaten und informiert den Betriebssystemkern über die Aktivierung.
Nach dem Start wird der Container zu einem Systemprozess. Das Verfahren zum Starten von Containern, das Format für Container-Images und die Metadaten (Hardwarearchitektur, Betriebssystem) werden durch Standards definiert. Der bekannteste Standard ist OCI (Open Container Initiative).
Fazit
Container bieten viele Vorteile für virtuelle Umgebungen. Sie ermöglichen eine einfache und schnelle Bereitstellung, skalierbare und dichte Serverumgebungen, höhere Performance durch nicht-virtualisiertes Input/Output, vielversprechende Möglichkeiten für den Hosting-Markt, schnell verfügbare Frameworks wie Docker und Sharing-Tools wie GitHub. Container sind keine universelle Lösung für jede Art von Virtualisierung, sondern nur ein weiteres Werkzeug, das die Hardware-Virtualisierung ergänzt.