Verwendungszwecke für Docker-Container
Sie wissen bereits, dass Docker viele nützliche Features bietet. Hier werden die Vorteile vorgestellt, die sich durch Docker für Ihre Entwicklungs- und Betriebsteams ergeben. Wir gehen auch einige Szenarios durch, in denen Docker nicht die beste Wahl darstellt.
So können Sie entscheiden, ob Docker für Ihre Containerisierungsstrategie geeignet ist.
Wie bereits erwähnt, hat unser Team bei der Entwicklung und Veröffentlichung unseres Portals zur Auftragsverfolgung einige Herausforderungen bewältigt. Für Folgendes wurde nach einer Lösung gesucht:
- Die einfache Verwaltung der Hostingumgebungen.
- Die Gewährleistung der Kontinuität bei der Softwarebereitstellung
- Die effiziente Nutzung der Serverhardware
- Die Portabilität unserer Anwendungen
Docker ist eine Lösung für diese Probleme. Nun werfen wir einen Blick auf die bereits vorgestellten Vorteile.
Docker-Vorteile
Wenn Sie Docker verwenden, können Sie die Vorteile der Containerisierung direkt nutzen.
Effiziente Hardwarenutzung
Container können ohne VM ausgeführt werden. Der Container hängt wie zuvor erläutert vom Kernel des Hosts ab, um Funktionen wie das Dateisystem, die Netzwerkverwaltung, die Prozessplanung und die Speicherverwaltung nutzen zu können.
Aus dem Vergleich wird deutlich, dass für eine VM ein Betriebssystem installiert sein muss, damit die in der VM ausgeführten Anwendungen die Kernelfunktionen nutzen können. Das Betriebssystem der VM benötigt zudem Festplattenspeicher, Arbeitsspeicher und CPU-Zeit. Durch das Entfernen der VM und der zusätzlichen Betriebssystemanforderungen können Sie Ressourcen auf dem Host freigeben und diese für die Ausführung weiterer Container verwenden.
Containerisolation
Docker-Container bieten Sicherheitsfunktionen, um mehrere Container gleichzeitig auf demselben Host auszuführen, ohne sich dabei gegenseitig zu beeinträchtigen. Wie Sie bereits gelernt haben, können Sie sowohl die Datenspeicherung als auch die Netzwerkkonfiguration einrichten, um die Container zu isolieren oder einen Datenaustausch und Konnektivität zwischen bestimmten Containern zu ermöglichen.
Vergleichen wir nun diese Funktion mit der Verwendung von VMs.
Angenommen, Sie verfügen über einen physischen Host, auf dem zwei VMs ausgeführt werden. Außerdem haben Sie drei Anwendungen, die Sie isoliert voneinander ausführen möchten. Sie beschließen, die erste Anwendung auf VM1 und die zweite auf VM2 bereitzustellen, um die beiden Anwendungen voneinander zu trennen. Wenn Sie sich nun für die Installation der dritten Anwendung entscheiden, müssen Sie eine weitere VM installieren, um dieses Muster fortzusetzen.
Anwendungsportabilität
Container können fast überall ausgeführt werden – auf Desktops, physischen Servern, virtuellen Computern und in der Cloud. Diese Laufzeitkompatibilität macht es einfach, containerisierte Anwendungen zwischen unterschiedlichen Umgebungen zu verschieben.
Dank des kompakten Formats von Containern können diese schneller gestartet und heruntergefahren werden als VMs. Aufgrund dessen lassen sich eine erneute Bereitstellung und andere Bereitstellungsszenarios, z. B. das Hoch- und Herunterskalieren, reibungslos und schnell umsetzen.
Anwendungsbereitstellung
In Docker ist der Container die Einheit, mit der Anwendungen verteilt werden. Auf diese Weise wird sichergestellt, dass sowohl Entwickler- als auch Betriebsteams ein standardisiertes Containerformat verwenden. So können sich die Entwickler auf die Softwareentwicklung und das Betriebsteam auf die Bereitstellung und Verwaltung der Software konzentrieren.
Der Container kann in jedem Schritt des Bereitstellungssystems verwendet werden, sobald das Entwicklungsteam einen Build der Anwendung veröffentlicht. Container eignen sich ideal für Continuous Integration und ermöglichen eine schnellere Bereitstellung von neu erstellter Software in der Produktionsumgebung.
Verwaltung von Hostumgebungen
Sie konfigurieren die Umgebung Ihrer Anwendung intern für den Container. Durch diese Eigenständigkeit erreicht das Betriebsteam die erforderliche Flexibilität, um die Anwendungsumgebung noch besser zu verwalten. Das Team ist in der Lage, Betriebssystemupdates zu überwachen, Sicherheitspatches einmalig anzuwenden und ggf. ein Rollout des aktualisierten Containers durchzuführen.
Außerdem kann das Team festlegen, welche Anwendungen installiert, aktualisiert und entfernt werden sollen, ohne dabei andere Container zu beeinträchtigen. Jeder Container ist isoliert und verfügt über eine begrenzte Ressourcenmenge, die zugewiesen wird und von anderen Containern getrennt ist.
Cloudbereitstellungen
Bei Docker-Containern handelt es sich um die Standardcontainerarchitektur, die von den Azure-Containerisierungsdiensten verwendet und auch auf zahlreichen anderen Cloudplattformen unterstützt wird.
Beispielsweise können Sie Docker-Container in Azure Container-Instanzen, Azure App-Diensten und Azure Kubernetes-Diensten bereitstellen. Jede dieser Optionen bietet Ihnen unterschiedliche Features und Möglichkeiten.
Mit Azure Container Instances können Sie sich zum Beispiel auf die Entwicklung und Erstellung Ihrer Anwendungen konzentrieren, ohne sich um die Verwaltung einer Infrastruktur kümmern zu müssen. Wenn Sie viele Container orchestrieren möchten, können Sie mit Azure Kubernetes Services ganz einfach umfangreiche Containerumgebungen bereitstellen und verwalten.
Wann sind Docker-Container nicht geeignet?
Docker-Container bieten viele Vorteile, aber denken Sie daran, dass Container möglicherweise nicht alle Ihre Anforderungen erfüllen. Daher sollten Sie einige Aspekte beachten.
Sicherheit und Virtualisierung
Container bieten die Möglichkeit, Inhalte zu isolieren. Allerdings teilen sich Container einen einzelnen Kernel des Hostbetriebssystems, der somit einen zentralen Angriffspunkt bietet.
Windows-Hosts bieten ein zusätzliches Isolationsmodell, mit dem eine speziell erstellte VM verwendet werden kann, um den Container auf Hypervisor-Ebene zu isolieren. Dieser Modus wird als Hyper-V-Isolationsmodus bezeichnet und fügt eine weitere Sicherheitsebene zwischen Containern und Containerhost hinzu.
Darüber hinaus müssen auch Konfigurationsanforderungen für z. B. Speicher und Netzwerke einbezogen werden, um wirklich alle Sicherheitsaspekte zu berücksichtigen. Beispielsweise verwenden alle Container standardmäßig das Bridgenetzwerk und können über die IP-Adresse aufeinander zugreifen.
Fazit: Die Containerisierung ist nicht für alle Anwendungen geeignet. In manchen Fällen kann die Verwendung einer VM durchaus sinnvoller sein.
Dienstüberwachung
Die Verwaltung der Anwendungen und Container ist komplizierter als bei herkömmlichen VM-Bereitstellungen. Es gibt Protokollierungsfeatures, die uns über den Zustand der ausgeführten Container informieren. Ausführlichere Informationen zu Diensten innerhalb des Containers sind jedoch schwieriger zu überwachen.
Aus diesem Grund gibt es in Docker zum Beispiel den Befehl docker stats
. Mit diesem Befehl werden Informationen zum Container zurückgegeben, wie z. B. prozentuale CPU-Nutzung, prozentuale Speichernutzung, E/A-Schreibvorgänge auf Datenträgern, gesendete und empfangene Netzwerkdaten sowie zugeordnete Prozess-IDs. Diese Informationen können als sofortiger Datenstrom verwendet werden, allerdings erfolgt keine Aggregation, da die Daten nicht gespeichert werden. Für eine hilfreiche Datenerfassung über einen längeren Zeitraum hinweg müssen Sie eine entsprechende Drittanbietersoftware installieren.