Was ist Containerisierung?
Erfahren Sie mehr über die Geschichte der Containerisierung, die Vorteile und den Nutzen dieser Technologie und wie sie mit der Virtualisierung zusammenhängt.
Schwarzer und blauer Hintergrund
Was ist Containerisierung?

Unter Containerisierung versteht man das Zusammenfassen von Softwarecode mit den für die Ausführung des Codes erforderlichen Betriebssystembibliotheken und Abhängigkeiten zu einer einzigen ausführbaren Datei, die als Container bezeichnet wird und in jeder Infrastruktur konsistent ausgeführt werden kann.  Container sind portabler und ressourceneffizienter als virtuelle Maschinen (VMs) und haben sich de facto zu den Recheneinheiten moderner cloudnativer Anwendungen entwickelt.

Die Containerisierung ermöglicht es Entwicklern, Anwendungen schneller und sicherer zu erstellen und bereitzustellen. Bei Verwendung traditioneller Methoden wird Code in einer ganz bestimmten Computerumgebung entwickelt; bei einem Transfer in eine andere Umgebung kann dies dann zu Fehlern und Defiziten führen. Zum Beispiel dann, wenn ein Entwickler Code von einem Desktop-Computer auf eine virtuelle Maschine (VM) oder von einem Linux- auf ein Windows-Betriebssystem überträgt. Die Containerisierung räumt dieses Problem aus dem Weg: Sie bündelt den Anwendungscode zusammen mit den zugehörigen Konfigurationsdateien, den Bibliotheken und den Abhängigkeiten, die für die Ausführung erforderlich sind. Dieses vollständige Paket von Software (Container) wird vom Hostbetriebssystem abstrahiert und ist also eigenständig und portabel und kann problemlos auf jeder Plattform oder Cloud ausgeführt werden.

Das Konzept der Containerisierung und Prozessisolierung ist eigentlich schon Jahrzehnte alt, aber das Aufkommen der quelloffenen DockerEngine im Jahr 2013 – ein Industriestandard für Container mit einfachen Entwicklertools und einem universellen Packaging-Ansatz – beschleunigte die Einführung dieser Technologie. Heute nutzen Unternehmen die Containerisierung zunehmend, um neue Anwendungen zu erstellen und bestehende Anwendungen für die Cloud zu modernisieren. In einer aktuellen IBM Umfrage (PDF, 1,4 MB) gaben 61 % der Unternehmen, die Container einsetzen, an, dass sie 50 % oder mehr der neuen Anwendungen, die sie in den letzten zwei Jahren entwickelt haben, in Containern nutzen. 64 % der Unternehmen, die Container einsetzen, erwarten, dass 50 % oder mehr ihrer bestehenden Anwendungen in den nächsten zwei Jahren in Containern eingesetzt werden.

Container werden oft als „leichtgewichtig“ bezeichnet, was bedeutet, dass sie sich den Betriebssystemkern des Rechners teilen und nicht den Aufwand verursachen, der durch die Zuordnung eines Betriebssystems zu jeder Anwendung entsteht. Container haben von Natur aus eine geringere Kapazität als eine VM und benötigen weniger Anlaufzeit, sodass weitaus mehr Container mit derselben Rechenkapazität wie eine einzelne VM betrieben werden können. Auf diese Weise werden höhere Servereffizienzen erreicht und es fallen weniger Server- und Lizenzierungskosten an.

Am wichtigsten ist vielleicht, dass die Containerisierung es ermöglicht, Anwendungen „einmal zu schreiben und überall auszuführen“. Diese Portabilität beschleunigt die Entwicklung, verhindert die Bindung an einen Cloud-Anbieter und bietet weitere bemerkenswerte Vorteile wie Fehlerisolierung, einfache Verwaltung, vereinfachte Sicherheit und mehr (siehe unten).

Anwendungscontainerisierung

Container kapseln eine Anwendung als einzelnes ausführbares Softwarepaket, das den Anwendungscode mit allen zugehörigen Konfigurationsdateien, Bibliotheken und Abhängigkeiten bündelt, die für die Ausführung der Anwendung erforderlich sind. Containerisierte Anwendungen sind insofern „isoliert“, als sie nicht mit einer Kopie des Betriebssystems gebündelt sind. Stattdessen wird eine quelloffene Runtime-Engine (wie z. B. die Docker-Runtime-Engine) auf dem Betriebssystem des Hosts installiert und dient den Containern als Kanal für die gemeinsame Nutzung eines Betriebssystems mit anderen Containern auf demselben Rechnersystem.

Andere Containerschichten, wie gemeinsame Behälter und Bibliotheken, können ebenfalls von mehreren Containern gemeinsam genutzt werden. Dadurch entfällt der Aufwand für die Ausführung eines Betriebssystems in jeder Anwendung, was die Kapazität der Container verkleinert und ihren Start beschleunigt. Dies wiederum bedeutet bessere Servereffizienz. Die Isolierung von Anwendungen als Container verringert auch die Wahrscheinlichkeit, dass in einem Container vorhandener bösartiger Code andere Container oder das Hostsystem infiziert.

Die Abstrahierung vom Hostbetriebssystem macht containerisierte Anwendungen portabel und ermöglicht ihren Betrieb auf jeder Plattform oder Cloud. Container lassen sich leicht von einem Desktop-Computer auf eine virtuelle Maschine (VM) oder auch von Linux zu Windows übertragen und sie laufen konsistent auf virtualisierten Infrastrukturen oder auf traditionellen „Bare Metal“-Servern, entweder On-Premise oder in der Cloud. Dadurch wird sichergestellt, dass Softwareentwickler weiterhin die Tools und Prozesse verwenden können, mit denen sie am besten vertraut sind.

Es wird deutlich, warum Unternehmen die Containerisierung schnell als ein überlegenes Konzept für die Anwendungsentwicklung und -verwaltung übernehmen. Die Containerisierung ermöglicht es Entwicklern, Anwendungen schneller und sicherer zu erstellen und bereitzustellen, unabhängig davon, ob es sich bei der Anwendung um einen traditionellen Monolithen (eine einstufige Softwareanwendung) oder eine modulare Anwendung auf der Basis einer Microservice-Architektur handelt. Neue Cloud-basierte Anwendungen können von Grund auf als containerisierte Microservices aufgebaut werden, wobei eine komplexe Anwendung in eine Reihe kleinerer spezialisierter und „Manageable Services“ zerlegt wird. Bestehende Anwendungen können in Container (oder containerisierte Microservices) umgewandelt werden, die Rechenressourcen effizienter nutzen.

Vorteile der Containierisierung – im Detail

Die Containerisierung bietet deutliche Vorteile für Entwickler und Entwicklungsteams. Dazu gehören:

Portabilität: Ein Container erstellt ein ausführbares Paket von Software, die vom Hostbetriebssystem abstrahiert wird (also nicht daran gebunden oder abhängig davon ist). Daher ist es portabel und imstande, gleichmäßig und konsistent auf jeder Plattform oder Cloud ausgeführt zu werden. 

Agilität: Die quelloffene Docker-Engine zum Ausführen von Containern begründete den Industriestandard für Container mit einfachen Entwicklertools und einem universellen Packaging-Ansatz, der sowohl auf Linux- als auch auf Windows-Betriebssystemen funktioniert. Das Container-Ökosystem hat sich auf Engines verlagert, die von der Open Container Initiative (OCI) betrieben werden. Softwareentwickler können weiterhin agile oder DevOps-Tools und -Prozesse für die schnelle Anwendungsentwicklung und -verbesserung nutzen.

Geschwindigkeit: Container werden oft als „leichtgewichtig“ beschrieben, womit gemeint ist, dass sie sich den Betriebssystemkern des Rechners teilen und nicht mit diesem zusätzlichen Aufwand belastet werden. Dies steigert nicht nur die Effizienz des Servers, sondern senkt auch die Server- und Lizenzkosten und verkürzt die Anlaufzeiten, da kein Betriebssystem gebootet werden muss.

Fehlerisolierung: Jede containerisierte Anwendung ist isoliert und arbeitet unabhängig von den anderen. Der Ausfall eines Containers beeinträchtigt nicht den Betrieb der anderen Container. Entwicklungsteams können alle technischen Probleme innerhalb eines Containers erkennen und beheben, ohne dass es zu Ausfallzeiten in anderen Containern kommt. Außerdem kann die Container-Engine alle Techniken zur Isolierung der Betriebssystemsicherheit – wie z. B. die SELinux-Zugriffskontrolle – nutzen, um Fehler innerhalb von Containern zu isolieren.

Effizienz: Software, die in containerisierten Umgebungen ausgeführt wird, teilt den Betriebssystemkern der Maschine und die Anwendungsschichten in einem Container können über Container gemeinsam genutzt werden. Container haben von Natur aus eine geringere Kapazität als eine VM und benötigen weniger Anlaufzeit, sodass weitaus mehr Container mit derselben Rechenkapazität wie eine einzelne VM betrieben werden können. Auf diese Weise werden höhere Servereffizienzen erreicht und es fallen weniger Server- und Lizenzierungskosten an.

Einfaches Management: Eine Plattform zur Orchestrierung von Containern automatisiert die Installation, Skalierung und Verwaltung von containerisierten Workloads und Services. Container-Orchestrierungsplattformen können u. a. Verwaltungsaufgaben wie die Skalierung containerisierter Anwendungen, die Einführung neuer Versionen von Anwendungen sowie die Überwachung, Protokollierung und Fehlersuche erleichtern. Kubernetes, das vielleicht populärste System zur Containerorchestrierung auf dem Markt, ist eine Open-Source-Technologie (ursprünglich von Google auf der Grundlage des internen Projekts Borg), die ursprünglich Linux-Containerfunktionen automatisiert. Kubernetes arbeitet mit vielen Container-Engines, wie z. B. Docker, aber es funktioniert auch mit jedem anderen Containersystem, das den Standards der Open Container Initiative (OCI) für Container-Image-Formate und -Laufzeiten entspricht.

Sicherheit: Die Isolierung von Anwendungen in Form von Containern verhindert von vornherein, dass bösartiger Code in andere Container oder das Hostsystem eindringen kann. Zusätzlich können Sicherheitsberechtigungen definiert werden, um automatisch zu verhindern, dass unerwünschte Komponenten in Container gelangen oder um die Kommunikation mit unnötigen Ressourcen einzuschränken.

Arten der Containerisierung

Das rapide wachsende Interesse an und die Nutzung von containerbasierten Lösungen hat zu einem Bedarf an Standards rund um die Containertechnologie und den Ansatz für das Packaging von Software-Code geführt. Die Open Container Initiative (OCI), die im Juni 2015 von Docker und anderen Branchenführern gegründet wurde, fördert gemeinsame, minimale, offene Standards und Spezifikationen rund um die Containertechnologie. Aus diesem Grund trägt die OCI dazu bei, die Auswahlmöglichkeiten für Open-Source-Engines zu erweitern. Die Benutzer sind nicht an die Technologie eines bestimmten Herstellers gebunden, sondern sind in der Lage, die Vorteile OCI-zertifizierter Technologien zu nutzen, die es ihnen ermöglichen, containerisierte Anwendungen unter Verwendung eines vielfältigen Satzes von DevOps-Tools zu erstellen und diese konsistent auf der/den Infrastruktur(en) ihrer Wahl auszuführen.

Docker ist heute eine der bekanntesten und meistgenutzten Container-Engine-Technologien, aber es ist nicht die einzige verfügbare Option. Das Ökosystem verwendet standardmäßig containerd und alternativ CoreOS rkt, Mesos Containerizer, LXC Linux Containers, OpenVZ oder crio-d. Funktionen und Standardeinstellungen können sich zwar unterscheiden, aber durch die Übernahme und Nutzung der OCI-Spezifikationen wird sichergestellt, dass die Lösungen herstellerneutral, für mehrere Betriebssysteme zertifiziert und in verschiedenen Umgebungen einsetzbar sind.

Microservices und Containerisierung

Große und kleine Softwareunternehmen nutzen Microservices als verbesserten Ansatz für die Anwendungsentwicklung und -verwaltung im Vergleich zum früheren monolithischen Modell, das eine Softwareanwendung mit der zugehörigen Benutzeroberfläche und der zugrunde liegenden Datenbank zu einer einzigen Einheit auf einer einzigen Serverplattform kombiniert. Bei Verwendung von Microservices wird eine komplexe Anwendung in eine Reihe kleinerer, spezialisierter Services aufgeteilt, von denen jeder seine eigene Datenbank und seine eigene Geschäftslogik hat. Microservices kommunizieren dann miteinander über gemeinsame Schnittstellen (wie APIs) und REST-Schnittstellen (wie HTTP). Bei der Verwendung von Microservices können Entwicklungsteams sich darauf konzentrieren, bestimmte Bereiche einer Anwendung zu aktualisieren, ohne ihre Ausführung insgesamt zu beeinträchtigen. Dies führt zu einer Beschleunigung der Entwicklung, der Ausführung von Tests und der Bereitstellung.

Die Konzepte hinter Microservices und Containerisierung sind ähnlich, da es sich bei beiden um Softwareentwicklungspraktiken handelt, die Anwendungen im Wesentlichen in Sammlungen kleinerer Services oder Komponenten umwandeln, die portabel, skalierbar, effizient und leichter zu verwalten sind.

Darüber hinaus lassen sich Microservices und Containerisierung gut miteinander kombinieren. Container bieten eine leichtgewichtige Kapselung jeder Anwendung, unabhängig davon, ob es sich um einen traditionellen Monolithen oder einen modularen Microservice handelt. Ein Microservice, der innerhalb eines Containers entwickelt wird, erhält dann alle inhärenten Vorteile der Containerisierungsportabilität in Bezug auf den Entwicklungsprozess und die Herstellerkompatibilität (keine Anbieterbindung) sowie u.a. Agilität der Entwickler, Fehlerisolierung, Servereffizienz, Automatisierung der Installation, Skalierung und Verwaltung sowie mehrere Sicherheitsebenen.

Die heutige Kommunikation verlagert sich rasch in die Cloud, wo Benutzer Anwendungen schnell und effizient entwickeln können. Cloud-basierte Anwendungen und Daten sind von jedem mit dem Internet verbundenen Gerät aus zugänglich, sodass die Teammitglieder auch von unterwegs arbeiten können. Cloud-Service-Provider (CSPs) verwalten die zugrunde liegende Infrastruktur, was Unternehmen die Kosten für Server und andere Geräte erspart und darüber hinaus automatisierte Netzwerk-Backups für zusätzliche Zuverlässigkeit bietet. Cloud-Infrastrukturen lassen sich nach Bedarf skalieren und können Rechenressourcen, Kapazität und Infrastruktur dynamisch anpassen, wenn sich die Lastanforderungen ändern. Darüber hinaus aktualisieren die CSPs ihre Angebote regelmäßig, sodass die Nutzer weiterhin Zugang zu den neuesten innovativen Technologien haben.

Container, Microservices und Cloud Computing wirken zusammen, um die Anwendungsentwicklung und -bereitstellung auf ein neues Niveau zu heben, das sich mit herkömmlichen Methoden und Umgebungen nicht verwirklichen lässt. Diese Ansätze der nächsten Generation erhöhen die Agilität, Effizienz, Zuverlässigkeit und Sicherheit im Softwareentwicklungszyklus - was alles zu einer schnelleren Bereitstellung von Anwendungen und Verbesserungen für Endbenutzer und den Markt führt.

Sicherheit

Containerisierte Anwendungen bieten von Natur aus ein gewisses Maß an Sicherheit, da sie als isolierte Prozesse laufen und unabhängig von anderen Containern arbeiten können. Diese De-facto-Isolierung von Anwendungen als Container verhindert auch, dass eingedrungene Malware andere Container auf dem Hostsystem infiziert. Anwendungsschichten werden jedoch häufig von verschiedenen Containern gemeinsam genutzt. Im Hinblick auf die Ressourceneffizienz ist dies ein Plus, aber es öffnet auch die Tür für Störungen und Sicherheitsverletzungen in Containern. Dasselbe gilt für das gemeinsam genutzte Betriebssystem, da mehrere Container demselben Hostbetriebssystem zugeordnet werden können. Sicherheitsbedrohungen für das gemeinsame Betriebssystem können sich auf alle zugehörigen Container auswirken und umgekehrt führt eine Sicherheitsverletzung beim Container möglicherweise zu einem Angriff auf das Hostbetriebssystem.

Aber was ist mit dem Container-Image selbst? Wie kann bei den in einem Container zusammengefassten Anwendungen und Open-Source-Komponenten die Sicherheit verbessert werden? Anbieter von Containertechnologie (wie z. B. Docker) setzen sich weiterhin aktiv mit den Herausforderungen der Containersicherheit auseinander. Bei der Containerisierung wird ein „Secure-by-default“-Ansatz verfolgt; es wird angenommen, dass Sicherheit in die Plattform integriert sein sollte und keine separat implementierte und konfigurierte Lösung. Zu diesem Zweck unterstützt die Container-Engine alle Standardisolationseigenschaften, die dem zugrunde liegenden Betriebssystem eigen sind. Zusätzlich können Sicherheitsberechtigungen definiert werden, um automatisch zu verhindern, dass unerwünschte Komponenten in Container gelangen oder um die Kommunikation mit unnötigen Ressourcen einzuschränken.

Beispielsweise helfen Linux-Namespaces, jedem Container eine isolierte Sicht auf das System zu geben; dies umfasst das Netz, Mountpunkte, Prozess-IDs, Benutzer-IDs, Interprozesskommunikation und Hostnamenseinstellungen. Namespaces können verwendet werden, um den Zugriff auf eine dieser Ressourcen durch Prozesse in jedem Container zu begrenzen. In der Regel sind Subsysteme, die keine Namespace-Unterstützung haben, von einem Container aus nicht zugänglich. Administratoren können diese „Isolationsbedingungen“ für jede containerisierte Anwendung komfortabel über eine Benutzerschnittstelle erstellen und verwalten.

Forscher arbeiten daran, die Sicherheit von Linux-Containern weiter zu stärken, und es steht eine breite Palette von Sicherheitslösungen zur Verfügung, um die Erkennung und Reaktion auf Bedrohungen im gesamten Unternehmen zu automatisieren, die Einhaltung von Industriestandards und Sicherheitsrichtlinien zu überwachen und durchzusetzen, den sicheren Datenfluss durch Anwendungen und Endpunkte sicherzustellen und vieles mehr.

Erfahren Sie mehr über eine Strategie zur Skalierung der Containersicherheit in Unternehmen jeder Größe.

Virtualisierung vs. Containerisierung

Container werden häufig mit virtuellen Maschinen (VM) verglichen, da beide Technologien eine hohe Recheneffizienz ermöglichen, weil mehrere Softwaretypen (Linux- oder Windows-basiert) in einer einzigen Umgebung ausgeführt werden können. Die Containertechnologie bietet jedoch deutliche Vorteile gegenüber der Virtualisierung und entwickelt sich schnell zu der von IT-Experten favorisierten Technologie.

Die Virtualisierungstechnologie ermöglicht die gleichzeitige Ausführung mehrerer Betriebssysteme und Softwareanwendungen und die gemeinsame Nutzung der Ressourcen eines einzigen physischen Computers. Beispielsweise kann eine IT-Organisation sowohl Windows als auch Linux oder mehrere Versionen eines Betriebssystems zusammen mit mehreren Anwendungen auf demselben Server ausführen. Jede Anwendung und ihre zugehörigen Dateien, Bibliotheken und Abhängigkeiten, einschließlich einer Kopie des Betriebssystems (OS), werden zu einer VM zusammengefasst. Mit mehreren virtuellen Maschinen, die auf einer einzigen physischen Maschine ausgeführt werden, lassen sich erhebliche Einsparungen bei Kapital-, Betriebs- und Energiekosten erzielen.

Einen noch besseren Überblick über die Virtualisierung erhalten Sie im Video „Virtualization in 2019“ und in der Veröffentlichung „Virtualization: A Complete Guide“.

Die Containerisierung nutzt die Rechenressourcen jedoch noch effizienter. Container erstellen ein einzelnes ausführbares Softwarepaket, das den Anwendungscode mit allen zugehörigen Konfigurationsdateien, Bibliotheken und Abhängigkeiten bündelt, die für die Ausführung der Anwendung erforderlich sind. Im Gegensatz zu virtuellen Maschinen werden Container jedoch nicht in einer Kopie des Betriebssystems gebündelt. Stattdessen wird die Container-Runtime-Engine auf dem Betriebssystem des Hostsystems installiert und wird so zum Kanal, über den alle Container auf dem Computersystem dasselbe Betriebssystem nutzen.

Wie bereits erwähnt, werden Container oft als „leichtgewichtig“ bezeichnet – sie nutzen den Betriebssystemkern des Rechners gemeinsam und verursachen nicht den Aufwand, der mit der Zuordnung eines Betriebssystems zu jeder Anwendung verbunden ist (wie es bei einer VM der Fall ist). Andere Containerschichten, wie gemeinsame Behälter und Bibliotheken, können auch von mehreren Containern gemeinsam genutzt werden, wodurch Container eine geringere Kapazität aufweisen als eine VM – und deshalb schneller starten. Mehrere Container können dann mit derselben Rechenkapazität wie eine einzelne VM betrieben werden, was zu einer noch höheren Servereffizienz führt und die Server- und Lizenzkosten weiter senkt.

Relevante Lösungen
Red Hat OpenShift on IBM Cloud

Mit Red Hat OpenShift on IBM Cloud können Sie OpenShift in Public-Cloud- und Hybridumgebungen nutzen, um Schnelligkeit, Reaktion auf Marktentwicklungen, Skalierbarkeit und Zuverlässigkeit zu verbessern.

Red Hat OpenShift on IBM Cloud erkunden
IBM Cloud Satellite

Mit IBM Cloud Satellite können Sie konsistente Cloud-Services überall starten – in On-Premises-, Edge- und Public-Cloud-Umgebungen.

IBM Cloud Satellite erkunden
IBM Cloud Code Engine

Ausführung von Container-Images, Batch-Jobs oder Quellcode als serverlose Workloads – ohne Dimensionierung, Bereitstellung, Vernetzung oder Skalierung.

IBM Cloud Code Engine erkunden
Ressourcen Container im Unternehmen

Eine neue IBM Studie belegt die zunehmende Verbreitung von Containern und Kubernetes.

Was ist Docker?

Docker ist eine Open-Source-Plattform für das Erstellen, Bereitstellen und Verwalten von containerisierten Anwendungen.

Was sind Microservices?

In einer Microservices-Architektur ist jede Anwendung aus vielen kleineren, lose gekoppelten und unabhängig voneinander bereitstellbaren Services zusammengesetzt.

Machen Sie den nächsten Schritt

Mit Red Hat OpenShift on IBM Cloud haben Entwickler eine schnelle und sichere Möglichkeit zur Containerisierung und Bereitstellung von Unternehmensworkloads in Kubernetes-Clustern.Nutzen Sie die Möglichkeit zur Auslagerung von mühsamen und sich wiederholenden Aufgaben beim Sicherheits-, Compliance-, Bereitstellungs- und Lebenszyklusmanagement.Da IBM das OCP-Mangement (OpenShift Container Platform) übernimmt, haben Sie mehr Zeit, sich auf Ihre Kernaufgaben zu konzentrieren.

Red Hat OpenShift on IBM Cloud erkunden