Bessere Skalierbarkeit, geringere Kosten für Infrastruktur und Wartung, höhere Ausfallsicherheit: Cloud-Lösungen bieten viele Vorteile. In der Cloud werden viele Anwendungen auf virtuellen Systemen installiert. Dabei kommt zunehmend die Virtualisierungssoftware Docker zum Einsatz. Was kann diese und welche Vorteile bietet sie für Ihr Unternehmen?
Das Cloud-Angebot für Unternehmen reicht inzwischen von Office-Anwendungen wie Microsoft 365 bis hin zu spezialisierten Angeboten wie Functions-as-a-Service (FaaS). Bei FaaS werden gezielt einzelne Funktionen angemietet, etwa aus dem Bereich der künstlichen Intelligenz. Ein prominentes, aktuelles Beispiel hierfür ist der KI-basierte, API-fähige und somit in andere Anwendungen integrierbare Chatbot ChatGPT.
Viele Anwendungen dieser Art laufen in der Cloud heute virtualisiert. Eine Softwarevirtualisierung von Anwendungen können Sie auch selbst über sogenannte Software-Container umsetzen: beispielsweise mit Docker. Was Docker ist und wie Sie es sinnvoll für Ihr Business einsetzen, lesen Sie hier.
Was ist Docker?
Docker ist eine Virtualisierungssoftware, mit der Sie Anwendungen auf lokalen Systemen ebenso wie in der Cloud installieren können. Docker verwaltet für Sie den Zugriff der einzelnen Programme auf Betriebssystem, Schnittstellen und Netzwerke. So teilt sich Software eine gemeinsame Hardware, ohne sich dabei gegenseitig zu behindern.
Im Unterschied zu virtuellen Maschinen bildet Docker hierbei allerdings keinen kompletten Computer nach, sondern lediglich die Betriebssystem-Ebene, auf der Sie dann die Anwendungen in Ihren Software-Container ausführen.
Diese Form der Virtualisierung wird auch als Operating-System-Level-Virtualisierung bezeichnet. Durch das Einsparen separater Betriebssysteme für jede einzelne virtuelle Anwendung benötigt ein Docker-Container vergleichsweise wenig Speicher. Somit arbeitet Docker auch auf weniger leistungsstarken Hardwareplattformen effizient und schnell.
Durch die Virtualisiserung kann Docker beispielsweise mehrere Installationen einer einzigen Software auf einem Computer sauber voneinander trennen. Damit ist Docker auch für die Anwendungsentwicklung ein wertvolles Werkzeug.
Für jedes aktive Programm legt Docker einen sogenannten Software-Container an, in dem das jeweilige Programm zusammen mit seinen benötigten Dateien abgelegt wird. Dies können sein:
- der eigentliche Programmcode
- Bibliotheken
- Ausführungsumgebungen
- Systemprogramme
- Anwendungsdaten
- sonstige von der Software benötigte Dateien
Entwickelt wurde Docker ursprünglich für das Betriebssystem Linux. Inzwischen gibt es Docker für weitere Plattformen, darunter Microsoft Windows und macOS. Auch auf Cloud-Diensten wie Amazon Web Services (AWS) und Microsoft Azure läuft die Virtualisierungssoftware bereits.
Aufgrund ihrer vielen Vorteile nutzen Entwickler:innen und auch viele andere Anwender:innen Docker und seine Containervirtualisierung mittlerweile in Cloud-Umgebungen. So gibt es auch passend vorbereitete Software-Container, die Sie direkt anmieten können. Diese Dienstleistung heißt Containers-as-a-Service (CaaS).
Dem Docker-System liegt die Programmiersprache Go zugrunde. 2013 hat das Unternehmen Docker, Inc. (ehemals dotCloud) die Software veröffentlicht. Seitdem entwickeln sowohl das genannte Unternehmen selbst, als auch eine große Open-Source-Entwicklergemeinde Docker stetig weiter.
Über sogenannte Container-Orchestration-Tools automatisieren Sie Planung, Bereitstellung und Vernetzung von Software-Containern. Verbreitete Orchestrierungs-Lösungen sind Docker Swarm, Kubernetes oder Nomad. Anbieter von Cloud-Produkten haben zum Teil eigene Orchestration-Tools im Angebot. Nicht jedes Tool ist mit allen Containern kompatibel.
Die Docker-Komponenten – wie funktioniert die Containerverwaltung?
Die Docker-Welt hat ihre eigenen Fachbegriffe. Diese unterscheiden sich zum Teil von den Bezeichnungen bei anderen Virtualisierungslösungen, beispielsweise Virtual Machines.
Docker-Images
Ein Docker-Image umfasst alle Daten, die zu einem Programm gehören. Zu Beginn arbeiten Sie mit einem von Ihnen ausgewählten Basis-Image, das sie jederzeit weiterentwickeln können, um es an Ihre Anforderungen anzupassen.
Jede Ihrer Änderungen am Basis-Image wird in einer Textdatei gespeichert, dem sogenannten Dockerfile. Das Dockerfile ist gewissermaßen Ihr Bauplan, um vom Basis-Image zum gewünschten Image zu gelangen.
Mit jeder Ergänzung im Dockerfile erzeugen Sie eine neue Version Ihres Images, die von Docker als sogenannter Layer (Ebene) an ihr vorhandenes Image angehängt wird. Ein einzelnes Docker-Image ist vergleichbar mit einem Snapshot (Zustandsaufnahme) auf einer virtuellen Maschine.
Ein Image können Sie wiederum als Software-Container auf Ihrer Hardware oder in der Cloud ausführen. Bei Problemen mit einem Image können Sie jederzeit zum vorherigen Layer zurückspringen und dieses ausführen.
Docker Desktop
Docker Desktop für Windows, macOS und Linux ist die graphische Benutzeroberfläche, mit der Sie Ihre Docker-Container erstellen und verwalten. Alternativ zu Docker Desktop haben Sie auch über die Docker-Engine-REST-API und die Docker-CLI Befehlszugriff auf Docker.
Docker-Container
Ein Container ist eine Version eines Images, die gerade ausgeführt wird. Mit einem Image können Sie auch gleichzeitig mehrere Container parallel erzeugen und starten. Hat das darin enthaltene Programm seine Aufgabe abgearbeitet, schließt Docker den zugehörigen Container wieder und beendet ihn somit.
Sie können auch mehrere Container miteinander verbinden. Diese können dann über ein von Docker bereitgestelltes virtuelles Netzwerk miteinander kommunizieren und untereinander Daten austauschen.
Docker-Engine
Die Docker-Engine ist gewissermaßen der Motor, der die einzelnen Programme aus ihren Containern heraus auf dem gemeinsamen Betriebssystem und der dahinter liegenden Hardware zum Laufen bringt. Zur Docker-Engine gehören der Hintergrundprozess Docker-Daemon sowie die Docker-Engine-REST-API und Docker-CLI, über die Sie dem Docker-Daemon Befehle geben.
Docker-Daemon
Der Docker-Daemon übernimmt die Ausführung Ihrer Container. Der Hintergrundprozess erstellt und verwaltet alle Images und Container. Beendet Docker ein Programm, löscht der Daemon den jeweiligen Container wieder. Damit gibt Docker auch alle Systemressourcen wieder für andere Programme frei, die die Anwendung im Container während ihrer Laufzeit genutzt hat.
Docker-Engine-REST-API
Manchmal kann es sinnvoll sein, direkt aus laufenden Anwendungen heraus Befehle an den Docker Daemon zu geben. Hierfür gibt es die Docker-Engine-REST-API, oder auch Docker-Engine-API. Ein solches Application-Programming-Interface (API) oder Programmierschnittstelle besteht aus einer Anzahl von Befehlen und Operatoren, über die Nutzer:innen, aber auch andere Anwendungen einem bestimmten Programm Befehle erteilen können.
Die API für die Docker-Engine folgt dem Softwareparadigma Representational-State-Transfer (REST). Dieses Paradigma enthält bestimmte Empfehlungen für die Interaktion in Netzwerken wie dem World Wide Web und kommt beispielsweise häufig bei der Maschine-zu-Maschine-Kommunikation zum Einsatz. Weil die API von Docker dieses REST-Paradigma erfüllt, ist sie auch als REST API oder RESTful-API bekannt.
Über entsprechende Befehle der Docker-Engine-REST-API geben Sie Docker beispielsweise den Auftrag, eine Liste aller aktuell laufenden Container auszugeben oder neue Container zu erstellen oder laufende Container zu beenden.
Docker-CLI
Ein Command Line Interface (CLI) ist eine Kommunikationsschnittstelle, etwa eine Kommandozeile, über der sie einer Anwendung Befehle in Textform erteilen können.
Genau wie über die Docker-Engine-REST-API können Sie also auch über die Docker-CLI dem Docker Daemon Befehle geben. Jeder Befehl über die CLI beginnt mit dem Befehlswort „Docker“. Anschließend wählen Sie beispielsweise ein bestimmtes Image oder einen Container, die sie über deren individuelle Bezeichnung adressieren. Mit dem Befehl „inspect“ lassen Sie sich beispielsweise Informationen über ein Image und dessen Layer auf dem Bildschirm anzeigen.
Docker Compose
Mit dem Tool Docker Compose können Sie Anwendungen definieren und freigeben, die Sie in mehreren Containern koordiniert ausführen. Solche koordinierten Programme heißen unter Docker auch Multicontaineranwendungen oder Stacks (Stapel).
Repository
Fertige Layer stellen Sie für andere Entwickler:innen in einem sogenannten Repository bereit. Ein solches Repository kann einem begrenzten Kreis an Nutzer:innen offenstehen. Sie können es im Web auch für alle Docker-Nutzer:innen frei zugänglich machen. Das größte öffentliche Repository im Web und zugleich die größte Nutzer-Community ist der Docker Hub.
Docker vs. Virtual Machines: Gemeinsamkeiten und Unterschiede
Noch vor einigen Jahren waren virtuelle Maschinen (Virtual Machines, kurz: VM) dominierend in der Virtualisierung von Systemen und Anwendungen. Eine virtuelle Maschine simuliert alle Komponenten eines echten Computers. Hierzu gehört auch eine eigene Betriebssystem-Installation. Daher spricht man hier auch von der Vollvirtualisierung. Ein solches Betriebssystem als Teil einer virtuellen Maschine heißt Gast-Betriebssystem. Das Betriebssystem, auf dem eine oder mehrere virtuelle Maschinen laufen, ist das Host-Betriebssystem.
Eine Hypervisor-Software erstellt und verwaltet alle virtuellen Maschinen auf einem Computer oder innerhalb einer Cloud. Sie bildet zugleich die Verbindung zwischen den Gast-Betriebssystemen und dem Host-Betriebssystem.
Im Unterschied hierzu sind Docker-Container wesentlich ressourcensparender. Denn bei ihnen entfällt die Installation eines Gast-Betriebssystems. Docker-Anwendungen verbrauchen somit nur unwesentlich mehr Systemleistung als nicht-virtuelle Anwendungen. Selbst auf einer kleinen Plattform können sehr viele Docker-Container gleichzeitig laufen. Auch für den Einplatinencomputer Raspberry Pi gibt es daher bereits Docker-Umsetzungen. Sie unterstützen sogar die Verbindung mehrerer Raspberry Pi über einen sogenannten Docker-Schwarm.
Alle Container einer Plattform nutzen über die Docker Engine direkt das Host-Betriebssystem der Computerhardware. Nur das Netzwerk-Interface und das Dateisystem sind exklusiv. Man spricht daher bei Docker auch von einer Betriebssystemvirtualisierung. Denn nur dieses wird aus Sicht der Anwendung virtualisiert.
Installieren Sie viele Anwendungen parallel, spart Docker gegenüber VM erheblich Speicherplatz. Zugleich können Docker-Container sehr schnell auf andere Umgebungen übertragen werden. Auch das Anlegen eines neuen Containers erfolgt wesentlich zügiger als das Hochfahren einer VM. Besonders für die Softwareentwicklung sind dies große Vorteile.
Unterschiedliche Abstraktionsebenen für unterschiedliche Anwendungsgebiete
Docker und VM arbeiten auf unterschiedlichen Abstraktionsebenen. Docker kommt zum Einsatz, um einzelne Anwendungen isoliert zu installieren, sie weiterzuentwickeln und sie als Image an andere Entwickler:innen weiterzugeben. Docker-Images sind klein und leicht weiter zu verteilen.
VM simuliert hingegen eine komplette Hardware mit allen gegenseitigen Abhängigkeiten der einzelnen Programme und Betriebssystemkomponenten. Damit können Sie sie sogar auf andere Plattformen transferieren – beispielsweise eine Linux-VM über die Software Virtualbox auf einen Windows-Rechner.
Docker und VM haben somit ihre jeweiligen Einsatzgebiete, in denen sie gegenüber der anderen Lösung klar im Vorteil sind. Aber auch die Kombination beider Welten ist möglich, etwa in der Cloud. Sie können Docker beispielsweise auf einer virtuellen Maschine unter Linux ausführen, um darauf Docker-Container zu verwenden.
Containers-as-a-Service und weitere Einsatzmöglichkeiten
Neben den Cloud-Services IaaS, PaaS und SaaS hat sich Container-as-a-Service längst als ein weiteres verbreitetes Cloud-Modell etabliert. Genau hier setzt Docker an, indem es die besonders einfache Erstellung, Weiterentwicklung und Weitergabe von Software-Images möglich macht.
Je nach Anbieter ist dabei auch die Multi-Cloud-Verknüpfung möglich. Damit verbinden Sie Ihre Docker-Container und die darin befindlichen Anwendungen mit anderen Containern in anderen Anwendungen oder mit Daten in anderen Cloud-Modellen, beispielsweise einer Datenbank in einer Umgebung als Software-as-a-Service.
Natürlich funktioniert Docker nicht nur in der Cloud. Images können Sie ebenso einfach auf physischen Systemen installieren, ausführen und weitergeben, solange Ausgangs- und Ziel-Betriebssystem übereinstimmen.
Docker unter Linux-Distributionen wie Ubuntu
Es ist kein Zufall, dass Docker auf Basis des Linux-Betriebssystems entstanden ist. Denn die Containerverwaltung ergänzt sich sehr gut mit der Anwendungsentwicklung und vielen anderen Tätigkeiten unter Linux.
Haben Sie beispielsweise auf Ihrer physischen Hardware die Linux-Distributionen Debian oder openSUSE Linux eingerichtet und möchten austesten, ob die von Ihnen gerade entwickelte Anwendung auch unter Ubuntu fehlerfrei läuft? Mit Docker lassen Sie ein Ubuntu Docker-Image in einem Container laufen und testen die von Ihnen programmierte Anwendung damit. So müssen Sie keine komplette Virtual Machine einrichten und kein weitere Betriebssystem-Distribution auf Ihrem Testsystem einrichten. Nach dem Test schließen Sie den Container einfach wieder.
Die praktische Arbeit mit Docker: Wichtige Tipps
Bei der Arbeit mit Docker sollten Sie einige Dinge beachten. Immerhin gibt es einige Unterschiede zur klassischen, hostbasierten beziehungsweise monolithischen Entwicklung:
- Minimalistisch bleiben: Implementieren Sie möglichst nur jeweils einen Prozess in jedem Container und laden Sie darüber hinaus nur das hinein, was für Ihre Anwendung oder deren Bestandteil unbedingt notwendig ist.
- Datenhaltung separieren: Speichern Sie niemals persistente, also dauerhafte Daten in einem Container. Diese (Container) können jederzeit beendet oder neu gestartet werden, was für einen Datenverlust sorgen würde.
- Orchestrierung beachten: Wenn Sie sehr viele Container zeitgleich betreiben, ist es wichtig, den Überblick zu behalten. Hier sollten Sie frühzeitig eines der oben genannten Werkzeuge wie beispielsweise Kubernetes einsetzen.
- Root-Rechte vermeiden: Speziell für öffentlich verfügbare Docker-Images gelten ähnliche Regeln wie für Software an sich: Erteilen Sie diesen möglichst keine Root-Rechte, oder zumindest nur lokal. Ansonsten könnte sich Schadsoftware unbemerkt in Ihrem System einnisten.
Die Vorteile von Docker auf einen Blick
Die wachsende Beliebtheit von Docker hat viele Gründe. Hier die wichtigsten:
- Mehr Effizienz: Führen Sie Anwendungen isoliert von der Hard- und Software des Einzelsystems aus und verbrauchen Sie dabei nur die wirklich benötigten Ressourcen
- Verbesserte Sicherheit: Durch die Virtualisierung und klare Festlegung des Ressourcenbedarfs grenzen Sie die einzelnen Docker-Container so voneinander ab, dass Sie Sicherheitsrisiken minimieren
- Höhere Abstraktionsebene: Diskussionen wie die Frage nach der Lauffähigkeit einer Anwendung unter bestimmten Bedingungen stellen sich bei Docker nicht, da Container entweder „laufen” oder eben nicht. Das zugrundeliegende System ist gewissermaßen irrelevant (sofern Sie es korrekt konfiguriert haben)
- Bessere Skalierbarkeit: Greifen viele Nutzer:innen auf eine bestimmte Anwendung zu, werden entsprechend viele Container gestartet und auf beinahe beliebigen, verteilten Systemen ausgeführt
- Höhere Modularität: Durch die Bereitstellung sogenannter Microservices können auch mehrere Apps gemeinsam laufende Prozesse (Container) verwenden
- Mehr Schnelligkeit: Üblicherweise müssen Sie Systeme neu starten, wenn Sie neue Softwareversionen einspielen. Mit Docker entfällt diese Notwendigkeit, da Sie neue Container im laufenden Betrieb binnen Sekunden starten und beenden.
- Bessere Versionskontrolle und Rollback-Möglichkeit: Docker-Images beinhalten jeweils eine ganze Reihe von Layern, die die einzelnen Versionen widerspiegeln. Gibt es Fehler in der aktuellen Version, wird einfach auf den letzten, funktionierenden Layer zurückgegriffen. Diese Eigenschaft unterstützt auch das agile Entwicklungsprinzip.
- Mehr Portabilität: Mit Hilfe von Virtualisierungssoftware lassen sich dieselben Docker-Container nicht nur unter Linux (beispielsweise Ubuntu), sondern auch unter Windows und macOS verwenden.
- Größere Zukunftsfähigkeit: Eine riesige Entwickler-Community sowie das kommerzielle Unternehmen Docker, Inc. unterstützen sowohl bei der Einrichtung, als auch beim Betrieb von Docker-Containern.
- Bessere Orchestrierbarkeit: Benötigen Sie eine Vielzahl von Docker-Containern auf verschiedenen Systemen, existieren mit Kubernetes, Docker Swarm und Amazon ECS wichtige Werkzeuge für deren Koordination.
Container-Technologie und Sicherheit
Docker führt alle Anwendungen in virtuellen Containern aus. Damit stehen Ihnen alle Schnittstellen zwischen ausgeführten Programmen und ihrer Umgebung zur Verfügung (?). Trotzdem gibt es auch in dieser Form der Virtualisierung prinzipbedingte Sicherheitsrisiken.
Gerade der gemeinsame Zugriff aller Container auf das Betriebssystem unter Docker verlangt besondere Aufmerksamkeit. Schadprogramme wie Viren oder Trojaner greifen auf einer virtuellen Maschine oft nur das Gast-Betriebssystem an. Dann können sie diese durch Bereinigung oder im äußersten Fall durch Neuaufsetzen der virtuellen Maschine entfernen. Unter Docker attackiert eine Schadsoftware in der Regel direkt das eigentliche Host-Betriebssystem. Dafür muss sie allerdings eine Lücke in der Docker-Engine finden.
In der Vergangenheit gab es Berichte über Exploits, denen genau dies gelungen ist. Auch die auf Docker Hub bereit gestellten Docker-Images haben zum Teil Sicherheitsmängel. Allein die Veröffentlichung im Hub ist noch keine Gewähr für geprüfte Sicherheit.
- Sie sollten daher solche Images sehr sorgsam prüfen, bevor Sie diese auf eigenen Produktionssystemen verwenden.
- Unter Unix und Linux sollten Sie Docker im sogenannten „rootless mode” betreiben. Damit arbeiten auch der Docker Daemon und Ihre Container nicht als Root-User mit Administratorrechten.
- Je nach Betriebssystem können Sie unter Docker zudem festlegen, auf welche RAM- and CPU-Ressourcen ein Container überhaupt zugreifen darf.
- Sie sollten immer mit der neuesten Docker-Version für Ihr Betriebssystem arbeiten.
Beachten Sie diese Sicherheitsregeln, ist Docker ein wertvolles, sicheres und zeitsparendes Werkzeug für Einsatz und Entwicklung von Software in der Cloud oder auf physischer Hardware.
Docker: Das Wichtigste zusammengefasst
- Mit Docker virtualisieren Sie Anwendungen in platzsparenden Software-Containern.
- Die Virtualisierungs-Software ist inzwischen für viele Betriebssysteme und Cloud-Umgebungen verfügbar.
- Gegenüber virtuellen Maschinen spart Docker die Installation eines Gast-Betriebssystems.
- Cloud-Anbieter setzen mit Modellen wie Container-as-a-Service auf Nutzer:innen von Docker und anderen Container-Systemen.
- Eine einfache Versionskontrolle und die Rollback-Funktionalität erleichtern die Anwendungsentwicklung unter Docker.
- Viele Docker-Images werden über das Docker Hub zum Download angeboten.
- Auch unter Docker ist IT-Sicherheit ein wichtiges Thema mit ganz spezifischen Herausforderungen
Quelle:
https://www.vodafone.de/business/featured/technologie/was-ist-docker-so-funktioniert-die-cloud-containerverwaltung/