Container Virtualisierung mit Docker

Nils Ramsperger 13.05.2019

Entwicklung und Betrieb von Software-Systemen effizienter gestalten

Das Thema Container Virtualisierung und insbesondere Docker sind nun schon seit einiger Zeit in aller Munde. Seit dem Erscheinen von Docker im Jahr 2013 hat sich die Thematik pr├Ąchtig entwickelt und ist inzwischen alles andere als blo├č ein Hype. Im Bereich der Softwareentwicklung hat wahrscheinlich jeder schon davon geh├Ârt und viele setzen es produktiv ein. Sofern man sich noch nicht mit diesem Thema auseinandergesetzt hat, sollte man definitiv einen Blick riskieren.

Docker
Container Virtualisierung bietet ein enormes Potential, um Abl├Ąufe in Entwicklung und Betrieb von Software-Systemen effizienter zu gestalten. Zus├Ątzlich erm├Âglicht die dadurch entstehende Abstraktionsebene zwischen Anwendungen und Maschinen eine einfachere Skalierung des Gesamtsystems. Einen ersten Einblick in dieses Thema soll dieser Artikel bieten.

Worum geht es bei Container Virtualisierung

Virtualisierung an sich ist im Bereich der IT Infrastruktur schon lange ein fester Bestandteil. Warum also die Begeisterung f├╝r etwas, das im ersten Moment nicht gro├čartig anders erscheint? Wo liegt der Unterschied?
In der klassischen Virtualisierung werden vollst├Ąndige Rechner simuliert. Es wird dabei auf einer virtuellen Maschine ein komplettes Betriebssystem ausgef├╝hrt. Dieses beinhaltet den vollst├Ąndigen Bedarf an Speicher- und Rechenkapazit├Ąt, den das jeweilige Betriebssystem auch auf einem realen Rechner ben├Âtigen w├╝rde. Werden auf einem Rechner mehrere virtuelle Maschinen ausgef├╝hrt, m├╝ssen auf der Hardware auch entsprechend viele Betriebssysteme ausgef├╝hrt werden. Es entsteht ein sehr hoher Overhead an Last, der die verf├╝gbaren Ressourcen f├╝r Anwendungen entsprechend reduziert.
Die Containervirtualisierung im Gegensatz beschr├Ąnkt sich ausschlie├člich auf eine jeweils einzelne Anwendung und deren Abh├Ąngigkeiten. Das verwendete Betriebssystem ist dabei das des realen Rechners.
Docker Schema
Man kann sich eine Anwendung in ihrem Container vorstellen wie eine App auf einem Smartphone. Alle Apps laufen auf dem selben System und sind dabei weitgehend voneinander isoliert. In Konsequnz ist der Bedarf an Speicher und Rechenkapazit├Ąt deutlich kleiner und es stehen mehr Ressourcen f├╝r die produktive Nutzung zur Verf├╝gung.
Im Vergleich zu virtuellen Maschinen sind Container sehr sparsam und leichtgewichtig. Ein Conatiner ist in Sekunden erstellt und gestartet. Genau so schnell ist er wieder gestoppt und r├╝ckstandsfrei gel├Âscht. Eine virtuelle Maschine ben├Âtigt hingegen f├╝r jede dieser Aktionen mehrere Minuten. Dieser Vorteil tr├Ągt ma├čgeblich zur Beliebtheit der Containervirtualisierung und Docker bei.

Was ist Docker

Docker ist aktuell die popul├Ąrste L├Âsung f├╝r Container Virtualisierung. Es besteht dabei aus mehreren Komponenten, die zusammen ein ganzes ├ľkosystem bilden. Der prim├Ąre Teil ist die namensgebende Ausf├╝hrungsumgebung f├╝r Container. Diese ist f├╝r nahezu alle Betriebssysteme verf├╝gbar, die aktuell verwendet werden. Es werden Windows, macOS und viele Linux/Unix Systeme unterst├╝tzt. Ein Container verh├Ąlt sich, mit wenigen Ausnahmen, auf allen Umgebungen gleich. Daraus ergibt sich der Vorteil, dass ein Conatiner zum Beispiel auf einem macOS Rechner entwickelt werden kann und anschlie├čend ohne Probleme auf einem Linux Server ausf├╝hrbar ist.
Eine weitere Komponente stellt DockerHub dar. Es handelt sich dabei um eine Bibliothek f├╝r Images. Diese werden ben├Âtigt, um Container zu erstellen. Sie stellen also gewisserma├čen die Bauanleitung f├╝r einen Container dar. Auf DockerHub findet man offizielle Images f├╝r ├╝bliche Programme. Darunter fallen zum Beispiel verschienenste Datenbanken wie MySQL oder MongoDB und Laufzeitumgebeungen f├╝r Programmiersprachen wie Java oder Node.js. Dazu kommen noch unz├Ąhlige weitere Images aus anderen Open Source Projekten oder von Privatpersonen.
Man sagt: “F├╝r jedes Problem gibt es ein Docker Image.”
Unter Umst├Ąnden l├Ąsst sich ein Problem nicht mit Standardsoftware l├Âsen. Wahrschienlich m├Âchte man auch eine selber entwickelte Software im Container laufen lassen. In diesen F├Ąllen kann man selber ein passendes Image entwickeln und daraus Container erstellen. Diese Images k├Ânnen auf DockerHub der Allgemeinheit zur Verf├╝gung gestellt werden, oder in privaten Repositories f├╝r interne Verwendung bereitgestellt werden.

Docker Components
Docker Images k├Ânnen aus eigenen Quellen gebaut (build), oder aus dem Repository heruntergeladen werden (pull). Nachdem das Image lokal zur Verf├╝gung steht, kann daraus ein Container erstellt und dieser ausgef├╝hrt werden (run). Daf├╝r sendet der Benutzer (client) ├╝ber die Kommandozeile Befehle an die Docker Ausf├╝hrungsumgebung (Docker Daemon).

Neben Docker gibt es auf dem Markt noch weitere Alternativen. Viele davon folgen den Standards der Open Container Iniative, welche von Docker ins Leben gerufen wurde. Durch die Implementierung einheitlicher Standards sind die einzelnen Systeme kompatibel zueinender und Docker hat sich als Oberbegriff etabliert. Zum Einen handelt es sich dabei um Laufzeitumgebungen analog zu Docker. Beispiele hierf├╝r sind rkt oder runC. Zum Anderen handelt es sich um Integrationen in Cloud-Systemen, wie Amazon AWS oder Microsoft Azure.

Management von Containern und Clustern

Wurde Docker auf einer Maschine installiert, k├Ânnen auf dieser mittels Kommandozeile Container erstellt und ausgef├╝hrt werden. W├Ąhrend diese Herangehensweise im Rahmen einer Software Entwicklung durchaus zielf├╝hrend ist, ist sie f├╝r den sp├Ąteren Betrieb nicht ausreichend. Es ergeben sich zus├Ątzliche Anforderungen im Bereich Wartbarkeit und Verf├╝gbarkeit.
Um die Verf├╝gbarkeit zu erh├Âhen, k├Ânnen mehrere Maschinen zu einem Cluster zusammengeschaltet werden. Daraus ergibt sich eine Erh├Âhung Ausfallsicherheit und mehr Spielraum zur Bew├Ąltigung von Lastspitzen. Aus dem Docker Universum steht daf├╝r Docker Swarm zur Verf├╝gung. Die wohl verbreiteste L├Âsung f├╝r dieses Szenario ist aber Kubernetes aus dem Hause Google. W├Ąrend Docker Swarm analog zu Docker selbst nur ├╝ber die Kommandoziele bedient werden kann, bietet Kubernetes eine Web Oberfl├Ąche zur Verwaltung des Clusters und der darauf laufenden Anwendungen. Um bei Docker Swarm denselben Komfort zu bekommen, kann Docker Cloud eingesetzt werden.
Kubernetes ist eine Open Source Software, die auf eigenen Maschinen installiert werden kann. Dagegen handelt es sich bei Docker Cloud um ein kommerzielles Software as a Service Produkt.

Pro und Contra

M├Âchte man Container Virtualisierung einsetzen, sollte einem bewusst sein, dass damit gewisse Mehraufw├Ąnde verbunden sind. Einerseits muss die ben├Âtigte Infrastruktur geschaffen und funktionsf├Ąhig gehalten werden. Andererseits muss jeder eingesetzte Container regelm├Ą├čig auf Aktualisierungen gepr├╝ft werden.
Im Gegensatz dazu stehen allerdings viele Vorteile. Container k├Ânnen aufgrund ihrere leichtgewichtigen Natur sehr flexibel und agil eingesetzt werden. Gerade im Vergleich zu klassichen virtuellen Systemen. Da Container keine R├╝ckst├Ąnde auf ihren Host Systemen hinterlassen, steht kurzen Lebenszyklen nichts im Weg. Bei Bedarf werden Container erstellt und anschlie├čend wieder verworfen. Container verhalten sich auf nahezu allen Systemen gleich. Somit k├Ânnen Probleme bei der Transition von Entwicklung zu Betrieb minimiert werden. Anwendungen aus mehreren Containern in Cluster Systemen k├Ânnen leicht skaliert werden. Auf ├änderungen beim Bedarf kann daher schnell und flexibel reagiert werden.
Der in diesem Artikel gegebene ├ťberblick ├╝ber das Feld der Container Virtualisierung, sollte das gro├če Potential dieser Technologie vermittelt und Ansatzpunkte f├╝r weitere Recherchen zur Thematik aufgezeigt haben.


Quellen
Nils Ramsperger

Consultant bei frobese GmbH