Was ist Docker?
Docker ist eine Open-Source-Plattform für die Erstellung, Bereitstellung und Verwaltung von Container-Anwendungen
IBM Newsletter abonnieren
Schwarz-blauer Hintergrund
Was ist Docker?

Docker ist eine Open-Source-Plattform, die Entwicklern die Erstellung, Bereitstellung, Ausführung, Aktualisierung und Verwaltung von Containern ermöglicht. Container sind standardisierte ausführbare Komponenten, die den Anwendungsquellcode mit den Betriebssystembibliotheken und den Abhängigkeiten kombinieren, die zur Ausführung des Codes in jeder beliebigen Umgebung erforderlich sind.

Container vereinfachen die Entwicklung und Bereitstellung verteilter Anwendungen. Sie erfreuen sich zunehmender Beliebtheit, da Unternehmen auf cloudnative Entwicklung und hybride Multicloud-Umgebungen umsteigen. Entwickler können Container über die in Linux und anderen Betriebssystemen integrierte Funktionalität auch ohne Docker erstellen. Docker macht die Containierisierung jedoch schneller, einfacher und sicherer. Zum Zeitpunkt der Veröffentlichung des vorliegenden Artikels nutzten laut Docker über 13 Millionen Entwickler diese Plattform (Link befindet sich außerhalb von ibm.com).

Docker bezieht sich dabei auch auf Docker Inc. (Link befindet sich außerhalb von ibm.com), das Unternehmen, das die kommerzielle Version von Docker vertreibt, und auf das Docker-Open-Source-Projekt, zu dem Docker Inc. und viele andere Organisationen und Einzelpersonen beitragen.

Wie Container funktionieren und warum sie so beliebt sind

Container werden durch die in den Linux-Kernel integrierten Funktionen zur Prozessisolierung und Virtualisierung möglich gemacht. Dank dieser Funktionen – wie etwa Steuergruppen (Cgroups) zur Ressourcenzuweisung zwischen Prozessen und Namensräumen (Namespaces) zur Beschränkung des Zugriffs oder der Sichtbarkeit eines Prozesses für andere Ressourcen oder Bereiche des Systems – ist es möglich, dass mehrere Anwendungskomponenten die Ressourcen einer einzelnen Instanz des Host-Betriebssystems gemeinsam nutzen können, ähnlich wie ein Hypervisor es mehreren virtuellen Maschinen (VMs) ermöglicht, die CPU, den Arbeitsspeicher und andere Ressourcen eines einzelnen Hardware-Servers gemeinsam zu nutzen. 

Daher bietet die Containertechnologie alle Funktionen und Vorteile von VMs – einschließlich Anwendungsisolierung, kosteneffizienter Skalierbarkeit und Verfügbarkeit – sowie wichtige zusätzliche Vorteile:

  • Kompaktheit: Im Gegensatz zu VMs müssen Container nicht die Nutzdaten einer gesamten Betriebssysteminstanz und eines Hypervisors bewältigen. Sie enthalten lediglich die für die Ausführung des Codes erforderlichen Betriebssystemprozesse und Abhängigkeiten. Die Größe von Containern wird in Megabyte gemessen (im Gegensatz zu Gigabyte bei einigen VMs), nutzen die Hardwarekapazität besser und haben kürzere Startzeiten. 

  • Höhere Entwicklerproduktivität: Container-Anwendungen müssen nur einmal geschrieben und können dann überall ausgeführt werden. Und im Vergleich zu VMs lassen sich Container schneller und einfacher implementieren, bereitstellen und neu starten. Dadurch sind sie ideal für den Einsatz in Pipelines für kontinuierliche Integration (Continuous Integration) und kontinuierliche Bereitstellung (Continuous Delivery) (CI/CD) und sind besser für Entwicklungsteams geeignet, die Agile- und DevOps-Verfahren anwenden.

  • Höhere Ressourceneffizienz: Mit Containern können Entwickler ein Vielfaches an Kopien einer Anwendung auf derselben Hardware ausführen, als dies mit VMs möglich ist. Dies kann Ihre Ausgaben für die Cloud reduzieren.

Unternehmen, die Container einsetzen, berichten außerdem von weiteren Vorteilen wie z. B. verbesserter Anwendungsqualität, schnellerer Reaktion auf Marktveränderungen und vielem mehr. Erfahren Sie mehr mit diesem interaktiven Tool: 

Vollständigen Bericht herunterladen: Container im Unternehmen (PDF, 1,4 MB)
Warum Docker?

Docker ist heute so populär, dass die Begriffe „Docker“ und „Container“ synonym verwendet werden. Die ersten containerbezogenen Technologien waren jedoch schon Jahre oder sogar Jahrzehnte (Link befindet sich außerhalb von IBM) vorher verfügbar, bevor Docker schließlich im Jahr 2013 der Öffentlichkeit zugänglich gemacht wurde. 

Besonders erwähnenswert ist hier die im Jahr 2008 erfolgte Implementierung von LinuXContainer (LXC) im Linux-Kernel, wodurch die vollständige Virtualisierung für eine einzelne Instanz von Linux möglich wurde. LXC wird auch heute noch verwendet, jedoch gibt es neuere Technologien, die den Linux-Kernel nutzen. Das moderne, quelloffene Linux-Betriebssystem Ubuntu bietet diese Funktionalität ebenfalls. 

Mit Docker können Entwickler anhand einfacher Befehle auf diese nativen Containerisierungsfunktionen zugreifen und sie über eine arbeitssparende Anwendungsprogrammierschnittstelle (API) automatisieren. Im Vergleich zu LXC bietet Docker:

  • Verbesserte und nahtlose Container-Portierbarkeit: Während LXC-Container oft auf maschinenspezifische Konfigurationen verweisen, können Docker-Container ohne jegliche Modifikation auf jedem Desktop, in jedem Rechenzentrum und in jeder Cloud-Umgebung ausgeführt werden. 
  • Noch schlankere und differenziertere Aktualisierungen: Mit LXC können mehrere Prozesse in einem einzigen Container zusammengefasst werden. Dadurch ist es möglich, eine Anwendung zu erstellen, die auch dann weiter ausgeführt werden kann, wenn einer ihrer Bestandteile zwecks Aktualisierung oder Reparatur außer Betrieb genommen wird. 

     

  • Automatische Containererstellung: Docker ist in der Lage, auf der Grundlage des Quellcodes einer Anwendung automatisch einen Container zu erstellen. 

     

  • Versionssteuerung von Containern: Docker hat die Fähigkeit, die Versionen eines Container-Images zu überwachen, Rollbacks auf vorherige Versionen durchzuführen und nachzuvollziehen, wer welche Version wie erstellt hat. Docker ist sogar in der Lage, nur die Unterschiede zwischen einer bestehenden und einer neuen Version hochzuladen. 

     

  • Wiederverwendung von Containern: Vorhandene Container können als Basisimages verwendet werden – sozusagen als Vorlagen für die Erstellung neuer Container. 

     

  • Gemeinsam genutzte Containerbibliotheken: Entwickler können auf eine Open-Source-Registry mit Tausenden von Containern zugreifen, die von anderen Nutzern bereitgestellt wurden. 

Heute funktioniert die Docker-Containerisierung auch mit Microsoft Windows und Apple MacOS. Entwickler können Docker-Container auf jedem beliebigen Betriebssystem ausführen und die meisten führenden Cloud-Anbieter, darunter Amazon Web Services (AWS), Microsoft Azure und IBM Cloud, bieten spezielle Services an, um Entwickler bei der Erstellung, Bereitstellung und Ausführung von mit Docker containerisierten Anwendungen zu unterstützen.

Docker-Tools und -Begriffe

Einige der Tools, Begriffe und Technologien, auf die Entwickler bei der Verwendung von Docker stoßen, sind: 

DockerFile

Jeder Docker-Container beginnt mit einer einfachen Textdatei, die Anweisungen für die Erstellung des Docker-Container-Images enthält. DockerFile automatisiert den Prozess zur Erstellung von Docker-Images. Dabei handelt es sich im Wesentlichen um eine Liste von Command-line Interface (CLI)-Befehlen, die von der Docker Engine ausgeführt werden, um das Image zusammenzustellen. Die Liste von Docker-Befehlen ist äußerst umfangreich, aber dennoch standardisiert: Docker-Operationen funktionieren stets gleich – unabhängig von Inhalt, Infrastruktur oder anderen Umgebungsvariablen. 

Docker-Images

Docker-Images enthalten den ausführbaren Quellcode der Anwendung sowie alle Tools, Bibliotheken und Abhängigkeiten, die der Anwendungscode zur Ausführung als Container benötigt. Wenn Sie das Docker-Image ausführen, wird es zu einer Instanz (oder zu mehreren Instanzen) des Containers. 

Es ist zwar möglich, ein Docker-Image von Grund auf neu zu erstellen, aber die meisten Entwickler beziehen ihre Images aus gängigen Repositories. Aus einem einzigen Basisimage können mehrere Docker-Images erstellt werden, die dann die Gemeinsamkeiten ihres Stacks gemeinsam nutzen. 

Docker-Images bestehen aus mehreren Schichten und jede Schicht entspricht einer Version des Images. Immer wenn ein Entwickler Änderungen am Image vornimmt, wird eine neue oberste Ebene erstellt, die die vorherige oberste Ebene als aktuelle Version des Images ersetzt. Ältere Schichten 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 erstellt, die sogenannte Containerschicht. Änderungen am Container, wie beispielsweise das Hinzufügen oder Löschen von Dateien, werden nur in der Containerschicht gespeichert und existieren nur, solange der Container ausgeführt wird. Dieser iterative Image-Erstellungsprozess ermöglicht eine höhere Gesamteffizienz, da mehrere Live-Container-Instanzen auf der Grundlage eines einzigen Basisimages ausgeführt werden können und in diesem Fall einen gemeinsamen Stack nutzen. 

Docker-Container

Docker-Container sind die aktiven Live-Instanzen von Docker-Images. Während Docker-Images schreibgeschützte Dateien sind, handelt es sich bei Containern um kurzlebige, ausführbare Live-Inhalte. Benutzer können mit ihnen interagieren und Administratoren können ihre Einstellungen und Zustände mit Docker-Befehlen anpassen. 

Docker Hub

Docker Hub (Link befindet sich außerhalb von ibm.com) ist das öffentliche Repository für Docker-Images, das sich selbst als die „weltweit größte Bibliothek und Community für Container-Images“ bezeichnet. Das Repository enthält über 100.000 Container-Images, die von kommerziellen Softwareanbietern, Open-Source-Projekten und einzelnen Entwicklern stammen. Dazu gehören auch Images, die von Docker Inc. erstellt wurden, zertifizierte Images, die zur Docker Trusted Registry gehören, und viele Tausende andere Images. 

Alle Benutzer von Docker Hub können ihre Images nach Belieben freigeben. Sie können außerdem vordefinierte Basisimages aus dem Docker-Dateisystem herunterladen und als Ausgangspunkt für ein beliebiges Containerisierungsprojekt verwenden. 

Es gibt auch andere Image-Repositories, insbesondere GitHub. GitHub ist ein Hosting-Service für Repositories, der besonders für seine Tools zur Anwendungsentwicklung und als Plattform zur Förderung von Zusammenarbeit und Kommunikation bekannt ist. Benutzer von Docker Hub können ein Repository (Repo) erstellen, das zahlreiche Images aufnehmen kann. Das Repository kann öffentlich oder privat sein und kann mit GitHub- oder BitBucket-Konten verknüpft werden. 

Docker Desktop

Docker Desktop (Link befindet sich außerhalb von ibm.com) ist eine Anwendung für Mac oder Windows, die Docker Engine, Docker CLI-Client, Docker Compose, Kubernetes und andere umfasst. Sie ermöglicht außerdem den Zugriff auf Docker Hub. 

Docker Daemon

Docker Daemon ist ein Dienst, der mithilfe der Befehle des Clients Docker-Images erstellt und verwaltet. Im Wesentlichen fungiert Docker Daemon als Kontrollzentrum für Ihre Docker-Implementierung. Der Server, auf dem die Ausführung des Docker Daemon erfolgt, wird als Docker-Host bezeichnet.

Docker Registry

Eine Docker Registry ist ein skalierbares quelloffenes System zur Speicherung und Ausgabe von Docker-Images. Mithilfe der Registry können Sie Image-Versionen in Repositories nachverfolgen, indem Sie Tags zur Identifizierung verwenden. Dies geschieht mit Git, einem Tool zur Versionskontrolle. 

Docker-Bereitstellung und -Orchestrierung

Wenn nur einige wenige Container betrieben werden, ist es relativ einfach, eine Anwendung innerhalb der Docker Engine zu verwalten, dem De-facto-Branchenstandard für Laufzeitumgebungen. Bei Bereitstellungen, die Tausende von Containern und Hunderte von Services umfassen, ist es jedoch nahezu unmöglich, den Workflow ohne die Hilfe von für diesen Zweck speziell entwickelten Tools zu verwalten.

Docker-Plugins

Docker-Plugins (Link befindet sich außerhalb von ibm.com) können verwendet werden, um die Funktionalität von Docker noch weiter zu erhöhen.Das Plugin-System von Docker Engine enthält bereits eine Reihe von Docker-Plugins, es können aber auch Plugins anderer Anbieter geladen werden. 

Docker Compose

Mit Docker Compose können Entwickler Anwendungen mit mehreren Containern verwalten, bei denen alle Container auf demselben Docker-Host ausgeführt werden. Docker Compose erstellt eine YAML-Datei (.yml), die angibt, welche Services in der Anwendung enthalten sind, und kann Container mit nur 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 zahlreichen anderen Sprachen geschrieben wurden. 

Entwickler können Docker Compose auch verwenden, um persistente Datenträger (Volumes) für die Speicherung zu definieren, Basisknoten festzulegen und Serviceabhängigkeiten zu dokumentieren und zu konfigurieren. 

Kubernetes

Zur Überwachung und Verwaltung von Container-Lebenszyklen in komplexeren Umgebungen ist ein Tool für die Containerorchestrierung erforderlich. Obwohl Docker sein eigenes Orchestrierungstool (Docker Swarm) enthält, entscheiden sich die meisten Entwickler jedoch für Kubernetes. 

Kubernetes ist eine Open-Source-Plattform zur Containerorchestrierung, die auf ein Projekt zurückgeht, das ursprünglich von Google zur internen Verwendung entwickelt wurde. Kubernetes plant und automatisiert Aufgaben, die für die Verwaltung von containerbasierten Architekturen unverzichtbar sind, wie z. B. die Bereitstellung von Containern, Updates, die Erkennung von Services, das Einrichten von Speicherplatz, den Lastausgleich, die Zustandsüberwachung und vieles mehr. Darüber hinaus ermöglicht das Open-Source-Ökosystem von Tools für Kubernetes – das u. a. Istio und Knative umfasst – Unternehmen die Bereitstellung einer hochproduktiven Platform-as-a-Service (PaaS) für containerisierte Anwendungen und einen schnelleren Einstieg in serverloses Computing.

Weitere Informationen zu Kubernetes

Weiterführende Lösungen
Red Hat® OpenShift on IBM Cloud

Red Hat OpenShift on IBM Cloud nutzt OpenShift in Public-Cloud- und Hybridumgebungen, um Geschwindigkeit, Marktreaktionsfähigkeit, Skalierbarkeit und Zuverlässigkeit zu gewährleisten.

Red Hat OpenShift on IBM Cloud erkunden
IBM Cloud Satellite®

Mit IBM Cloud Satellite® können Sie konsistente Cloud-Services überall starten – On-Premises, am Edge und in Public-Cloud-Umgebungen.

IBM® Cloud Satellite erkunden
Hybrid-Cloud-Speicherlösungen

Speichern Sie Daten dort, wo es für Anwendungen und Services am sinnvollsten ist – mit den IBM Hybrid-Cloud-Speicherlösungen für On-Premises, Private und Public Clouds.

Hybrid-Cloud-Speicherlösungen erkunden
Cloud Services

Erfahren Sie, wie Ihnen ein Managed Cloud Services-Ansatz dabei helfen kann, mögliche Spannungen zwischen traditionellem IT-Management und einer DevOps-Kultur zu entschärfen.

Cloud-Services erkunden
Ressourcen Container im Unternehmen

Eine neue IBM Studie belegt die zunehmende Verbreitung von Containern und Kubernetes.

Bereitstellung von Modellen auf Kubernetes oder OpenShift mit eigenständigen Containern

Erstellen Sie ein eigenständiges Container-Image zur Bereitstellung von Watson-NLP-Modellen und führen Sie es anschließend auf einem Kubernetes- oder Red Hat OpenShift-Cluster aus

Machen Sie den nächsten Schritt

Eine Container-Plattform für Unternehmen bietet Orchestrierung über mehrere öffentliche und private Clouds hinweg, vereinheitlicht Ihre Umgebungen und verbessert so die geschäftliche und operative Performance. Eine solche Plattform ist eine Schlüsselkomponente einer offenen Hybrid-Cloud-Strategie, mit der Sie die Bindung an einen bestimmten Anbieter vermeiden, Workloads überall konsistent erstellen und ausführen und Ihre gesamte IT optimieren und modernisieren können. Stellen Sie hochverfügbare, vollständig verwaltete Kubernetes-Cluster mit Red Hat OpenShift on IBM Cloud bereit, einem verwalteten OpenShift-Service, der die unternehmensweite Skalierung und Sicherheit von IBM Cloud nutzt, um Aktualisierungen, Skalierungsvorgänge und die Bereitstellung zu automatisieren.

Red Hat® OpenShift on IBM Cloud erkunden