Docker
Was ist Docker und wofür wird es verwendet?
Docker ist, vereinfacht gesagt, eine Software, die dazu dient, auf dem Betriebssystem Linux basierende Container zu erstellen beziehungsweise zu virtualisieren.
Um
Docker verstehen und anwenden zu können, ist es zunächst sinnvoll,
einen kurzen Abstecher in die Welt des freien Betriebssystems Linux zu
unternehmen.
Linux ist ein quelloffenes, von dem, in den USA
lebenden, Finnen Linus Torvalds entwickeltes Computer-Betriebssystem,
das grundsätzlich für jedermann kostenlos und frei verfügbar ist.
Quelloffen heißt dabei, dass der sog. Quellcode, also die textbasierte
Basisprogrammierung des Betriebssystems, für jedermann einsehbar und für
eigene Zwecke anpassbar ist. Im Gegensatz dazu stehen proprietäre, das
heißt an einen Eigentümer gebundene Betriebssysteme, wie das bekannte
Microsoft Windows in seinen verschiedenen Varianten. Dessen Quellcode
wird von Microsoft geheimgehalten und ist streng geschützt.
Als
Open-Source-Betriebssystem bildet Linux die ideale Grundlage für
sogenannte Container, da hier die freie Möglichkeit besteht, auf der
Grundlage des Quellcodes eigene, isolierte Umgebungen zu entwickeln, in
den beispielsweise selbst programmierte Anwendungen (Apps) getestet
werden können.
Bei Linux-Containern handelt es sich dabei im
Grunde um nichts anderes als auf bestimmte Anwendungen konzentrierte,
isoliert laufende Bestandteile eines Linux-Betriebssystems auf demselben
Rechner (auch Host genannt).
Am einfachsten lässt sich dies
vorstellen, wenn Sie schon einmal mit einer sogenannten virtuellen
Maschine gearbeitet haben. Mit einer Software zur Virtualisierung, wie
zum Beispiel VirtualBox des Software-Herstellers Oracle, lässt sich auf
einem Rechner mit seiner Hardwareausstattung, bestehend aus Festplatte,
Arbeitsspeicher, Monitor, Tastatur, CD-ROM und DVD-Laufwerk,
USB-Anschlüssen etc. ein zusätzlicher Computer mit seiner gesamte
Hardware simulieren = virtualisieren.
Wer auf einem PC mit dem
Betriebssystem Windows arbeitet, möchte vielleicht einmal das
Betriebssystem Linux und eine seiner zahlreichen Distributionen
ausprobieren.
Eine Linux-Distribution ist eine Sammlung von
Softwarepaketen um den Betriebssystemkern von Linux, dem sogenannten
Kernel, herum. Die Softwarepakete enthalten freie und kostenlose
Programme beispielsweise für Büroanwendungen (Office-Pakete), für
Internet und E-Mail, für Sound- und Videowiedergaben, für die
Konfiguration und für die Programmierung. So ist die Möglichkeit, die
Programmiersprache Python zu verwenden, häufiger Bestandteil von Linux
-Distributionen.
Dank dem Open Source Ansatz mit einer großen
Entwicklergemeinschaft, der Community, gibt es mehr als 300 verschiedene
Linux-Distributionen verschiedenster Entwickler für jeden
Anwendungsbereich. Als bekannteste Linien und Namen seien hier Debian,
Ubuntu, ArchLinux (Manjaro), Fedora, Suse Linux und RedHat genannt. Für
Interessierte sei die Website https://www.distrowatch.com empfohlen, die
eine Zusammenstellung so ziemlich aller aktuellen Linux-Distributionen
mit Kurzinformationen, weiterführenden Links und einer Rangliste
enthält.
Mit einer Virtualisierungssoftware wie VirtualBox können
Sie auf einem laufenden Windows-PC das Betriebssystem Linux in einer
geschützten Umgebung (der virtuellen Box) booten, installieren und
gefahrlos ausprobieren. Die gesamte für das Betriebssystem Linux
notwendige Hardware wird dabei in der virtuellen Box simuliert, so als
säßen Sie vor einem völlig anderen Rechner. In Wirklichkeit teilen sich
ihr Windows und das Linux-System, voneinander abgeschottet die “echte”
Hardware Ihres PCs.
Linux-Container arbeiten ähnlich, nur auf
der Ebene ein- und desselben Betriebssystems. Bei einer Simulation auf
der Ebene der Hardware müssen die vollständigen Ressourcen für mehrere
Betriebssysteme auf einem Rechner miteinander geteilt werden. Das ist
aufwendig und führt schnell an die Grenzen der verwendeten Hardware
Bei
Linux-Containern spielt sich die Virtualisierung dagegen nicht auf der
Ebene der Hardware, sondern auf auf der Ebene des Betriebssystems ab.
Statt einer virtuellen Box, die einen vollständigen PC simuliert, werden
sogenannte Container als isolierte Umgebungen innerhalb eines
Betriebssystems programmiert, so dass sich eine Vielzahl von Containern,
die wesentlich kleiner sind als ein vollständiges Betriebssystem
denselben Host teilen.
Es handelt sich dabei um sehr flexibel
arbeitende Virtualisierungen für die Entwicklung, die Bereitstellung und
den Test von Anwendungen unterschiedlichster Art.
Dies führt zu
einer hohen Skalierbarkeit und Portabilität (Transportfähigkeit) mit
der Möglichkeit des einfachen Austauschs von Containern auf
unterschiedlichen Systemen und in unterschiedlichen Umgebungen.
Skalierbarkeit in diesem Sinne bedeutet, dass Anwender, Programmiere und
Softwareentwicker genau die Ressourcen in Anspruch nehmen können, die
sie für ihr jeweiliges Projekt benötigen
Die auf Linux
basierenden, bis zum Jahr 2013 gefundenen Lösungen der
Containervirtualisierung erforderten jedoch sehr viel spezielles Wissen
über die Einzelheiten der jeweiligen Betriebssysteme und über die
Besonderheiten der verschiedenen Linux-Distributionen.
Im Jahr
2013 änderte sich dies mit der Entwicklung der Software Docker und der
Docker-Container durch das Unternehmen dotcloud, später umbenannt in
Docker Inc. Im Jahr 2014 wurde die Software Docker von dem
amerikanischen Unternehmen Red Hat in seine LinuxDistribution
Enterprise-Linux 7.0 aufgenommen.
Docker fasst also im Grunde
viele der bis dahin entstandenen Lösungen in einer einheitlichen und
anwenderfreundlichen Softwareumgebung mit entsprechenden Werkzeugen
zusammen und entwickelt diese weiter. Mit Docker wurde es vor allem
Softwareentwicklern einfacher gemacht, ihre Anwendungen mittels
Containern zu virtualisieren und transportabel zu gestalten.
Docker
vereinfacht dies, indem es eine Anzahl verschiedener Tools anbietet, mit
denen sich Container unter verschiedenen Bedingungen standardisiert und
einfacher erstellen sowie verwenden lassen
Mit Docker können
Anwendungen nun wesentlich leichter isoliert werden und einzelne
Ressourcen des Systems, sei es Prozessor, Netzwerkzugriff oder Speicher
besser verwaltet werden. Anwendungen können mit Docker unkompliziert
über Systemgrenzen hinweg verschoben werden. Eine Vielzahl voneinander
isolierter Container können parallel auf einem Host-System genutzt
werden. Dabei verwenden die Container weiterhin Funktionen des
Linux-Kernels. Trotz der jeweiligen Isolation bleibt es möglich, dass
Anwendungen miteinander kommunizieren und Daten ausgetauscht werden
können.
Auf Docker basierende Container können daher
unkompliziert erstellt, kopiert und zwischen verschiedenen Umgebungen
transportiert werden.
Docker-Container können einfach verwendet
und schnell wieder gelöscht werden. Der Vorteil gegenüber virtuellen
Maschinen, bei denen erst das vollständige Betriebssystem auf einer, die
Hardware abbildenden Virtualisierungsschicht installiert werden muss,
liegen auf der Hand. Docker-Container auf der Virtualisierungsschicht
des Betriebssystems sind flexibler und einfacher zu handhaben.
Anwendung
finden Docker-Container vor allem im Bereich von Server-Lösungen. Diese
Art der Virtualisierung von Anwendungen kam daher vor allem der
Entwicklung des Cloud-Computing zugute. Die Grundgedanke des
Cloud-Computing besteht darin, dass die auf mehreren verbundenen Servern
befindlichen Ressourcen von verschiedenen Anwendern sowohl gemeinsam
als auch völlig isoliert voneinander genutzt werden können.
Um
den unterschiedlichsten Bedürfnissen der jeweiligen Anwender sowohl an
die Hardware als auch an die zu verwendende Software gerecht werden zu
können, bedarf es ressourcenschonender Lösungen, die eine einfache,
schnelle und hohe Skalierbarkeit gewährleisten.
Die
Virtualisierung mittels Docker-Containern ermöglicht eine flexible
Umgebung mit hoher Kontrolldichte und hat den Vorteil, Anwendungen
zwischen verschiedenen Servern auch an unterschiedlichen Standorten
verschieben zu können. Das Ergebnis ist eine hohe Ausfallsicherheit und
Skalierbarkeit bei optimaler Ausnutzung vorhandener Ressourcen.
In
der Docker Inc. zusammengeführt (https://www.docker.com), arbeitet
heute eine große Gemeinschaft von Entwicklern und Enthusiasten, die Open
Source Docker Community, ständig daran, die hinter Docker stehenden
Technologien zu verbessern und anwenderfreundlich zu gestalten
(https://forums.docker.com/).
Aus welchen Modulen besteht Docker und welche Software ist notwendig?
Die
Softwarearchitektur von Docker besteht aus verschiedenen, miteinander
verbundenen und aufeinander aufbauenden Elementen (Modulen).
Es
handelt sich zunächst um den Docker-Client. Mit diesem erhält das System
die Anweisungen des Anwenders. Mit dem Modul Docker-Daemon werden
Funktionen zur Verfügung gestellt, mit dem Container erstellt, verwendet
und transportiert werden können.
Docker-Images sind
Speicherabbilder, die der Erstellung eines Containers dienen, sodass ein
Container die ausführbare Instanz eines Images darstellt. Ein
Docker-Image besteht aus mehreren Layern (Ebenen). Docker-Files wiederum
sind Textdateien, mit denen ein Image beschrieben werden kann.
In
der Docker-Registry werden die Images gespeichert und verwaltet. Bei
der Registry handel es sich um eine Modul, mit dem Softwareentwickler
ihre Docker-Images verwalten und deren Sicherheit analysieren können,
sowie Zugriffsrechte vergeben können.
Die Software Docker
ist so ausgestaltet, dass es möglich ist, den Docker-Client und den
Docker-Daemon sowohl auf dem gleichen Host-System zu verwenden als auch
eine Remote-Lösung (Lösung zur Fernsteuerung) eines Systems zu nutzen.
Die Kommunikation erfolgt über entsprechende Netzwerkschnittstellen.
Grundsätzlich
ist Docker eine für Linux-Systeme entwickelte Lösung zur
Virtualisierung von Containern. Docker kann jedoch auch über ein
virtuelles Linux-System mittels einer Virtualisierungssoftware wie
VirtualBox auch auf Windows-Computern und ebenso auf Apples MacOS
betrieben werden.
Mit dem Modul Docker-Daemon werden Funktionen zur Verfügung gestellt, mit <<>> Container erstellt, verwendet und transportiert werden können.
Nicht vielleicht <<>> ???