BMU Verlag Logo

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.

Bildlizenz: https://www.apache.org/licenses/LICENSE-2.0; Quelle: https://commons.wikimedia.org/wiki/File:Docker_  (container_engine)_logo.png

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.

Wie gefällt Ihnen unser Blogartikel? 

Hinterlassen Sie uns einen Kommentar oder schreiben Sie uns eine E-Mail an kaiser@bmu-verlag.de!

2 Kommentare:

Gerd am 22.05.2019 um 19:22:

Bei der Beschreibung von Docker sollte man auf den Begriff Virtualisierung verzichten, weil diese bei Docker eben nicht verwendet wird und nur verwirrt. Ich suche noch ein praktisches Beispiel für den Raspberry Pi, da die meisten Beschreibungen nicht auf die Praxis eingehen. Entsprechende Hardware steht bei mir schon bereit.

Antwort von Matthias Kaiser am 23.05.2019 um 11:40:

Hallo Gerd, vielen Dank für Ihren Kommentar! Wir werden das berücksichtigen und hierzu in Zukunft einen Artikel machen! Beste Grüße, Matthias Kaiser

Klaus am 12.03.2019 um 21:18:

Knapp und verständlich. Genau die richtige "Detailtiefe". Für mich war der Artikel sehr informativ.

Heinz am 11.03.2019 um 08:38:

sehr gut bis auf zu viele Kommas