Software-Container, eine Einführung – Teil 3 / 5

Innerhalb der ersten beiden Blogbeiträge haben wir eine Einführung in das Themengebiet der Microservices unternommen und übergreifende Philosophie- und Design Prinzipien in der Software-Entwicklung betrachtet. Der dritte Teil der fortlaufenden Serie beschäftigt sich nun mit der Einführung von Software-Containern.

„This containers revolution is changing the basic act of software consumption. It’s redefining this much more lightweight, portable unit, or atom, that is much easier to manage… It’s a gateway to dynamic management and dynamic systems.“

Craig McLuckie, Google.

Um das Potenzial und die möglichen Einsatzmöglichkeiten besser verstehen zu können, soll zunächst die Grundidee von Software-Containern, durch die Bildung von zwei Analogien, vermittelt werden.

Transport-Container
Die erste Analogie sind die von der Transportindustrie verwendeten Container. Container sind genormte Großraumbehälter, welche seit den 1950ern zur Lagerung, aber insbesondere auch zum Transport von Gütern verwendet werden. Die Verwendung von Containern im Transportwesen erwies sich, vor allem durch die Festlegung auf eine standardisierte ISO-Norm, als effektiv. Durch die einheitlichen Standards des Containers lassen sich für den Transport, egal ob dieser z. B. per LKW oder Schiff erfolgt, identische Anforderung stellen. Das Vorhaben eines Software-Containers verspricht ein ähnliches Szenario für die IT. Übertragen auf den Software-Container lässt sich festhalten, dass dieser einen genormten Behälter für Anwendungen bereitstellt. Dieser kann neben der eigentlichen Anwendung alle benötigten Komponenten, wie Frameworks, beinhalten, um die Anwendung erfolgreich ausführen zu können. Somit schafft der Software-Container einen Behälter als Anwendungsumgebung, welche durch die Standardisierung von Anforderungen für den Transport zwischen verschiedenen Computersystemen geeignet ist.

Virtuelle Maschine
Um die Funktionsweise eines Software-Containers weiter zu verdeutlichen hilft, neben dem Transport-Container, eine zweite Analogie. Software-Container besitzen gewisse Ähnlichkeiten zu virtuellen Maschinen, kurz VM. Eine virtuelle Maschine ermöglicht die Simulation einer real in Hardware existierenden Rechnerarchitektur, inklusive ihrer Komponenten und ihren Netzwerken. Sie ist die Software-Implementierung einer Computerumgebung und unterstützt die Isolation und Ausführung von Anwendungen. Die Kapselung der Anwendung erfolgt über die Ausführung innerhalb eines virtuellen Computersystems mit eigenem und vollständigen Betriebssystem. Virtuelle Maschinen schaffen neben Schutzmechanismen durch Isolation eine optimale Nutzung der real gegebenen Systemressourcen. Auch wenn das Konzept der Virtualisierung in der Informatik keine Neuerung darstellt und Software-Container sich technisch von virtuellen Maschinen unterscheiden, so stellen beide Lösungen eine Möglichkeit zur Kapselung von Anwendungen bereit. Container-Technologien machen virtuelle Maschinen nicht obsolet.

Es lässt sich festhalten, dass Software-Container eine Technologie abbilden, um verschiedene Transport- und Virtualisierungsprobleme von Anwendungen innerhalb der Software-Infrastruktur zu adressieren. Software-Container bieten eine Möglichkeit komplette Anwendungen zu kapseln und portabel auf verschiedenen Computersystemen aufzuspielen. Software-Container benötigen in der Regel weniger Systemressourcen als herkömmliche virtuelle Maschinen. Dies ist darauf zurückzuführen, dass Software-Container für die Ausührung der Anwendung auf ein vollsändig virtualisiertes Betriebssystem verzichten und stattdessen im Kontext des Host-Betriebssystems agieren. Verdeutlicht wird dieses Konzept in der beigefügten Abbildung.

Abbildung 1: Vergleich Virtuelle Maschine mit Software-Container (Quelle: Docker)

Inzwischen existieren mehrere Container-Implementierungen für unterschiedliche Betriebssysteme. Die Gemeinsamkeit ist, dass alle eine ähnliche Kernfunktionalität bieten. Zu den üblichen Kernfunktionen einer Container-Implementierung gehören i. d. R. Steuerungskommandos, wie das Erzeugen, Starten oder Löschen eines Containers, sowie weitere Verwaltungsmethoden. Die verfügbaren Lösungen unterscheiden sich dabei primär durch technische Realisierungsmerkmale. Verbreitete Container-Implementierungen sind unter anderem Docker, LXD oder Rkt.

Innerhalb des nächsten Blog-Beitrags wird auf die Container-Implementierung Docker genauer eingegangen. Wir stellen die wesentlichen Eigenschaften, Begriffe und Funktionsabläufe vor.

TR