Definieren von Containern
Bei der Migration und Virtualisierung verschiedener Workloads bei Contoso kann sich die Möglichkeit ergeben, zum einige Workloads zu containerisieren. Der Windows Server-Administrator beurteilt Container und kennt deren Funktionsweise sowie die möglichen Vorteile der Verwendung von Containern. Zu den Vorteilen können Mobilität, Flexibilität, höhere Effizienz und Serververdichtung gehören. All diese Vorteile ermöglichen optimierte Serverworkloads und einheitliche Entwicklungsumgebungen.
Was sind Container?
Ein Container wird verwendet, um ein Anwendungspaket mit allen zugehörigen Abhängigkeiten zu erstellen und die Anwendung vom Hostbetriebssystem zu abstrahieren, in dem sie ausgeführt wird. Container stellen eine kompakte Entwicklungs- und Laufzeitumgebung zur Verfügung, in der Anwendungen während der Entwicklung problemlos ausgeführt und gemeinsam genutzt werden können. Ein Container ist nicht nur vom Hostbetriebssystem isoliert, sondern auch von anderen Containern. Isolierte Container stellen eine virtuelle Laufzeitumgebung bereit, wodurch auch die Sicherheit und Zuverlässigkeit der Apps verbessert werden kann, die darin ausgeführt werden.
Normalerweise wird eine Softwareanwendung für die Ausführung auf einer unterstützten Prozessor-, Hardware- und Betriebssystemplattform entwickelt. Für Softwareanwendungen ist in der Regel eine zusätzliche Codierung erforderlich, damit die verschiedenen Laufzeitplattformen unterstützt werden. Aufgrund der Vielzahl unterschiedlicher Computersysteme ist eine effizientere Plattform für Softwareentwicklung und -verwaltung erforderlich, um die Portabilität zwischen mehreren Computingumgebungen zu unterstützen. Container ermöglichen eine solche Portabilität.
Vorteile der Verwendung von Containern
Die Verwendung von Containern bietet u. a. folgende Vorteile:
Vielfältige Möglichkeiten der Ausführung. Container können auf verschiedenen Plattformen ausgeführt werden, z.B. Linux-, Windows- und Mac-Betriebssystemen. Sie können auf einer lokalen Arbeitsstation, auf Servern in lokalen Rechenzentren oder in der Cloud gehostet werden.
Isolation: Für eine Anwendung stellt sich ein Container als komplettes Betriebssystem dar. Die CPU-, Arbeitsspeicher-, Speicher- und Netzwerkressourcen werden im Container virtualisiert und sind von der Hostplattform sowie anderen Anwendungen isoliert.
Höhere Effizienz. Container können schnell bereitgestellt, aktualisiert und skaliert werden, um einen flexibleren Entwicklungs-, Test- und Produktionslebenszyklus zu unterstützen. Da sie in Bezug auf die jeweils genutzten Ressourcen effizienter sind, ist der Speicherbedarf geringer, sodass die Serverdichte erhöht werden kann.
Einheitliche Entwicklungsumgebung. Entwickler verwenden Container als einheitliche und vorhersehbare Entwicklungsumgebung, die verschiedene Entwicklungssprachen wie Java, .NET, Python und Node.js unterstützt. Entwickler wissen, dass der Container unabhängig davon, wo die Anwendung bereitgestellt wird, sicherstellt, dass die Anwendung wie beabsichtigt ausgeführt wird.
Funktionsweise von Containern
Der Prozessor eines normalen Windows-Computers verfügt über zwei verschiedene Modi: einen Kernelmodus und einen Benutzermodus. Zentrale Betriebssystemkomponenten und die meisten Gerätetreiber werden im Kernelmodus ausgeführt, während Anwendungen im Benutzermodus ausgeführt werden.
Wenn Sie die Containertechnologie auf einem Computer installieren, erstellt jeder Container ein isoliertes, kompaktes Silo, das für die Ausführung einer App im Hostbetriebssystem verwendet wird. Ein Container nutzt einen Großteil des Hostbetriebssystemkernels, um Zugriff auf das Dateisystem und die Registrierung zu erhalten.
Jeder Container verfügt über eine eigene Kopie der Benutzermodussystemdateien, die von anderen Containern und der Benutzermodusumgebung des jeweiligen Hosts isoliert sind. Die Möglichkeit, den Benutzermodus zu isolieren, wird durch ein Containerbasisimage ermöglicht, das die Benutzermodussystemdateien umfasst, die zur Unterstützung eines App-Pakets benötigt werden. Containerbasisimagevorlagen stellen eine grundlegende Ebene von Betriebssystemdiensten bereit, die von der containerisierten App verwendet, aber von der Kernelmodusebene des Hosts nicht bereitgestellt (oder eingeschränkt) werden.
Die Ebene, in der Anwendungs- und Codeänderungen vorgenommen werden, befindet sich ganz oben in diesen vordefinierten Ebenen des Betriebssystem-Containerbasisimages. Diese Basisbetriebssystemebenen werden getrennt von den Containerebenen entwickelt und aktualisiert, die aktiv für Anwendungs- oder Codeänderungen verwendet werden. Basisebenen werden ohne Aktualisierung in die lokale Arbeitsumgebung abgerufen. Anschließend wird die Verarbeitung in Containerebenen gestartet, die in den Basisebenen ausgeführt werden. Dies ermöglicht kleinere, kompaktere und leichter portierbare Entwicklungsumgebungen.
Wenn Sie ein eigenes Containerimage zum Hosten Ihrer Anwendung erstellen, nutzen Sie zunächst ein Betriebssystemimage auf Containerbasis oder ein vordefiniertes Containerimage, das die benötigten Abhängigkeiten aufweist. Auf diesen Ebenen erstellen Sie Ihre eigenen Ebenen mit der Anwendung, die Sie in einem Container ausführen möchten. Jeder Vorgang zum Erstellen des Containerimages basiert auf dem letzten. Dadurch wird die Imagegröße erhöht, zudem wird ermöglicht, dass Sie das Betriebssystem, das Framework, die Abhängigkeiten und die Anwendungsebenen bequem trennen können.
Container und Microservices
Microservicesanwendungen werden als cloudnativer Architekturansatz definiert, bei dem eine einzelne Anwendung aus vielen lose gekoppelten und unabhängig verfügbaren kleineren Komponenten oder Diensten besteht. Jede dieser kleineren Komponenten bzw. jeder kleinere der Dienste kann durch einen Container dargestellt werden. Container implementieren jedoch nicht unbedingt eine Microservicesarchitektur.
Ein Container kann eine monolithische Anwendung hosten, aber er wurde nicht für diesen Zweck konzipiert. Standardmäßig gehen Docker (oder eine andere Containerruntime) sowie der Containerorchestrator davon aus, dass ein Container immer sicher gelöscht/entfernt werden kann, und ein anderer Container kann bei Bedarf einfach seinen Platz einnehmen. Wenn Sie auf einem virtuellen Computer eine Anwendung zum Schreiben auf den VM-Datenträger konfigurieren, können Sie den virtuellen Computer sicher beenden und starten, und die Daten bleiben auf dem Datenträger erhalten – genauso wie der virtuelle Computer sicher gestartet und sein Betrieb fortgesetzt wird. Wenn Sie bei Containern einen Container entfernen und einen anderen an seiner Stelle platzieren, sind nur die vorhandenen Ebenen dieses Containerimages vorhanden. In einer Microservicesumgebung sollte dies kein Problem darstellen, wenn der Zustand und die Daten persistent sind.
Sie können einen Container zwar wie einen virtuellen Computer ausführen und verwalten, es wird jedoch empfohlen, die Methoden der Trennung von Zustand und Daten anzuwenden und sicherzustellen, dass Ihr Container gelöscht werden kann. Dadurch können Sie andere Methoden wie DevOps nutzen.
In der Praxis sollten Sie keine Daten oder Zustände innerhalb des Containerimages und dessen Ebenen speichern. Sie sollten externen persistenten Speicher verwenden, der es jeder Containerinstanz ermöglicht, darauf zuzugreifen.