Container

Was ist ein Linux-Container?

Ein Linux® Container besteht aus einem oder mehreren Prozessen, die vom Rest des Systems isoliert sind. Alle zur Ausführung notwendigen Dateien werden über ein separates Image bereitgestellt, d. h. Linux-Container sind von der Entwicklung über die Testphase bis hin zur Produktion stets portierbar und konsistent. Sie sind deshalb viel schneller als Entwicklungs-Pipelines, bei denen herkömmliche Testumgebungen repliziert werden.

What is a container

Nehmen wir an, Sie entwickeln eine Anwendung. Sie erledigen Ihre Arbeit auf einem Laptop und Ihre Umgebung hat eine spezifische Konfiguration. Andere Entwickler haben eventuell Konfigurationen, die sich leicht davon unterscheiden. Die entwickelte Anwendung stützt sich auf diese Konfiguration und ist von bestimmten Bibliotheken und Dateien abhängig. Ihr Unternehmen verfügt indessen über Entwicklungs- und Produktionsumgebungen, die mit ihren eigenen Konfigurationen und ihren eigenen Datei-Sets standardisiert sind. Sie möchten diese Umgebungen so gut wie möglich lokal emulieren, ohne jedoch den Aufwand einer Nachgestaltung der Serverumgebungen zu haben. Wie schaffen Sie es also, dass Sie Ihre Anwendung ohne Sorgen, ohne Umschreiben und ohne Fehlerbeseitigungen, in all diesen Umgebungen zum Laufen bringen, die Qualitätsprüfung bestehen und Ihre App zum Einsatz bringen? Die Antwort lautet: Container.

Der Container, der Ihre App enthält, verfügt über die notwendigen Bibliotheken, Abhängigkeiten und Dateien, sodass Sie ihn ohne Probleme von der Entwicklung über die Test- in die Produktionsphase verschieben können. Man kann sich den Inhalt eines Container-Image als Installation einer Linux-Distribution vorstellen, weil er alle RPM-Pakete, Konfigurationsdateien usw. enthält. Distributionen aus Container-Images aber sind dabei aber viel einfacher zu handhaben als die Installation neuer Kopien von Betriebssystemen. Krise vermieden – alle sind glücklich.

Das ist ein gängiges Beispiel, aber Linux-Container können auch bei vielen anderen Problemen angewendet werden, in denen portierbare, konfigurierbare und unabhängige Lösungen benötigt werden. Mit Linux-Containern können Anwendungen schneller entwickelt und unternehmerische Erfordernisse stets zeitnah umgesetzt werden. In manchen Fällen, wie dem Daten-Streaming in Echtzeit mit Apache Kafka, sind Container unerlässlich, da nur mit ihnen die notwendige Skalierbarkeit für Anwendungen bereitgestellt werden kann. Unabhängig von der Infrastruktur – lokal, in der Cloud, in einem Hybrid von beiden – Container können Ihre Anforderungen erfüllen. Natürlich ist die Wahl der richtigen Containerplattform genauso wichtig wie die Container selbst.

Ist das nicht einfach nur Virtualisierung?

Ja und nein. Man muss beide als Teile eines Ganzen sehen. Hier ist eine einfache Methode, sich dies vorzustellen:

  • Die Virtualisierung ermöglicht die gleichzeitige Ausführung mehrerer Betriebssysteme (Windows oder Linux) auf einem einzigen Hardware-System.
  • Container teilen sich den gleichen Betriebssystem-Kernel und isolieren die Anwendungsprozesse vom Rest des Systems. Beispiel: ARM Linux-Systeme führen ARM Linux-Container, x86 Linux-Systeme führen x86 Linux-Container und x86 Windows-Systeme führen x86 Windows-Container aus. Linux-Container können sehr gut portiert werden, müssen aber mit dem zugrunde liegenden System kompatibel sein.

virtualization vs containers

Was bedeutet das? Zunächst einmal wird bei der Virtualisierung ein Hypervisor zur Emulation der Hardware eingesetzt, was die gleichzeitige Ausführung mehrerer Betriebssysteme ermöglicht. Diese Variante ist jedoch viel aufwändiger als ein Container. Wenn Sie nur über endliche Ressourcen mit endlichen Fähigkeiten verfügen, benötigen Sie kompakte Apps, die in großer Dichte eingesetzt werden können. Linux-Container werden nativ auf dem Betriebssystem ausgeführt, das von all Ihren Containern gemeinsam genutzt wird. So nehmen Ihre Apps und Services wenig Platz ein und können zügig parallel ausgeführt werden.

Linux-Container sind ein weiterer Evolutionsschritt bei der Entwicklung, Bereitstellung und Verwaltung von Anwendungen. Linux-Container-Images bieten Portabilität und Versionskontrolle und helfen dabei, sicherzustellen, dass Anwendungen, die auf dem Laptop eines Entwicklers korrekt laufen, auch in der Produktion funktionieren. Im Vergleich zu VMs (Virtual Machines) benötigt ein Linux-Container weniger Ressourcen, besitzt eine Standardoberfläche (Start, Stopp, Umgebungsvariablen etc.), gewährleistet die Anwendungsisolierung und lässt sich als Bestandteil einer großen Anwendung (mehrere Container) viel einfacher verwalten. Dazu können Sie diese Multi-Container-Anwendungen über mehrere Clouds hinweg orchestrieren.


Eine kurze Geschichte der Container

Entwicklung der Container Download-Button

Während Container ursprünglich nicht aus Linux-Systemen stammen, leiht man sich in der Open Source-Welt die besten Ideen aus, verändert und verbessert sie. Container bilden da keine Ausnahme.

Die Idee, die wir jetzt Containertechnologie nennen, tauchte zuerst im Jahr 2000 als FreeBSD Jails auf, einer Technologie, die die Partitionierung eines FreeBSD-Systems in mehrere Untersysteme, oder Jails, erlaubt. Jails wurden als sichere Umgebungen entwickelt, die ein Systemadministrator mit mehreren Nutzern innerhalb oder außerhalb einer Organisation gemeinsam nutzen konnte. Ein Jail diente dazu, Prozesse in einer modifizierten gechrooteten Umgebung zu erstellen – in der der Zugang zum Dateisystem, Netzwerken und Benutzern virtualisiert ist – und so zu verhindern, dass diese das gesamte System umgehen oder beeinträchtigen konnten. Jails waren in ihrer Implementierung eingeschränkt und irgendwann wurden Methoden zum Entkommen aus der Jail-Umgebung entdeckt.

Doch das Konzept war überzeugend.

Im Jahr 2001 wurde Linux dank des VServer-Projekts von Jacques Gélinas um die Implementierung einer isolierten Umgebung bereichert. Wie Gélinas es formulierte, war dies ein Versuch, „mehrere Mehrzweck-Linux-Server [sic] in einer einzigen Box mit einem hohen Grad an Unabhängigkeit und Sicherheit“ laufen zu lassen. Nachdem diese Grundlage für mehrere kontrollierte Userspaces in Linux eingerichtet war, fügten sich die Teile zusammen und bildeten das, was heute als Linux-Container bekannt ist.

Container werden alltagstauglich

Es wurden sehr schnell weitere Technologien kombiniert, die diesen isolierten Ansatz Realität werden ließen. Control Groups (cgroups) ist eine Kernel-Funktion, die die Ressourcenverwendung für einen Prozess oder Gruppen von Prozessen steuert und beschränkt. Und systemd, ein Initialisierungssystem, das den Userspace einrichtet und deren Prozesse verwaltet, wird von cgroups verwendet, um eine bessere Kontrolle über diese isolierten Prozesse zu erhalten. Diese beiden Technologien bildeten den Rahmen für die erfolgreiche dauerhafte Trennung von Umgebungen und boten gleichzeitig eine erhöhte Kontrollfähigkeit für Linux.

Fortschritte im Bereich der Kernel Namespaces bildeten den nächsten Schritt für Container. Mit Kernel Namespaces kann praktisch alles, von der Prozess-ID bis hin zum Netzwerknamen, im Linux-Kernel virtualisiert werden. Die neuesten von ihnen, die User Namespaces, „ermöglichen die Zuordnung von Nutzer- und Gruppen-IDs pro Namespace. Im Kontext von Containern bedeutet dies, dass Benutzer und Gruppen über Rechte für bestimmte Operationen innerhalb des Containers verfügen, ohne, dass sie diese Rechte auch außerhalb des Containers haben.“ Das Linux Containers Project (LXC) hat diesen Fortschritten dann einige dringend benötigte Tools, Templates, Bibliotheken und Sprachbindungen hinzugefügt und so das Benutzererlebnis bei der Verwendung von Containern verbessert. Mit LXC war es jetzt ganz einfach, Container über eine einfache Befehlszeile zu starten.

Docker kommt ins Spiel

Im Jahr 2008 trat Docker (über dotCloud) mit seiner gleichnamigen Container-Technologie auf die Bildfläche. Die Docker-Technologie brachte diverse neue Konzepte und Tools mit sich, wie eine einfache Befehlszeile zur Entwicklung/Ausführung neuer vielschichtiger Images, ein Server-Daemon, eine Bibliothek mit vordefinierten Container-Images sowie das Konzept des Registry-Servers. Diese Technologien wurden kombiniert, und neue vielschichtige Container konnten rasch entwickelt und mit anderen Nutzern gemeinsam verwendet werden.

Red Hat hat die Möglichkeiten der Zusammenarbeit in diesem neuen Partner-, Kunden- und Expertennetzwerk erkannt und die zugrunde liegende Technologie für seine OpenShift Container Platform verwendet. Um Befürchtungen der Nutzer hinsichtlich der Kontrolle einer so wichtigen Technologie durch einen einzelnen Anbieter auszuräumen, hat Docker Inc. der Community und den Open Source-Projekten viele der zugrunde liegenden Komponenten zur Verfügung gestellt (runc ist Teil der Open Containers Initiative und containerd wurde zur CNCF verschoben).

Mit drei wichtigen Standards, den Spezifikationen für OCI Image, Distribution und Runtime, wird die Interoperabilität von Container-Technologien gewährleistet. Durch die Kombination dieser Spezifikationen können Anbieter von Community-Projekten, gewerblichen Produkten und Cloud-Technologien interoperable Container-Technologien entwickeln. (Denn Sie müssen ja Ihre benutzerdefinierten Images in den Registry-Server des Cloud-Anbieters integrieren, und dieser muss funktionieren.) Heute sind Red Hat und Docker − neben vielen anderen − Mitglieder der Open Container Initiative (OCI) und sorgen für eine offene, branchenweite Standardisierung von Containertechnologien.


Und die Container-Sicherheit?

Container sind sehr beliebt, aber sind sie auch sicher? Im Bereich der Container-Sicherheit gibt es viele unterschiedliche Variablen. So müssen die Container-Pipeline, Container-Anwendung, Entwicklungsumgebung und -infrastruktur geschützt und außerdem die Tools und Richtlinien zur Unternehmenssicherheit berücksichtigt werden. Dazu benötigen Sie einen Plan. Wir können Ihnen dabei helfen.


Wir können Ihnen dabei helfen.

Red Hat ist in der Open Source Community schon seit vielen Jahren dafür bekannt, Technologien wie Container sicher, stabil und zuverlässig zu machen. Dafür setzen wir uns ein. Und dann bieten wir Support für diese Technologien an. Wenn Sie also Hilfe brauchen, stehen wir Ihnen mit Rat und Tat zur Seite.

Mit den Technologien von Red Hat hat das Rätselraten rund um die Handhabung von Containern endlich ein Ende. Ob Sie nun Ihre Entwicklerteams auf eine aus Containern bestehende Plattform umstellen, Ihre Container-Infrastruktur auf einem erstklassigen Betriebssystem ausführen oder Storage-Lösungen für die riesigen von Containern generierten Datenmengen bereitstellen möchten – bei Red Hat finden Sie genau die Lösungen, die Sie benötigen.

Container haben noch viel mehr zu bieten