Definition

Docker

Docker verpackt Container, stellt sie bereit und führt sie aus. Die Containertechnologie ist über das Betriebssystem verfügbar: Ein Container verpackt einen Dienst oder eine Funktion mit allen Bibliotheken, Konfigurationsdateien, Abhängigkeiten und anderen für den Betrieb notwendigen Teilen und Parametern. Jeder Container nutzt die Dienste eines zugrunde liegenden Betriebssystems. Docker Images enthalten alle Abhängigkeiten, die für die Ausführung von Code innerhalb eines Containers erforderlich sind, so dass Container, die zwischen Docker-Umgebungen mit demselben Betriebssystem wechseln, ohne Änderungen funktionieren.

Docker nutzt die Ressourcenisolierung im Betriebssystem-Kernel, um mehrere Container auf demselben Betriebssystem auszuführen. Dies unterscheidet sich von virtuellen Maschinen (VMs), die ein komplettes Betriebssystem mit ausführbarem Code auf einer abstrahierten Schicht von physischen Hardwareressourcen kapseln.

Docker wurde für die Linux-Plattform entwickelt, unterstützt aber inzwischen auch andere Betriebssysteme, darunter Microsoft Windows und Apple OS X. Es sind Versionen von Docker für Amazon Web Services (AWS) und Microsoft Azure verfügbar.

Abbildung 1: So ist ein Docker Stack aufgebaut
Abbildung 1: So ist ein Docker Stack aufgebaut

Docker-Komponenten und -Tools

Die Docker Community Edition ist komplett Open Source, während die Docker Enterprise Edition eine kommerzielle Version mit zusätzlichen Services ist. Docker besteht aus verschiedenen Komponenten und Tools, die beim Erstellen, Überprüfen und Verwalten von Containern helfen.

Die Docker-Engine ist die zugrunde liegende Technologie, welche die Aufgaben und Arbeitsabläufe beim Erstellen von containerbasierten Anwendungen übernimmt. Die Engine erstellt einen serverseitigen Daemon-Prozess, der Images, Container, Netzwerke und Speichervolumen hostet. Der Daemon stellt auch eine clientseitige Kommandozeile (CLI) bereit, über die Benutzer mit dem Daemon über die Docker-Anwendungsprogrammierschnittstelle interagieren. Die von Docker erstellten Container werden als Dockerdateien bezeichnet. Docker-Compose-Dateien definieren die Zusammensetzung von Komponenten in einem Docker-Container.

Docker Hub ist ein Software-as-a-Service-Tool, mit dem Benutzer containerbasierte Anwendungen über eine gemeinsame Bibliothek veröffentlichen und gemeinsam nutzen können. Der Dienst bietet mehr als 100.000 öffentlich verfügbare Anwendungen sowie öffentliche und private Container-Registries an.

Ähnlich wie Hub ist Trusted Registry ein Repository mit einer zusätzlichen Ebene der Kontrolle und des Eigentums über den Speicher und das Verteilen von Container-Images.

Der Docker-Swarm-Modus in der Docker Engine unterstützt den Cluster-Lastausgleich für Docker. Mehrere Docker-Host-Ressourcen werden zusammengelegt, um als eine Einheit zu agieren, was den Benutzern eine schnelle Skalierung von Container-Bereitstellungen auf mehrere Hosts bietet.

Die Universal Control Plane ist eine webbasierte, einheitliche Cluster- und Anwendungsmanagement-Schnittstelle.

Compose ist ein Tool zur Konfiguration von Multi-Container-Anwendungsdiensten, zur Anzeige des Containerstatus, zum Streamen von Protokollausgaben und zur Ausführung von Single-Instance-Prozessen.

Content Trust ist ein Sicherheitstool zum Überprüfen der Integrität von entfernten Docker-Registrierungen durch Benutzersignaturen und Image-Tags.

Docker-Versionen und Hauptfunktionen

Docker Enterprise 1.13, veröffentlicht im Januar 2017, fügte Abwärtskompatibilität für die Kommandozeile hinzu, um mit älteren Docker-Daemons zu arbeiten, und mehrere Aufräumbefehle, um Speicherplatz und Daten effizienter zu verwalten, sowie einige Sicherheits- und Fehlerbehebungen. Zu den weiteren Verbesserungen von Docker Enterprise im Jahr 2017 gehören die native Kubernetes-Unterstützung für die Container-Orchestrierung, zusätzlich zum Swarm-Modus von Docker, sowie die Unterstützung von IBM Mainframe und Windows Server 2016, damit Benutzer gemischte Cluster und Anwendungen über mehrere Betriebssysteme hinweg ausführen können.

Die Docker Enterprise Edition 2.0, die im April 2018 veröffentlicht wurde, bot Multi-OS- und Multi-Cloud-Unterstützung für hybride Umgebungen.

Docker Enterprise 3.0, die jüngste Version vom Juli 2019, fügte Blue-Green-Container-Cluster-Upgrades und die Möglichkeit hinzu, Multiservice-Container-basierte Anwendungen zu erstellen, die in jeder Umgebung ausgeführt werden können. Weitere neue Funktionen sind:

  • Docker Desktop Enterprise, mit dem Entwickler Anwendungen in einer Kubernetes-konformen Umgebung mit automatisierter Pipeline-Integration und zentralisiertem IT-Management bereitstellen;
  • Docker Applications, eine Reihe von Produktivitätstools für Entwickler;
  • Docker Kubernetes Service, der die Verwaltung und Skalierung von Kubernetes-basierten Anwendungen automatisiert und Sicherheit, Zugriffskontrolle und automatisiertes Lebenszyklusmanagement bietet; und
  • Docker Enterprise as a Service, ein vollständig verwalteter Containerdienst für Unternehmen.

Vor- und Nachteile von Docker

Docker hat sich als De-facto-Standardplattform für das schnelle Zusammenstellen, Erstellen, Bereitstellen, Skalieren und Überwachen von Containern auf Docker-Hosts etabliert. Docker ist besonders portabel, so dass Benutzer Container einfach auf verschiedenen Hosts in privaten und öffentlichen Umgebungen registrieren und gemeinsam nutzen. Zu den Vorteilen von Docker gehören eine effiziente Anwendungsentwicklung, ein geringerer Ressourcenbedarf und eine schnellere Bereitstellung im Vergleich zu VMs.

Abbildung 2: Docker und Virtuelle Maschinen haben eine grundlegend verschiedene Struktur.
Abbildung 2: Docker und Virtuelle Maschinen haben eine grundlegend verschiedene Struktur.

Docker ist aber auch mit Problemen verbunden. So sammeln sich die Container in einem Unternehmen recht schnell an und sind dann kaum noch zu verwalten. Da Container sich vom granularen virtuellen Hosting hin zur Orchestrierung von Anwendungskomponenten und Ressourcen entwickelt, ist das Verteilen und Verknüpfen von Anwendungskomponenten – die Hunderte von ephemeren Containern umfassen– eine große Hürde.

In den letzten Jahren wurde Docker von Kubernetes für die Container-Orchestrierung verdrängt; die meisten Kubernetes-Angebote führen jedoch immernoch Docker im Hintergrund aus.

Docker-Sicherheit

Ein seit jeher bestehendes Problem bei Containern – und damit auch bei Docker – ist die Sicherheit. Trotz der ausgezeichneten logischen Isolierung nutzen Container immer noch das Betriebssystem des Hosts. Ein Angriff oder eine Schwachstelle in ebendiesem gefährdet alle Container, die auf dem Betriebssystem laufen. Schwachstellen können den Zugriff und die Autorisierung, Container-Images und den Netzwerkverkehr zwischen Containern betreffen. Docker-Images haben oft standardmäßig Root-Zugriff auf den Host, obwohl die Pakete von Drittanbietern das übernehmen.

Docker hat der Docker-Plattform regelmäßig Sicherheitsverbesserungen hinzugefügt, wie zum Beispiel Image-Scanning, sichere Knoteneinführung, kryptografische Knotenidentität, Clustersegmentierung und sicheres Verteilen von Geheimnissen. Das Verwalten von Docker-Geheimnissen gibt es auch in Kubernetes sowie in D2iQ, CISOfy Lynis und HashiCorp Vault. Verschiedene Containersicherheitsscan-Tools wurden von Aqua, Twistlock, NeuVector und anderen entwickelt.

Einige Nutzer führen Container innerhalb einer VM aus, obwohl Container keine virtuellen Maschinen benötigen – das löst zwar nicht das Problem der gemeinsamen Nutzung von Ressourcen, mindert jedoch das Sicherheitsrisiko. Eine weitere Alternative sind sogenannte Mikro-VMs, die nicht den gleichen Overhead wie eine typische VM benötigen; Beispiele sind gVisor, Kata Containers und Amazon Firecracker. Der häufigste und am häufigsten empfohlene Schritt zur Gewährleistung der Containersicherheit ist es, Container-Hosts nicht dem Internet auszusetzen und nur Container-Images aus bekannten Quellen zu verwenden.

Sicherheit war auch das Hauptargument für Docker-Alternativen, insbesondere für CoreOS' rkt. Docker hat jedoch viele Fortschritte bei der Sicherheit gemacht, während gleichzeitig die Dynamik für diese Container-Alternativen nachgelassen hat.

Docker-Alternativen, Ökosystem und Standardisierung

Es gibt Tools von Drittanbietern, die mit Docker für Aufgaben wie Containermanagement und Clustering zusammenarbeiten. Das Docker-Ökosystem umfasst eine Mischung aus Open-Source- und proprietären Technologien wie Open-Source-Kubernetes, Red Hats proprietäre OpenShift-Paketierung von Kubernetes und Canonicals Distribution von Kubernetes, die als reines Upstream-Kubernetes bezeichnet wird. Docker konkurriert mit proprietären Anwendungscontainern wie VMware vApp und Tools zur Abstraktion der Infrastruktur, darunter Chef.

Docker ist nicht die einzige verfügbare Container-Plattform, aber sie beherrscht den größten Teil des Container-Marktes. CoreOS rkt, sprich rocket, ist bekannt für seine Sicherheit mit Unterstützung für SELinux und Trusted Platform Management. Red Hat (jetzt im Besitz von IBM) kaufte CoreOS und integrierte dessen Funktionalität in seine OpenShift-Architektur. Rkt ist jetzt ein archiviertes Projekt der Cloud Native Computing Foundation.

Andere wichtige Containerplattformen sind LXD, das von Canonical (und seiner Ubuntu-Linux-Version) stammt, und OpenVZ, die älteste der System-Container-Plattformen, die ursprünglich von Virtuozzo entwickelt wurde. OpenVZ kombiniert die geringe Größe und hohe Geschwindigkeit von Standard-Containern mit der zusätzlichen Sicherheit einer abstrahierten Betriebssystemschicht.

Docker spielte auch eine führende Rolle in einer Initiative zur Standardisierung von Container-Paketierung und -Vertrieb: die Open Container Initiative, die gegründet wurde, um ein gemeinsames Containerformat und eine Laufzeitumgebung zu fördern. Zu den weiteren Mitgliedern gehören über 40 weitere Anbieter aus der Container-Branche, darunter CoreOS, AWS, Intel, Red Hat und Virtuozzo.

Schließlich bieten Windows Server 2019 und Windows 10 direkte Unterstützung für Container mit der Windows-Container-Funktion, die ebenfalls auf der Docker-Technologie basiert.

Docker Unternehmensgeschichte

Docker wurde erstmals im März 2013 unter dem Namen dotCloud als Open-Source-Plattform veröffentlicht. Docker Engine 1.0 folge 2014. Im Jahr 2016 integrierte Docker seine Swarm-Orchestrierung in Version 1.12 in die Docker Engine. Docker verfolgte das Ziel, sein Geschäft mit Container-as-a-Service aufzubauen, doch wurden diese Pläne schließlich durch den Aufstieg von Kubernetes überholt.

Docker Enterprise erschien im März 2017, und das Unternehmen spendete sein Container-Laufzeitprogramm containerd an die Cloud Native Computing Foundation.

Im November 2019 übernahm Mirantis die Docker-Produkte und das geistige Eigentum rund um Docker Engine – Enterprise, Docker Trusted Registry, Docker Universal Control Plane und Docker CLI sowie das kommerzielle Produkt Docker Swarm. Mirantis hatte zunächst angedeutet, sich auf Kubernetes zu konzentrieren und den Support für Docker Swarm einzustellen. Später bekräftigte Mirantis jedoch seine Absicht, das Produkt zu unterstützen und neue Funktionen dafür zu entwickeln. Docker Inc. konzentriert sich nun auf Docker Desktop und Docker Hub.

Diese Definition wurde zuletzt im August 2022 aktualisiert

Erfahren Sie mehr über Containervirtualisierung

ComputerWeekly.de
Close