Was ist Docker?
Bevor wir mit der Einführung in Docker-Container beginnen, stellen wir Ihnen vor, wie unser Team Anwendungen entwickelt und bereitstellt. Wir beschreiben auch einige der Herausforderungen, denen unsere Teams gegenüberstehen.
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. Zunächst entwickelt und testet das Entwicklungsteam die Software in einer Entwicklungsumgebung. Als Nächstes wird die Software in einer QS-Umgebung (Quality Assurance) bereitgestellt, gefolgt von der Vorproduktion und anschließend einer endgültigen Produktionsumgebung.
Der Softwareentwicklungsprozess hat 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 sowohl die installierte Software als auch die konfigurierte Hardware in jedem identisch ist. Wir müssen auch Aspekte wie Netzwerkzugriff, Datenspeicherung und Sicherheit pro Umgebung auf konsistente und leicht reproduzierbare Weise konfigurieren.
Kontinuität bei der Softwarebereitstellung
Die Bereitstellung von Anwendungen in unseren Umgebungen muss konsistent sein. 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 von anderen Anwendungen isoliert sein, die auf derselben Hardware ausgeführt werden. Wir möchten mehr als eine Anwendung pro Server ausführen, um Ressourcen optimal zu nutzen, ohne einander zu gefährden.
Anwendungsübertragbarkeit
Die Anwendungsportabilität ist aus mehreren Gründen entscheidend. In einer Hostingumgebung kann ein Fehler auftreten, oder wir müssen unsere Anwendung skalieren. 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 wir uns die Docker-Features ansehen, die bei der Lösung dieser Herausforderungen helfen, besprechen wir einige Konzepte und betrachten einen kurzen Überblick über die Docker-Architektur.
Was ist ein Container?
Ein Container ist eine isolierte Umgebung, die es uns ermöglicht, Softwarepakete zu erstellen und auszuführen. Diese Softwarepakete umfassen den Code und alle Abhängigkeiten zum Ausführen von Anwendungen in jeder Computerumgebung. Wir nennen diese Pakete Container-Images.
Das Containerimage wird zur Einheit, die wir zur Verteilung unserer Anwendungen verwenden.
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.
Mit manchen Pfeilen wird die Kommunikation zwischen dem Docker-Server, ausgeführten Containern sowie gespeicherten Container-Images 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
Es gibt mehrere Objekte, die Sie erstellen und konfigurieren, um Ihre Containerbereitstellungen zu unterstützen. Zu diesen Objekten gehören Netzwerke, Speichervolumes, Plug-Ins und andere Dienstobjekte. In diesem Modul werden nicht alle diese Objekte erwähnt, aber es empfiehlt sich, zu beachten, dass es sich bei diesen Objekten um Elemente handelt, die wir 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.