Was ist Docker? So funktioniert die Cloud-Containerverwaltung

Technologie

Technologie

Datum 18.06.2021
Lesezeit 6 Min.

Was ist Docker? So funktioniert die Cloud-Containerverwaltung

Der Begriff „Docker” steht nicht nur für eine IT-Lösung zur einfacheren Bereitstellung von Anwendungen in der Cloud. Er bezeichnet auch die dazugehörige Open-Source-Community und das Unternehmen Docker, Inc., das sich mit Anwendungsentwicklung im Docker-Umfeld beschäftigt. Hier erfahren Sie, was Docker ist, wozu das System gut ist und warum die Zukunft den containerisierten Cloud-Anwendungen gehört.

Noch bis vor einigen Jahren wurden Internet-Anwendungen wie Webseiten, Online-Shops und webbasierte Tools fast immer auf extra dafür bereitgestellten Servern ausgeführt. Das Problem: Bei einem Ausfall oder plötzlichen Lastspitzen gerieten solche Systeme schnell an ihre Grenzen. Mit Docker lassen sich Web-Anwendungen nicht nur verteilt ausführen (also über mehrere Systeme hinweg), sondern auch besser skalieren und absichern. Wie das funktioniert, erklären wir hier.

Docker: Das steckt dahinter

Wenn von Docker die Rede ist, ist im Grunde ein ganzes Technologie-Umfeld gemeint. Konkret geht es darum, sogenannte Container zu erstellen und auf beinahe beliebigen Server-Systemen zu betreiben. Doch was sind in diesem Zusammenhang überhaupt Container und wozu dienen sie? Hierzu ist es zunächst wichtig zu verstehen, dass in den meisten Entwicklungsvorhaben die eigentliche Softwareentwicklung und der Betrieb („Operations”) getrennt voneinander arbeiten sollten. Anderenfalls würden sich beide Bereiche im laufenden Betrieb auf derselben Infrastruktur möglicherweise gegenseitig „in die Quere kommen” und behindern, wenn sie gleichzeitig auf dieselben Systemressourcen zugreifen. 

Damit das nicht passiert, muss eine Trennung zwischen der eigentlichen Anwendung und der Hard- und Software, unter der sie läuft, erfolgen. Ziel ist es, jedem Anwendungspaket genau diejenigen Ressourcen zur Verfügung zu stellen, die es benötigt – und diese freizugeben, wenn es gerade nicht zum Einsatz kommt. Hieraus ist der Begriff der Virtualisierung und der Containerisierung von Anwendungen entstanden.

Ein Container ist ein in sich abgeschlossenes System, das alle notwendigen Dateien beinhaltet, die für den Betrieb einer Anwendung benötigt werden. Hierzu zählen beispielsweise der Programmcode, aber auch Laufzeitmodule, Systemwerkzeuge, oder verwendete Bibliotheken – quasi alles, was zur Ausführung notwendig ist. Per Definition „existiert” ein solcher Container jedoch nur solange, wie er ausgeführt wird. Der eigentliche Inhalt eines Docker-Containers ist wiederum als sogenanntes Image bezeichnet, das einmal erzeugt und dann als Container-Instanz ausgeführt wird.

Das Docker-System selbst wurde in der Programmiersprache Go entwickelt und vom Unternehmen Docker, Inc. (vormals dotCloud) im Jahr 2013 veröffentlicht. Seitdem wird die Software sowohl vom genannten Unternehmen selbst, als auch von einer großen Open-Source-Entwicklergemeinde weiterentwickelt.

 

Das sind die Vorteile und Einsatzbereiche von Docker

Es liegt auf der Hand, dass die geschickte Aufteilung vorhandener Ressourcen, beispielsweise durch virtuelle Maschinen, schon auf einem einzelnen Server für mehr Effizienz sorgt. Hierdurch ist es möglich, mehrere Anwendungen gleichzeitig und ohne Ressourcenkonflikte auszuführen. Denkt man dieses Prinzip weiter, lässt es sich mit Hilfe von Docker auch auf Servercluster (also Verbünde mehrerer Einzelserver), oder eben auf die Cloud übertragen. Ein typisches Merkmal von Cloud-Anwendungen ist ja, dass es dem einzelnen Anwender letztlich „egal” sein kann, wo genau seine Anwendung tatsächlich ausgeführt wird – solange sie funktioniert. Außerdem ist es möglich, quasi-beliebig viele Docker-Container gleichzeitig auszuführen, falls viele Nutzer zur selben Zeit auf eine bestimmte Anwendung zugreifen.




Video: YouTube / predic8

 

Im Unterschied zu virtuellen Maschinen beinhalten Container nicht ein vollständiges Betriebssystem, sondern lediglich die gewünschte Anwendung (oder einen Microservice), sowie benötigte Betriebssystem-Komponenten. Somit können auf einer einzelnen (virtuellen) Maschine auch mehrere Container gleichzeitig laufen. Die Verwendung von Containern ist außerdem eine wichtige Grundlage für die sogenannte Cloud-Native-Entwicklung, also die Entwicklung frei von jeglicher „eigener” Hardware.

Die Vorteile von Docker im Überblick:

  • Mehr Effizienz: Anwendungen lassen sich isoliert von der Hard- und Software des Einzelsystems ausführen und verbrauchen nur die benötigten Ressourcen.
  • Verbesserte Sicherheit: Durch die Virtualisierung und klare Festlegung des Ressourcenbedarfs lassen sich die einzelnen Docker-Container so voneinander abgrenzen, dass Sicherheitsrisiken minimiert werden.
  • 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 es korrekt konfiguriert wurde).
  • Bessere Skalierbarkeit: Greifen viele Nutzer auf eine bestimmte Anwendung zu, werden entsprechend viele Container gestartet und auf beinahe beliebigen, verteilten Systemen ausgeführt.
  • Höhere Modularität: Durch die Verwendung sogenannter Microservices können laufende Prozesse (Container) grundsätzlich auch in mehreren Apps gemeinsam verwendet werden.
  • Mehr Schnelligkeit: Früher mussten, wenn neue Softwareversionen eingespielt wurden, Systeme meist neu gestartet werden. Mit Docker entfällt diese Notwendigkeit, da neue Container sich im laufenden Betrieb binnen Sekunden starten und beenden lassen.
  • Bessere Versionskontrolle und Rollback-Möglichkeit: Docker-Images beinhalten jeweils eine ganze Reihe von Layern („Schichten” oder „Ebenen”), 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: Wird eine Vielzahl von Docker-Containern auf verschiedenen Systemen benötigt, existieren mit Kubernetes, Docker Swarm und Amazon ECS wichtige Werkzeuge für deren Koordination.

 

Ausklappbare Informationsgrafik

Bei Docker ist das Containerformat standardisiert, der Inhalt unterscheidet sich oft jedoch erheblich.

 

Docker Hub: Zugriff auf fertige Docker-Images und Repositories

Wie werden aber nun fertige Docker-Images verfügbar gemacht und verwaltet? Dies geht natürlich je nach Anwendungs-Szenario beispielsweise über die öffentliche „Registry” beziehungsweise Repository-Verwaltung Docker Hub. Eine solche Registry ähnelt in ihrer Funktionsweise einem Lagerhaus. Hier werden jedoch keine Kisten, sondern verschiedene Images abgelegt und bei Bedarf durch Entwickler aus einem Repository, also quasi einem Entwickler-Lagerplatz, hervorgeholt. 

Oftmals entspricht das gewählte Image aber nur teilweise den eigenen Bedürfnissen: In diesem Fall wird das gewählte Image zunächst auf einem Docker-Host gestartet und somit ein Container erzeugt. Anschließend fügt der Entwickler diesem Container weitere Komponenten, wie beispielsweise Java, PHP oder Ubuntu-Komponenten hinzu, modifiziert gegebenenfalls den Quellcode der Anwendung und erstellt aus dem Container ein neues Image. Das Image wird dann in den Docker Hub hochgeladen und steht hier nun anderen Entwicklern zur Verfügung.

 

Die praktische Arbeit mit Docker: Wichtige Tipps

Wer mit Docker arbeitet, sollte ein paar wichtige Tipps beachten. Schließlich gibt es einige wesentliche 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: Sobald eine Vielzahl von Containern gestartet wird, 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.

 

Übrigens: An anderer Stelle in unserem Magazin erfahren Sie, was es mit dem Ende des Docker-Swarm-Supports bei Kubernetes auf sich hat und warum Sie trotzdem mit Kubernetes und Docker weiterarbeiten können.

 

Wie stehen Sie zum Thema Docker? Welche Bedeutung haben containerbasierte Microservices und Anwendungen für Sie? Wir freuen uns über Ihren Kommentar.

 

 


Ihre Digitalisierungs-Berater für den Mittelstand

Sie haben Fragen rund um die Digitalisierung? Unser Experten-Team steht ihnen gerne kostenlos
und unverbindlich im Chat (Mo.-Fr. 8-20Uhr) oder telefonisch unter 0800 5054512 zur Verfügung.

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Facebook Twitter WhatsApp LinkedIn Xing E-Mail