Was ist Docker?

6. Juni 2024

Autoren

Stephanie Susnjara

IBM Think Content Contributor

Ian Smalley

Senior Editorial Strategist

Was ist Docker?

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.

Was sind Microservices?

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.

Luftaufnahme einer Autobahn

Bleiben Sie in der Cloud

Abonnieren Sie den wöchentlichen Think-Newsletter und erhalten Sie Tipps von Experten zur Optimierung von Multi-Cloud-Einstellungen in Zeiten von KI.

Wie funktionieren Container?

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:

  • Geringeres Gewicht: Im Gegensatz zu VMs tragen Container nicht die Nutzlast einer ganzen Betriebssysteminstanz und eines Hypervisors. Sie enthalten nur die Betriebssystemprozesse und Abhängigkeiten, die für die Ausführung des Codes erforderlich sind. Die Größe von Containern wird in Megabyte gemessen (im Gegensatz zu Gigabyte bei einigen VMs), nutzt die Hardwarekapazitäten besser aus und hat schnellere Startzeiten.

  • Verbesserte Produktivität: Containerisierte Anwendungen können einmal geschrieben und überall ausgeführt werden. Im Vergleich zu VMs sind Container schneller und einfacher zu installieren, bereitzustellen und neu zu starten.

  • Größere Effizienz: Mit Containern können Entwickler ein Vielfaches an Kopien einer Anwendung auf der gleichen Hardware ausführen, als dies mit VMs möglich ist. Diese Effizienz kann die Cloud-Ausgaben reduzieren.

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.

AI Academy

KI-Bereitschaft mit Hybrid Cloud

Das Programm, das von führenden IBM Experten geleitet wird, soll Führungskräften dabei helfen, das nötige Wissen zu erwerben, um die Prioritäten für KI-Investitionen zu setzen, die zu mehr Wachstum führen.

Warum wird Docker verwendet und warum ist es so beliebt?

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.

Docker im Vergleich zu LXC

Die Verwendung von Docker gegenüber dem älteren, weniger kompatiblen LXC bietet viele Vorteile.

Verbesserte und nahtlose Portierbarkeit von Containern

Während LXC-Container oft auf maschinenspezifische Konfigurationen verweisen, laufen Docker-Container ohne Änderungen auf jedem Desktop, Rechenzentrum oder Cloud Computing.

Noch leichtere und detailliertere Updates

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.

Automatisierte Containererstellung

Docker kann automatisch einen Container auf der Grundlage des Quellcodes einer Anwendung erstellen.

Containerversionierung

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.

Wiederverwendung von Containern

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-Architektur, Begriffe und Tools

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 Bilder 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 skalierbaresOpen-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.

Kubernetes und Containerorchestrierung

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 Bereitstellungen 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.

Docker- und Container-Branchenstandards

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 Abhängigkeit von einem 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.

Docker-Sicherheit

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.

Docker-Anwendungsfälle

Cloud-Migration

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.

Microservices-Architektur (Microservices)

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.

Kontinuierliche Integration und kontinuierliche Bereitstellung (CI/CD)

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.

DevOps

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.

Hybride Multicloud-Bereitstellung

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)

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.

Künstliche Intelligenz/maschinelles Lernen (KI/ML)

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 Docker Docker AI12 auf den Markt, das Entwicklern eine kontextspezifische, automatisierte Anleitung bietet, wenn sie eine Dockerfile- oder Docker Compose-Datei bearbeiten.

Weiterführende Lösungen
IBM Red Hat OpenShift

Red Hat OpenShift on IBM Cloud ist eine vollständig verwaltete OpenShift Container Platform (OCP).

Red Hat OpenShift erkunden
Container-Lösungen

Container-Lösungen führen Container-Workload aus und skalieren sie mit Sicherheit, Open-Source-Innovation und schneller Bereitstellung.

Container erkunden
Cloud-Beratungsleistungen 

Schalten Sie mit IBM Cloud Consulting Services neue Funktionen frei und steigern Sie die geschäftliche Agilität. Entdecken Sie, wie Sie mit Hybrid-Cloud-Strategien und Expertenpartnerschaften gemeinsam Lösungen entwickeln, die digitale Transformation beschleunigen und die Leistung optimieren können.

Cloud-Services
Machen Sie den nächsten Schritt

Modernisieren Sie Ihre Infrastruktur mit den Containerlösungen von IBM. Mit der umfassenden Container-Plattform von IBM können Sie containerisierte Workloads flexibel, sicher und effizient über verschiedene Umgebungen hinweg ausführen, skalieren und verwalten.

Containerlösungen kennenlernen Kostenloses IBM Cloud-Konto erstellen