Docker: Verstauen von Apps in Containern

Wie lassen sich Programme gut verwalten, so dass sie sich gegenseitig nicht behindern und nicht alles zusammenbricht wenn ein einzelnes Programm das System zum Absturz bringt?

Eine Möglichkeit ist die Container-Virtualisierung. Dafür gibt es verschiedene Wege, wovon Docker eine weit verbreitete Containerumgebung ist. Die Grundidee für Container ist die Aufteilung der Programme. Jeder Container übernimmt nur eine Aufgabe bzw. eine Funktion und ist sonst ein abgetrenntes System. Eine ganze Applikation besteht somit in der Regel aus mehreren Containern. Somit übernimmt zum Beispiel ein Container die Datenbank, die hinter einer Webapplikation (z.B. ein Blog) steht, während die Webapplikation selbst in einem anderen Container untergebracht ist. Diese Container können miteinander vernetzt sein und kommunizieren, bleiben aber abgetrennte Systeme. Wenn somit der Container mit der Webapplikation zum Absturz gebracht wird, oder aus anderen Gründen nicht funktioniert, bleibt die Datenbank verfügbar und kann weitere Container mit der Webapplikation versorgen.

Jeder Container besteht aus einer minimalisierten Version eines Linux-Betriebssystems und enthält alle nötigen Bibliotheken, die zur Ausführung der entsprechenden Funktion benötigt werden. Somit stellt jeder Container ein eigenes Sandbox-System dar. Da nur eine Funktion benötigt ist, können überflüssige Programme und Bibliotheken entfernt werden um somit die Images dieser Container möglichst klein zu halten. Damit benötigt ein Container-Image normalerweise deutlich weniger Speicherplatz als ein normales Betriebssystem mit den entsprechenden Programmen. Durch diese Minimalisierung können Images sehr schnell heruntergeladen oder über das Netzwerk verteilt werden – und auch anschließend gestartet werden.

Nun sind Virtualisierungen nicht etwas völlig neues, da Virtuelle Maschinen (VM) schon länger verbreitet sind. Im Gegensatz zu Containern wird dabei aber ein komplettes Hardware-System mit bestimmten Spezifikationen emuliert. Diese VMs werden häufig eingesetzt um große physische Maschinen in mehrere virtuelle Systeme zu unterteilen, die dann zum Beispiel als Server verwendet werden können. Container sind somit deutlich sparsamer an Speicherbedarf, da der zusätzliche Aufwand Hardware zu emulieren wegfällt. Ein weiterer Unterschied ist die Verwaltung des Arbeitsspeichers. Während eine VM den ihr zugeteilten Arbeitsspeicher reserviert und blockiert auch wenn er nicht genutzt wird, verwendet ein Container nur die Menge an Arbeitsspeicher, der aktuell benötigt wird und teilt somit den vorhandenen Arbeitsspeicher mit anderen Programmen und anderen Containern. Dadurch können auf einem Server sehr viel mehr Container gleichzeitig laufen. Diese sind auch in wenigen Minuten gestartet und funktionsbereit. Die Container werden aber nicht die typischen VMs einfach ersetzen sondern können sehr gut als Ergänzung verwendet werden. Wenn also mehrere VMs als Server erstellt werden, können diese mit einer Docker-Umgebung verwendet werden um darin die gewünschten Applikationen auf mehrere Container verteilt zu betreiben.Da die Container alles enthalten, was benötigt wird um den Container zu betreiben, sind diese unabhängig davon auf welcher Plattform sie betrieben werden. Docker basiert zwar auf Linux, aber inzwischen können die entsprechenden Umgebungen auch auf Windows und Mac-Systemen installiert werden. Außerdem bieten einige Cloudanbieter (wie z.B. Digital Ocean, Amazon EC2 und Azure) die Möglichkeit Docker-Umgebungen in der Cloud zu verwenden an.

Dies ist Teil 1 aus einer Reihe von Blogbeiträgen zum Thema Docker/Rancher.

Teil 1 bietet einen Überblick zu Docker und Container-Umgebungen

Teil 2 erklärt die Funktionen einer Docker Registry und docker-compose

Teil 3 stellt Docker Swarm mit einer Docker Umgebung verteilt über mehrere Hosts vorhanden

Teil 4 zeigt Rancher als Orchestrierungstool für Docker (und andere Containerumgebungen)

Teil 5 enthält kurze Informationen zu den Rancher-Funktionen eines Katalogs und rancher-compose

Docker Schulung

Dieser Kurs ist für Teilnehmer gedacht, die keine oder wenig Erfahrung mit Docker besitzen. Begonnen wird mit einer Einführung in Container, um einen gemeinsamen Wissensstand sicherzustellen. Danach setzen die Teilnehmer GitLab als containerisierte Anwendung auf. Mit dieser Infrastruktur lernen sie, Images zu bauen: zuerst ganz von Hand, schließlich vollautomatisch. Zuletzt lernen die Teilnehmer Docker-Alternativen kennen und bauen ihre Images beispielsweise mit Buildah oder kaniko.

The following two tabs change content below.

atixadmin

Neueste Artikel von atixadmin (alle ansehen)