Docker

menu icon

Docker

Docker ist eine Open-Source-Plattform für die Erstellung, Bereitstellung und Verwaltung von containerisierten Anwendungen. Erfahren Sie mehr über Container, wie sie im Vergleich zu VMs aussehen und warum Docker so weit verbreitet ist und verwendet wird.

Was ist Docker?

Docker ist eine Open-Source-Plattform zur Containerisierung. Es ermöglicht Entwicklern, Anwendungen in Container zu verpacken, das sind standardisierte ausführbare Komponenten, die den Quellcode der Anwendung mit den Betriebssystembibliotheken und den Abhängigkeiten kombinieren, die für die Ausführung des Codes in jeder Umgebung erforderlich sind. Container vereinfachen die Bereitstellung verteilter Anwendungen und erfreuen sich zunehmender Beliebtheit, da Unternehmen auf Cloud-native Entwicklung und hybride Multi-Cloud-Umgebungen umsteigen.

Entwickler können Container auch ohne Docker erstellen, aber die Plattform macht die Erstellung, Bereitstellung und Verwaltung von Containern leichter, einfacher und sicherer. Docker ist im Wesentlichen ein Toolkit, das es Entwicklern ermöglicht, Container mit einfachen Befehlen und arbeitssparender Automatisierung über eine einzige API zu erstellen, bereitzustellen, auszuführen, zu aktualisieren und zu beenden.

Docker bezieht sich auch auf Docker, Inc. (Link befindet sich außerhalb von IBM), das Unternehmen, das die kommerzielle Version von Docker verkauft, und auf das Open Source-Projekt Docker (Link befindet sich außerhalb von IBM), 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 geschaffen. Diese Funktionen, die Steuergruppen (Cgroups) für die Ressourcenzuweisung zwischen Prozessen und Namensbereiche (Namespaces) für die Einschränkung des Zugriffs eines Prozesses auf andere Ressourcen oder Bereiche des Systems umfassen, ermöglichen es mehreren Anwendungskomponenten, die Ressourcen einer einzigen Instanz des Host-Betriebssystems gemeinsam zu nutzen. Dies verhält sich ähnlich dazu, wie ein Hypervisor es mehreren virtuelle Maschinen (VMs) ermöglicht, die CPU, den Speicher und andere Ressourcen eines einzelnen Hardwareservers gemeinsam zu nutzen.

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

  • Kompaktheit: Im Gegensatz zu VMs enthalten Container nicht die Nutzlast einer ganzen Betriebssysteminstanz und eines Hypervisors, sondern nur die für die Ausführung des Codes erforderlichen Betriebssystemprozesse und Abhängigkeiten. Containergrößen werden in Megabyte gemessen (im Gegensatz zu Gigabyte bei einigen VMs), nutzen die Hardwarekapazität besser aus und haben schnellere Startzeiten.
  • Höhere Ressourceneffizienz: Mit Containern kann ein Vielfaches an Kopien einer Anwendung auf derselben Hardware ausgeführt werden, als dies mit VMs möglich ist. Dies kann Ihre Cloud-Ausgaben reduzieren.
  • Verbesserte Entwicklerproduktivität: Im Vergleich zu VMs sind Container schneller und einfacher zu implementieren, bereitzustellen und neu zu starten. Dadurch sind sie ideal für die Verwendung von Pipelines für kontinuierliche Integration und kontinuierliche Bereitstellung (CI/CD) und eignen sich besser für Entwicklungsteams, die agile und DevOps-Praktiken anwenden.

Unternehmen, die Container einsetzen, berichten von weiteren Vorteilen wie einer verbesserten Qualität der Anwendungen, einer schnelleren Reaktion auf Marktveränderungen und vielem mehr. Erfahren Sie mehr mit diesem interaktiven Tool:

Laden Sie den vollständigen Bericht herunter: Container im Unternehmen (PDF 1,4 MB)

Warum Docker verwenden?

Docker ist heute so populär, dass die Begriffe „Docker“ und „Container“ synonym verwendet werden. Die ersten Container-Technologien waren jedoch schon seit Jahren oder sogar Jahrzehnten verfügbar (Link befindet sich außerhalb von IBM), bevor Docker 2013 für die Öffentlichkeit freigegeben wurde.

Vor allem wurden 2008 LinuXContainer (LXC) in den Linux-Kernel implementiert, wodurch die Virtualisierung für eine einzelne Linux-Instanz vollständig ermöglicht wurde. Während LXC auch heute noch verwendet wird, gibt es neuere Technologien, die den Linux-Kernel nutzen. Ubuntu, ein modernes, quelloffenes Linux-Betriebssystem, bietet diese Möglichkeit ebenfalls an.

Docker hat die nativen Linux-Containerisierungsfunktionen mit Technologien erweitert, die Folgendes ermöglichen:

  • Verbesserte (und nahtlose) Portabilität: Während LXC-Container oft auf maschinenspezifische Konfigurationen verweisen, können Docker-Container ohne Änderungen in jeder Desktop-, Rechenzentrums- und Cloud-Umgebung ausgeführt werden.
  • Noch kompaktere und präzisere Updates: Mit LXC können mehrere Prozesse in einem einzigen Container zusammengefasst werden. Bei Docker-Containern kann in jedem Container nur ein Prozess laufen. Dadurch ist es möglich, eine Anwendung zu erstellen, die auch dann weiterläuft, wenn einer ihrer Bestandteile für eine Aktualisierung oder Reparatur außer Betrieb genommen wird.
  • Automatisierte Containererstellung: Docker kann automatisch einen Container auf der Grundlage des Quellcodes einer Anwendung erstellen.
  • Versionierung von Containern: Docker kann die Versionen eines Container-Images verfolgen, zu früheren Versionen zurückkehren und nachvollziehen, wer eine Version wie erstellt hat. Es können sogar nur die Abweichungen zwischen einer bestehenden und einer neuen Version hochgeladen werden.
  • Wiederverwendung von Containern: Vorhandene Container können als Basis-Images verwendet werden, quasi als Vorlagen für die Erstellung neuer Container.
  • Gemeinsam genutzte Containerbibliotheken: Entwickler können auf eine Open-Source-Registry zugreifen, die Tausende von Containern enthält, die von Benutzern bereitgestellt wurden.

Heute funktioniert die Docker-Containerisierung auch mit Microsoft Windows Server. Und die meisten Cloud-Anbieter bieten spezielle Dienste an, um Entwickler bei der Erstellung, Auslieferung und Ausführung von mit Docker containerisierten Anwendungen zu unterstützen.

Aus diesen Gründen ist die Akzeptanz von Docker geradezu explodiert und nimmt weiter zu. Derzeit meldet Docker Inc. 11 Millionen Entwickler und 13 Milliarden Downloads von Container-Images pro Monat (Link befindet sich außerhalb von IBM).

Docker-Tools und -Begriffe

Hier sind einige der Tools und ein wenig Terminologie, die Sie bei der Verwendung von Docker kennenlernen werden:

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 der Docker-Image-Erstellung. Dabei handelt es sich im Wesentlichen um eine Liste von Command-line Interface (CLI), die von der Docker Engine ausgeführt werden, um das Image zusammenzustellen.

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 mehreren Instanzen) des Containers.

Es ist zwar möglich, ein Docker-Image von Grund auf neu zu erstellen, aber die meisten Entwickler beziehen es aus allgemeinen Repositories. Mehrere Docker-Images können aus einem einzigen Basis-Image erstellt werden, und sie teilen sich die Gemeinsamkeiten ihres Stacks.

Docker-Images bestehen aus Schichten, wobei jede Schicht einer Version des Images entspricht. 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. 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 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 von einem einzigen Basis-Image aus laufen können und dabei einen gemeinsamen Stack nutzen.

Docker-Container

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

Docker Hub

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

Alle Nutzer von Docker Hub können ihre Images nach Belieben freigeben. Sie können auch vordefinierte Basis-Images aus dem Docker-Dateisystem herunterladen und als Ausgangspunkt für jedes Containerisierungsprojekt verwenden.

Docker Daemon

Docker Daemon ist ein Dienst, der auf Ihrem Betriebssystem läuft, z. B. Microsoft Windows oder Apple MacOS oder iOS. Dieser Dienst erstellt und verwaltet Ihre Docker-Images für Sie unter Verwendung der Befehle des Clients und fungiert als Kontrollzentrum für Ihre Docker-Implementierung.

Docker-Registry

Eine Docker-Registry ist ein skalierbares Open-Source-Speicher- und Verteilungssystem für Docker-Images. Mit der Registry können Sie Bildversionen in Repositories nachverfolgen, indem Sie Tagging zur Identifizierung verwenden. Dies geschieht mit Git, einem Werkzeug zur Versionskontrolle.

Docker-Implementierung und -Orchestrierung

Wenn Sie nur einige wenige Container betreiben, ist es relativ einfach, Ihre Anwendung innerhalb der Docker-Engine zu verwalten, der branchenweit bewährten Laufzeitumgebung. Wenn Ihre Bereitstellung jedoch Tausende von Containern und Hunderte von Diensten umfasst, ist es fast unmöglich, diesen Workflow ohne die Hilfe dieser speziell entwickelten Tools zu verwalten.

Docker Compose

Wenn Sie eine Anwendung aus Prozessen in mehreren Containern erstellen, die sich alle auf demselben Host befinden, können Sie Docker Compose verwenden, um die Architektur der Anwendung zu verwalten. Docker Compose erstellt eine YAML-Datei, die angibt, welche Dienste in der Anwendung enthalten sind, und kann Container mit einem einzigen Befehl bereitstellen und ausführen. Mit Docker Compose können Sie auch persistente Volumes für die Speicherung definieren, Basisknoten festlegen und Dienstabhängigkeiten dokumentieren und konfigurieren.

Kubernetes

Um die Lebenszyklen von Containern in komplexeren Umgebungen zu überwachen und zu verwalten, müssen Sie ein Container-Orchestrierungs-Tool verwenden. Obwohl Docker ein eigenes Orchestrierungstool (Docker Swarm) enthält, entscheiden sich die meisten Entwickler stattdessen für Kubernetes.

Kubernetes ist eine Open-Source-Container-Orchestrierungsplattform, die aus einem für den internen Gebrauch bei Google entwickelten Projekt hervorgegangen ist. Kubernetes plant und automatisiert Aufgaben, die für die Verwaltung von Container-basierten Architekturen unabdingbar sind, wie z. B. die Bereitstellung von Containern, Updates, die Erkennung von Diensten, die Bereitstellung von Speicherplatz, den Lastausgleich, die Zustandsüberwachung und vieles mehr. Darüber hinaus ermöglicht das Open-Source-Ökosystem von Tools für Kubernetes (einschließlich Istio und Knative) Unternehmen die Bereitstellung einer hochproduktiven Platform-as-a-Service (PaaS) für containerisierte Anwendungen und eine schnellere Umstellung auf Serverless Computing.

Einen tieferen Einblick in Kubernetes erhalten Sie in unserem Video „Kubernetes Explained“:

Kubernetes Explained (10:59)

Docker und IBM Cloud

Eine Container-Plattform für Unternehmen bietet Orchestrierung über mehrere öffentliche und private Clouds hinweg, um Ihre Umgebungen zu vereinheitlichen und so die Geschäfts- und Betriebsleistung zu verbessern. Sie ist eine Schlüsselkomponente einer offenen Hybrid-Cloud-Strategie, mit der Sie die Bindung an einen bestimmten Anbieter vermeiden, Workloads überall konsistent aufbauen und ausführen sowie Ihre gesamte IT optimieren und modernisieren können.

Machen Sie den nächsten Schritt:

  • Implementieren Sie hochverfügbare, vollständig verwaltete Kubernetes-Cluster mit Red Hat OpenShift on IBM Cloud, einem verwalteten OpenShift-Service, der die unternehmensweite Skalierung und Sicherheit der IBM Cloud nutzt, um Updates, Skalierung und Bereitstellung zu automatisieren.
  • Bereitstellen und Ausführen von Anwendungen in lokalen, Edge-Computing- und öffentlichen Cloud-Umgebungen von beliebigen Anbietern mit IBM Cloud Satellite, einer verwalteten verteilten Cloud-Lösung
  • Vereinfachen und konsolidieren Sie Ihre Data Lakes durch die nahtlose Bereitstellung von Container-fähigem Unternehmensspeicher in lokalen und öffentlichen Cloud-Umgebungen mit IBMs hybriden Cloud-Speicherlösungen.
  • Vereinfachen Sie mit IBM Cloud Managed Services komplexes Hybrid-IT-Management.

Beginnen Sie noch heute mit einem IBM Cloud-Konto.