Startseite
Themen
Docker
Veröffentlicht: 6. Juni 2024
Mitwirkende: Stephanie Susnjara, Ian Smalley
Docker ist eine Open-Source-Plattform, mit der Entwickler Container erstellen, bereitstellen, ausführen, aktualisieren und verwalten können.
Container sind standardisierte, ausführbare Komponenten, die den Anwendungsquellcode mit den Betriebssystembibliotheken und Abhängigkeiten kombinieren, die für die Ausführung dieses Codes in jeder Umgebung erforderlich sind.
Wenn man von Docker spricht, meint man in der Regel die Docker Engine, die Laufzeitumgebung für die Erstellung und Ausführung von Containern. Docker bezieht sich auch auf Docker, Inc.1, das Unternehmen, das die kommerzielle Version von Docker vertreibt. Es bezieht sich auch auf das Docker Open Source Projekt2, zu dem Docker, Inc. und viele andere Organisationen und Einzelpersonen beitragen.
Container vereinfachen die Entwicklung und Bereitstellung verteilter Anwendungen. Sie werden immer beliebter, da Unternehmen auf cloudnative Entwicklung und hybride Multicloud-Umgebungen umsteigen. Entwickler können Container auch ohne Docker erstellen, indem sie direkt mit den in Linux® und anderen Betriebssystemen integrierten Funktionen arbeiten, aber Docker macht Containerisierung schneller und einfacher. Zum Zeitpunkt der Erstellung dieses Artikels meldete Docker, dass über 20 Millionen Entwickler die Plattform monatlich nutzen3. Wie andere Containerisierungstechnologien, einschließlich Kubernetes, spielt Docker eine entscheidende Rolle in der modernen Softwareentwicklung, insbesondere in der Microservices-Architektur.
Im Gegensatz zum traditionellen monolithischen Ansatz einer großen, eng gekoppelten Anwendung bieten Microservices einen cloudnativen Architekturframework. Dieses Framework komponiert eine einzelne Anwendung aus vielen kleineren, lose gekoppelten und unabhängig voneinander einsetzbaren kleineren Komponenten oder Diensten. Jeder Dienst kann mit Docker containerisiert werden, was die Bereitstellung vereinfacht und es den Teams ermöglicht, neue Versionen einzuführen und Anwendungen nach Bedarf zu skalieren.
Erfahren Sie, wie Unternehmen die Vorteile von KI skalieren können, indem sie die Hybrid Cloud nutzen, um ihre Geschäftsergebnisse zu verbessern.
Container werden durch die in den Linux-Kernel integrierte Prozessisolierung und Virtualisierungsfunktionen ermöglicht. Zu diesen Funktionen gehören Kontrollgruppen (Cgroups) für die Zuweisung von Ressourcen zwischen Prozessen und Namensräume für die Einschränkung des Zugriffs oder der Sichtbarkeit eines Prozesses auf andere Ressourcen oder Bereiche des Systems.
Container ermöglichen mehreren Anwendungskomponenten die gemeinsame Nutzung der Ressourcen einer einzigen Instanz des Host-Betriebssystems. Diese gemeinsame Nutzung ähnelt der Art und Weise, wie ein Hypervisor mehreren Virtual Machines (VMs) die gemeinsame Nutzung der Zentraleinheit (CPU), des Speichers und anderer Ressourcen eines einzelnen Hardwareservers ermöglicht.
Die Containertechnologie bietet alle Funktionen und Vorteile von Virtual Machines (VMs), einschließlich der Isolierung von Anwendungen und kosteneffizienter Skalierbarkeit, sowie weitere bedeutende Vorteile:
Unternehmen, die Container verwenden, berichten von vielen weiteren Vorteilen, wie z. B. einer verbesserten App-Qualität, einer schnelleren Reaktion auf Marktveränderungen und mehr.
Docker ist mit einem Marktanteil von 82,84 % das am weitesten verbreitete Tool zur Containerisierung.4 Docker ist heute so beliebt, dass die Begriffe „Docker“ und „Container“ synonym verwendet werden. Allerdings waren die ersten Container-Technologien schon Jahre – sogar Jahrzehnte5 – verfügbar, bevor Docker 2013 öffentlich als Open Source veröffentlicht wurde.
Vor allem wurde 2008 LinuXContainers (LXC) in den Linux-Kernel implementiert, wodurch die Virtualisierung für eine einzelne Linux-Instanz vollständig möglich wurde. Während LXC auch heute noch verwendet wird, sind neuere Linux-Kernel-Technologien verfügbar. Ubuntu, ein modernes Open-Source-Linux-Betriebssystem, bietet diese Funktion ebenfalls. Mit Docker können Entwickler über einfache Befehle auf diese nativen Containerisierungsfunktionen zugreifen und sie über eine arbeitssparende Anwendungsprogrammierschnittstelle (API) automatisieren.
Die Verwendung von Docker gegenüber dem älteren, weniger kompatiblen LXC bietet viele Vorteile.
Während LXC-Container oft auf maschinenspezifische Konfigurationen verweisen, laufen Docker-Container ohne Änderungen auf jedem Desktop, Rechenzentrum oder Cloud Computing.
Mit Docker können Entwickler mehrere Prozesse in einem einzigen Container kombinieren. Diese Flexibilität macht es möglich, eine Anwendung zu erstellen, die auch dann weiterläuft, wenn einer ihrer Bestandteile für ein Update oder eine Reparatur außer Betrieb genommen wird.
Docker kann automatisch einen Container auf der Grundlage des Quellcodes einer Anwendung erstellen.
Docker kann Versionen eines Container-Images verfolgen, auf frühere Versionen zurücksetzen und verfolgen, wer eine Version erstellt hat und wie. Docker kann sogar nur die Deltas (Teilversionen von Softwaremodulen) zwischen einer bestehenden und einer neuen Version hochladen.
Entwickler können auf eine Open-Source-Registry zugreifen, die Tausende von Containern enthält, die von Benutzern bereitgestellt wurden.
Die Containerisierung von Docker funktioniert heute auch mit Microsoft Windows Server und Apple MacOS. Entwickler können Docker-Container auf jedem Betriebssystem ausführen. Alle führenden Cloud-Service-Provider (CSPs), darunter Amazon Web Services (AWS), Microsoft Azure, Google Cloud Services und IBM Cloud®, bieten spezielle Dienste an, die Entwicklern bei der Erstellung, Bereitstellung und Ausführung von mit Docker containerisierten Anwendungen unterstützen.
Docker verwendet eine Client-Server-Architektur. Im Folgenden finden Sie eine Aufschlüsselung der Kernkomponenten, die mit Docker verbunden sind, sowie weitere Docker-Begriffe und -Tools.
Docker-Host: Ein Docker-Host ist eine physische oder virtuelle Maschine, auf der Linux (oder ein anderes Docker-Engine-kompatibles Betriebssystem) ausgeführt wird.
Docker Engine: Docker Engine ist eine Client-/Server-Anwendung, die aus dem Docker Daemon, einer Docker API, die mit dem Daemon interagiert, und einer Befehlszeilenschnittstelle (CLI) besteht, die mit dem Daemon spricht.
Docker Daemon: Docker Daemon ist ein Service, der Docker-Images mit den Befehlen des Clients erstellt und verwaltet. Im Grunde dient Docker Daemon als Kontrollzentrum für die Docker-Implementierung.
Docker-Client: Der Docker-Client stellt die CLI bereit, die auf die Docker-API (eine REST API) zugreift, um mit dem Docker-Daemon über Unix-Sockets oder eine Netzwerkschnittstelle zu kommunizieren. Der Client kann aus der Ferne mit einem Daemon verbunden werden, oder ein Entwickler kann den Daemon und den Client auf demselben Computersystem ausführen.
Docker-Objekte: Docker-Objekte sind Komponenten einer Docker-Bereitstellung, die beim Verpacken und Verteilen von Anwendungen helfen. Dazu gehören Images, Container, Netzwerke, Volumes, Plug-ins und mehr.
Docker-Container: Docker-Container sind Live-Instanzen mit Docker-Images. Während es sich bei Docker-Images um schreibgeschützte Dateien handelt, handelt es sich bei Containern um aktive, kurzlebige, ausführbare Inhalte. Benutzer können mit ihnen interagieren und Administratoren können ihre Einstellungen und Bedingungen über Docker-Befehle anpassen.
Docker-Images: Docker-Images enthalten ausführbaren Anwendungsquellcode sowie alle Tools, Bibliotheken und Abhängigkeiten, die der Anwendungscode als Container ausführen muss. Wenn ein Entwickler das Docker-Image ausführt, wird es zu einer Instanz (oder mehreren Instanzen) des Containers.
Das Erstellen von Docker-Images von Grund auf ist möglich, aber die meisten Entwickler beziehen sie aus allgemeinen Repositorys. Entwickler können mehrere Docker-Images aus einem einzigen Basis-Image erstellen und werden die Gemeinsamkeiten ihres Stacks teilen.
Docker-Images bestehen aus Ebenen und jede Ebene entspricht einer Version des Images. Immer wenn ein Entwickler Änderungen am Image vornimmt, wird eine neue oberste Ebene erstellt und diese oberste Ebene ersetzt die vorherige oberste Ebene als aktuelle Version des Images. Vorherige Ebenen werden für Rollbacks oder zur Wiederverwendung in anderen Projekten gespeichert.
Jedes Mal, wenn ein Container aus einem Docker-Image erstellt wird, wird eine weitere neue Schicht, die Containerschicht, erstellt. Änderungen am Container – wie das Hinzufügen oder Löschen von Dateien – werden in der Containerebene gespeichert, und diese Änderungen existieren nur, solange der Container ausgeführt wird.
Dieser iterative Prozess der Image-Erstellung erhöht die Gesamteffizienz, da mehrere Live-Container-Instanzen von einem einzigen Basis-Image ausgeführt werden können. Dabei verwenden sie einen gemeinsamen Stack.
Docker Build: Docker Build ist ein Befehl mit Tools und Funktionen zum Erstellen von Docker-Images.
Dockerfile: Jeder Docker-Container beginnt mit einer einfachen Textdatei, die Anweisungen enthält, wie das Docker-Container-Image zu erstellen ist. Dockerfile automatisiert den Prozess der Erstellung von Docker-Images. Es ist im Wesentlichen eine Liste von CLI-Anweisungen, die Docker Engine ausführen wird, um das Image zusammenzustellen. Die Liste der Docker-Befehle ist riesig, aber standardisiert: Docker-Vorgänge funktionieren unabhängig von Inhalt, Infrastruktur oder anderen Umgebungsvariablen gleich.
Docker-Dokumentation: Docker-Dokumentation oder Docker-Docs bezieht sich auf die offizielle Docker-Bibliothek mit Ressourcen, Handbüchern und Anleitungen für die Erstellung von containerisierten Anwendungen.
Docker Hub: Docker Hub6 ist das öffentliche Repository von Docker Images und nennt sich selbst die weltweit größte Bibliothek und Community für Container-Images.7 Es enthält über 100.000 Container-Images, die von kommerziellen Softwareanbietern, Open-Source-Projekten und einzelnen Entwicklern stammen. Docker Hub umfasst Images, die von Docker, Inc. erstellt wurden, zertifizierte Images, die zum Docker Trusted Registry gehören, und Tausende weiterer Images.
Alle Benutzer von Docker Hub können ihre Images nach Belieben teilen. Sie können auch vordefinierte Basis-Images aus dem Docker-Dateisystem herunterladen und als Ausgangspunkt für jedes Containerisierungsprojekt verwenden.
Es gibt weitere Image-Repositorys, darunter GitHub.8 GitHub ist ein Repository-Hosting-Service, der für Tools zur Anwendungsentwicklung und als Plattform zur Förderung der Zusammenarbeit und Kommunikation bekannt ist. Benutzer von Docker Hub können ein Repository (Repo) erstellen, das viele Images enthalten kann. Das Repository kann öffentlich oder privat sein und mit GitHub- oder BitBucket-Konten verknüpft werden.
Docker Desktop: Docker Desktop ist eine Anwendung für Mac oder Windows, die Docker Engine, Docker CLI-Client, Docker Compose, Kubernetes und andere enthält. Es bietet auch Zugang zu Docker Hub.
Docker-Registrierung: Eine Docker-Registrierung ist ein skalierbares Open-Source-Speicher- und Verteilungssystem für Docker-Images. Es ermöglicht Entwicklern, Image-Versionen in Repositorys zu verfolgen, indem sie diese zur Identifizierung mit Tags versehen. Diese Nachverfolgung und Identifizierung erfolgt mit Git, einem Tool zur Versionskontrolle.
Docker-Plug-ins: Entwickler verwenden Plug-ins, um die Docker Engine noch funktionaler zu machen. Mehrere Docker-Plugins, die Autorisierung, Volumen und Netzwerk unterstützen, sind im Plugin-System der Docker-Engine enthalten; Plugins von Drittanbietern können ebenfalls geladen werden.
Docker-Erweiterungen: Docker-Erweiterungen ermöglichen Entwicklern die Nutzung von Drittanbieter-Tools in Docker Desktop, um ihre Funktionen zu erweitern. Zu den Erweiterungen für Entwickler-Tools gehören Kubernetes App-Entwicklung, Sicherheit, Observability und mehr.
Docker Compose: Entwickler können Docker Compose verwenden, um Anwendungen mit mehreren Containern zu verwalten, wobei alle Container auf demselben Docker-Host laufen. Docker Compose erstellt eine YAML-Datei (.YML), die angibt, welche Dienste in der Anwendung enthalten sind, und kann Container mit einem einzigen Befehl bereitstellen und ausführen. Da die YAML-Syntax sprachunabhängig ist, können YAML-Dateien in Programmen verwendet werden, die in Java, Python, Ruby und vielen anderen Sprachen geschrieben sind.
Entwickler können Docker Compose auch verwenden, um persistente Volumes für die Speicherung zu definieren, Basisknoten festzulegen und Dienstabhängigkeiten zu dokumentieren und zu konfigurieren.
Wenn nur wenige Container ausgeführt werden, ist die Verwaltung einer Anwendung innerhalb der Docker Engine, der De-facto-Laufzeitumgebung der Branche, ziemlich einfach. Bei Implementierungen mit Tausenden von Containern und Hunderten von Diensten ist es jedoch fast unmöglich, die Lebenszyklen von Containern ohne ein Container-Orchestrierungs-Tool zu überwachen und zu verwalten.
Während Docker sein eigenes Orchestrierungs-Tool enthält (namens Docker Swarm), ist Kubernetes der Industriestandard. Andere beliebte Plattformen zur Container-Orchestrierung sind Apache Mesos und Nomad.
Kubernetes ist eine Open-Source-Container-Orchestrierungsplattform, die von Borg, einem für den internen Gebrauch bei Google entwickelten Projekt, abstammt. Kubernetes wurde 2014 der Öffentlichkeit vorgestellt und plant und automatisiert Aufgaben, die für die Verwaltung von Container-basierten Architekturen unerlässlich sind. Dazu gehören die Bereitstellung von Containern, Updates, die Erkennung von Diensten, die Bereitstellung von Speicherplatz, Load Balancing, Zustandsüberwachung und vieles mehr. Im Jahr 2015 spendete Google Kubernetes der Cloud Native Computing Foundation (CNCF)9, dem anbieterneutralen Open-Source-Zentrum für cloudnatives Computing.
Darüber hinaus ermöglicht das Open-Source-Ökosystem von Tools für Kubernetes, darunter Istio, Knative und Tekton, ermöglicht es Unternehmen, eine hochproduktive Plattform als Service (PaaS) für containerisierte Anwendungen einzusetzen. Dieses Ökosystem bietet auch einen schnelleren Einstieg in Serverless Computing.
Die Open Container Initiative (OCI)10 wurde 2015 gegründet, nachdem Docker die Spezifikation für das Container-Image und den Laufzeitcode runc gespendet hatte. Sie ist ein Projekt der Linux Foundation, das sich für die Schaffung offener Industriestandards für das Container-Image-Format und die Laufzeit einsetzt. Die OCI besteht aus führenden Unternehmen wie Docker, IBM und Red Hat®. Es unterstützt die Innovation und hilft Unternehmen, die Bindung an einen bestimmten Anbieter zu vermeiden.
Während Docker die bekannteste und am häufigsten verwendete Containertechnologie ist, hat sich das breitere Ökosystem auf containerd und andere Alternativen wie LXC, CRI-O, Podman und andere standardisiert. Im Jahr 2017 hat Docker das Projekt „Containerd“ an die CNCF gespendet. Containerd ist eine dem Branchenstandard entsprechende Container-Laufzeitumgebung, die runc verwendet und die zentrale Container-Laufzeitumgebung der Docker Engine ist.
Die Komplexität von Container-Workloads erfordert die Implementierung und Aufrechterhaltung von Sicherheitskontrollen, die Container und die ihnen zugrunde liegende Infrastruktur schützen. Die Sicherheitspraktiken für Docker-Container sind darauf ausgelegt, containerisierte Anwendungen vor Risiken wie Sicherheitsverletzungen, Malware und böswilligen Akteuren zu schützen.
Da Docker-Container voneinander und vom Hostsystem isoliert sind, verfügen sie von Haus aus über ein gewisses Maß an Sicherheit. Diese Isolierung ist jedoch nicht absolut. Die Docker-Sicherheit dreht sich um ein ganzheitliches Null-Trust-Framework, das die Laufzeit, den Aufbau und die Orchestrierung von Containern umfasst.
Der Bedarf an Docker und anderen containerbezogenen Sicherheitsfunktionen hat die Beliebtheit von DevSecOps erhöht. Hierbei handelt es sich um einen Sicherheitsansatz, der die Integration von Sicherheitspraktiken in jeder Phase des Softwareentwicklungszyklus automatisiert – vom ersten Entwurf über die Integration, das Testen und die Bereitstellung bis hin zum Deployment. Zu den Best Practices für die Sicherheit von Docker gehören außerdem Container-Sicherheitstools und -lösungen von Drittanbietern, einschließlich Scannen und Überwachung, die Sicherheitsprobleme erkennen können, bevor sie sich auf die Produktion auswirken.
Die Portabilität von Docker vereinfacht und beschleunigt den Cloud-Migrationsprozess über verschiedene Umgebungen hinweg – ganz gleich, ob Daten, Anwendungen und Workloads von einem lokalen Rechenzentrum in eine cloudbasierte Infrastruktur oder von einer Cloud-Umgebung in eine andere verlagert werden.
Laut Statista verwenden mehr als 85% der großen globalen Unternehmen Microservices für ihre Anwendungsentwicklung.11 Docker vereinfacht die Anwendungsbereitstellung, da jeder Microservice containerisiert und unabhängig skaliert und verwaltet werden kann, sodass Entwickler keine bestimmten Umgebungen konfigurieren und verwalten müssen.
Docker ist ideal für kontinuierliche Integration und kontinuierliche Bereitstellung (CI/CD) Pipelines, da es eine konsistente Umgebung für das Testen und Bereitstellen von Anwendungen bietet und mögliche Fehler während der Bereitstellung reduziert.
Die Kombination von Microservices als Softwareentwicklungsansatz und Docker schafft eine solide Grundlage für DevOps Teams. So können sie agile Praktiken anwenden, um schnell zu iterieren und zu experimentieren, was für die Bereitstellung von Software und Dienstleistungen in der vom Markt geforderten Geschwindigkeit entscheidend ist.
Eine leichtgewichtige Containertechnologie wie Docker macht es einfach, Anwendungen über verschiedene Umgebungen hinweg zu verschieben. Alle großen Cloud-Service-Provider bieten Docker-bezogene Entwicklungs- und Verwaltungsdienste an, die die Ausführung von Docker in Hybrid-Cloud-Umgebungen unterstützen, die On-Premises-, Public Cloud-, Private Cloud- und Edge-Einstellungen vereinen. Docker kann problemlos in einer Multi-Cloud-IT-Infrastruktur bereitgestellt werden. Dies bezieht sich auf Cloud-Dienste von mehr als einem Cloud-Anbieter.
Container as a Service (CaaS) ermöglicht Entwicklern die Verwaltung und Bereitstellung containerisierter Anwendungen und erleichtert so die Ausführung von Docker-Containern in großem Umfang. Alle großen CSPs bieten CaaS als Teil ihres Cloud-Service-Portfolios an, zusammen mit Infrastructure-as-a-Service (IaaS), Software-as-a-Service (SaaS) und so weiter.
Docker beschleunigt die Entwicklung von Künstlicher Intelligenz und Maschinellem Lernen durch eine schnelle, einfache und portable Anwendungsentwicklung, die Innovation und Markteinführung beschleunigt. Außerdem beherbergt Docker Hub Hunderte von AL/ML-Images, die die AL/ML-Entwicklungsteams weiter unterstützen. Im Jahr 2023 brachte DockerAI12 auf den Markt, das Entwicklern eine kontextspezifische, automatisierte Anleitung bietet, wenn sie eine Dockerfile- oder Docker Compose-Datei bearbeiten.
Erfahren Sie, wie Red Hat OpenShift on IBM Cloud Red Hat OpenShift in öffentlichen und hybriden Umgebungen für Schnelligkeit, Marktreaktion, Skalierbarkeit und Zuverlässigkeit einsetzt.
Nutzen Sie IBM Cloud Satellite, um überall einheitliche Cloud-Services zu starten – vor Ort, am Netzwerkrand und in Public-Cloud-Umgebungen.
Bringen Sie Ihre Cloud- und KI-Reise voran. Beginnen Sie mit der Bewertung von IT-Investitionen und der Entwicklung einer offenen, integrierten Grundlage, auf die in digitalen Umgebungen schnell und konsistent zugegriffen werden kann.
Speichern und verteilen Sie Container-Images in einer vollständig verwalteten privaten Registry. Verschieben Sie private Images, um sie bequem im IBM Cloud Kubernetes Service und anderen Laufzeitumgebungen auszuführen.
1 Über Docker (Link befindet sich außerhalb von ibm.com), Docker
2 Open Source Projekte, (Link befindet sich außerhalb von ibm.com), Docker
3 Docker Builds(Link befindet sich außerhalb von ibm.com), Docker
4 Top 5 Containerisierungs-Technologien im Jahr 2024, (Link befindet sich außerhalb von ibm.com), 6sense
5 Eine kurze Geschichte von Containern: Von den 1970er Jahren bis heute, (Link befindet sich außerhalb von ibm.com) Aqua, 10. Januar 2020
6 Docker Hub, (Link befindet sich außerhalb von ibm.com), Docker
7 Überblick über Docker Hub, (Link befindet sich außerhalb von ibm.com), Docker
8 GitHub(Link befindet sich außerhalb von ibm.com)
9 Cloud Native Computing Foundation, (Link befindet sich außerhalb von ibm.com)
10 Open Container Initiative, (Link befindet sich außerhalb von ibm.com)
11 Globale Nutzung von Microservices in Unternehmen 2021, nach Unternehmensgröße, (Link befindet sich außerhalb von ibm.com), Statista, 2023
12 Docker kündigt Docker AI an, das die Produktivität von Entwicklern durch kontextspezifische, automatisierte Anleitungen steigert, (Link befindet sich außerhalb von ibm.com), Docker, 2023