Was ist Docker?

Abgeschlossen

Bevor wir mit der Einführung in Docker-Container beginnen, stellen wir Ihnen vor, wie unser Team Anwendungen entwickelt und bereitstellt. Zudem werden einige Herausforderungen beschrieben, denen sich unsere Teams stellen mussten.

Bei der Entwicklung und Verwaltung von Anwendungen ist in unserem Unternehmen üblicherweise mindestens ein Team beteiligt. Es gibt ein Entwicklungsteam, das die Software erstellt, und ein Betriebsteam, das für die Bereitstellung dieser Anwendungen zuständig ist. Das Betriebsteam ist auch für die Verwaltung der Infrastruktur verantwortlich, in der die Anwendung gehostet wird.

Nehmen wir an, Sie sollen ein Portal zur Auftragsverfolgung für die verschiedenen Outlets des Unternehmens entwickeln. Während der Entwicklungs- und Veröffentlichungsphase der Anwendung wird diese in mehreren Umgebungen gehostet. Zuerst entwickelt und testet das Entwicklungsteam die Software in einer Entwicklungsumgebung. Danach wird die Software in einer Qualitätssicherungsumgebung bereitgestellt, danach in einer Präproduktionsumgebung und zuletzt in einer Produktionsumgebung.

In diesem Szenario gibt es mehrere Herausforderungen, die wir berücksichtigen müssen:

  • Verwalten von Hostingumgebungen

    Die Software und Hardware der unterschiedlichen Umgebungen müssen verwaltet werden. Wir müssen sicherstellen, dass die installierte Software und die konfigurierte Hardware jeweils identisch sind. Wir müssen auch den Netzwerkzugriff, die Datenspeicherung und die Sicherheit pro Umgebung auf konsistente und einfach reproduzierbare Weise konfigurieren.

  • Kontinuität bei der Softwarebereitstellung

    Die Bereitstellung von Anwendungen in unseren Umgebungen muss einheitlich erfolgen. Jedes Bereitstellungspaket muss alle Systempakete, Binärdateien, Bibliotheken, Konfigurationsdateien und andere Komponenten enthalten, die für die volle Funktionsfähigkeit der Anwendung sorgen. Wir müssen auch sicherstellen, dass alle diese Abhängigkeiten den Softwareversionen und der Architektur entsprechen.

  • Effiziente Hardwarenutzung

    Jede bereitgestellte Anwendung muss so ausgeführt werden, dass sie von anderen Anwendungen isoliert ist, die auf derselben Hardware ausgeführt werden. Wir möchten mehr als eine Anwendung pro Server ausführen, um Ressourcen optimal und ohne Beeinträchtigungen zu nutzen.

  • Anwendungsportabilität

    Die Anwendungsportabilität ist aus mehreren Gründen entscheidend. In einer Hostingumgebung tritt möglicherweise ein Fehler auf, oder wir müssen unsere Anwendung horizontal hochskalieren. In beiden Fällen muss unsere Software möglicherweise in einer neuen Umgebung erneut bereitgestellt werden. Die Software soll auch von einem Host zu einem anderen verschoben werden können, wenn sich die zugrunde liegende Infrastruktur unterscheidet. Dieser Vorgang muss so schnell wie möglich durchgeführt werden, um die Ausfallzeit für unsere Kunden so gering wie möglich zu halten.

Bevor die Docker-Features erläutert werden, mit denen diese Herausforderungen bewältigt werden können, werden einige Konzepte beschrieben und die Docker-Architektur erläutert.

Was ist ein Container?

Ein Container ist eine lose isolierte Umgebung, in der Sie Softwarepakete erstellen und ausführen können. Diese Softwarepakete enthalten den Code und alle Abhängigkeiten, um Anwendungen schnell und zuverlässig in jeder Computingumgebung auszuführen. Diese Pakete werden als Containerimages bezeichnet.

Das Containerimage wird dazu verwendet, unsere Anwendungen zu verteilen.

Was ist Softwarecontainerisierung?

Bei der Softwarecontainerisierung handelt es sich um eine Virtualisierungsmethode für Betriebssysteme, mit der Container ohne Verwendung eines virtuellen Computers (VM) bereitgestellt und ausgeführt werden können. Container können auf physischer Hardware, in der Cloud, auf VMs und auf mehreren Betriebssystemen ausgeführt werden.

Was ist Docker?

Docker ist eine Containerisierungsplattform, die zum Entwickeln, Versenden und Ausführen von Containern verwendet wird. Docker verwendet keinen Hypervisor, und Sie können Docker auf Ihrem Desktop- oder Laptopcomputer ausführen, wenn Sie Anwendungen entwickeln und testen. Die Desktopversion von Docker unterstützt Linux, Windows und macOS. Für Produktionssysteme ist Docker für Serverumgebungen verfügbar, darunter viele Varianten von Linux und Microsoft Windows Server 2016 und höher. Viele Clouds (einschließlich Azure) unterstützen Docker.

Docker-Architektur

Die Docker-Plattform besteht aus mehreren Komponenten, mit denen wir unsere containerisierten Anwendungen erstellen, ausführen und verwalten.

Docker-Engine

Die Docker-Engine besteht aus mehreren Komponenten, die als Client-Server-Implementierung konfiguriert werden, bei der der Client und der Server gleichzeitig auf demselben Host ausgeführt werden. Der Client kommuniziert mit dem Server über eine REST-API, die es dem Client ermöglicht, auch mit einer Remoteserverinstanz zu kommunizieren.

Diagramm mit allgemeiner Übersicht über die Docker-Architektur

Mit manchen Pfeilen wird die Kommunikation zwischen dem Docker-Server, Containern, die ausgeführt werden, sowie gespeicherten Containerimages angezeigt. Diese Pfeile geben an, wie der Docker-Server gespeicherte Containerimages lädt und Container, die ausgeführt werden, verwaltet.

Der Docker-Client

Es gibt zwei Alternativen für den Docker-Client: Eine Befehlszeilenanwendung namens docker oder eine Anwendung mit einer grafischen Benutzeroberfläche (GUI) namens Docker Desktop. Sowohl die CLI als auch Docker Desktop arbeiten mit einem Docker-Server zusammen. Die docker-Befehle von CLI oder Docker Desktop verwenden die Docker-REST-API, um Anweisungen an einen lokalen Server oder einen Remoteserver zu senden, und fungiert als primäre Schnittstelle für die Containerverwaltung.

Der Docker-Server

Der Docker-Server ist ein Daemon namens dockerd. Der dockerd-Daemon reagiert auf Clientanforderungen über die Docker-REST-API und kann mit anderen Daemons interagieren. Der Docker-Server ist zudem für die Nachverfolgung des Lebenszyklus unserer Container verantwortlich.

Docker-Objekte

Sie können mehrere Objekte erstellen und konfigurieren, um Ihre Containerbereitstellungen zu unterstützen. Dazu zählen Netzwerke, Speichervolumes, Plug-Ins und andere Dienstobjekte. Diese Objekte werden hier nicht im Detail behandelt. Sie sollten jedoch im Hinterkopf behalten, dass Sie diese Objekte bei Bedarf erstellen und bereitstellen können.

Docker Hub

Docker Hub ist eine SaaS-Lösung (Software-as-a-Service) für die Docker-Containerregistrierung. Bei Docker-Registrierungen handelt es sich um Repositorys, die zum Speichern und Verteilen der erstellten Containerimages verwendet werden. Docker Hub ist die öffentliche Standardregistrierung, die Docker für die Verwaltung von Images verwendet.

Sie können eine private Docker-Registrierung erstellen und verwenden oder eine der vielen verfügbaren Cloudanbieteroptionen nutzen. Beispielsweise können Sie Azure Container Registry zum Speichern von Containerimages verwenden, die in mehreren containerfähigen Azure-Diensten verwendet werden.