Windows und Container

Gilt für: Windows Server 2022, Windows Server 2019, Windows Server 2016

Bei Containern handelt es sich um eine Technologie zum Verpacken und Ausführen von Windows- und Linux-Anwendungen, die in verschiedenen Umgebungen lokal und in der Cloud eingesetzt werden können. Container stellen eine schlanke, isolierte Umgebung bereit, in der Apps einfacher entwickelt, bereitgestellt und verwaltet werden können. Container werden schnell gestartet und beendet. Sie eignen sich daher ideal für Apps, die sich schnell an einen sich ändernden Bedarf anpassen müssen. Die schlanke Natur von Containern macht sie auch zu einem nützlichen Tool zum Erhöhen der Dichte und Auslastung Ihrer Infrastruktur.

Abbildung, die zeigt, wie Container in der Cloud oder lokal ausgeführt werden können, wobei monolithische Apps oder in nahezu jeder Sprache geschriebene Microservices unterstützt werden.

Eine Roadmap für geplante und aktuell verfügbare Features finden Sie in der Roadmap für Windows Server-Container. Lesen Sie außerdem Ereignisse, um aktuelle Videopräsentationen und Blogbeiträge zu Windows-Containern anzusehen.

Das Microsoft-Containerökosystem

Microsoft bietet eine Reihe von Tools und Plattformen, die Sie beim Entwickeln und Bereitstellen von Apps in Containern unterstützen:

  • Führen Sie Windows-oder Linux-basierte Container unter Windows 10 für Entwicklung und Tests mit Docker Desktop aus. Dabei werden in Windows integrierte Containerfunktionen verwendet. Sie können Container auch nativ unter Windows Server ausführen.

  • Entwickeln, Testen, Veröffentlichen und Bereitstellen von Windows-basierten Containern mithilfe der leistungsfähigen Containerunterstützung in Visual Studio und Visual Studio Code, die Unterstützung für Docker, Docker Compose, Kubernetes, Helm und andere nützliche Technologien umfasst.

  • Veröffentlichen Sie Ihre Apps als Containerimages auf dem öffentlichen DockerHub, damit sie von anderen Benutzern verwendet werden können, oder in einer privaten Azure Container Registry für eigene Entwicklung und Bereitstellung durch Ihre Organisation, indem Sie Push- und Pullvorgänge direkt in Visual Studio und Visual Studio Code durchführen.

  • Stellen Sie Container im richtigen Maßstab in Azure oder anderen Clouds bereit:

    • Pullen Sie Ihre App (Containerimage) aus einer Containerregistrierung, z. B. aus Azure Container Registry, und stellen Sie sie dann im richtigen Maßstab mithilfe eines Orchestrators wie Azure Kubernetes Service (AKS) bereit, und verwalten Sie sie.
    • Azure Kubernetes Service stellt Container auf virtuellen Azure-Computern bereit und verwaltet sie im richtigen Maßstab unabhängig davon, ob es sich um Dutzende, Hunderte oder sogar Tausende von Containern handelt. Die virtuellen Azure-Computer führen entweder ein benutzerdefiniertes Windows Server-Image (wenn Sie eine Windows-basierte App bereitstellen) oder ein benutzerdefiniertes Ubuntu Linux-Image (wenn Sie eine Linux-basierte App bereitstellen) aus.
  • Stellen Sie Container lokal mithilfe von Azure Kubernetes Service in Azure Stack HCI, Azure Stack mit der AKS-Engine oder Azure Stack mit OpenShift bereit. Sie können Kubernetes auch selbst unter Windows Server einrichten (siehe Kubernetes unter Windows). Außerdem arbeiten wir an Unterstützung für die Ausführung von Windows-Containern auf der RedHat OpenShift-Containerplattform.

Funktionsweise von Containern

Ein Container ist ein isoliertes, schlankes Paket zum Ausführen einer Anwendung auf dem Hostbetriebssystem. Container bauen auf dem Kernel des Hostbetriebssystems auf (der als die verborgene Struktur des Betriebssystems betrachtet werden kann), wie in der Abbildung unten dargestellt.

Architekturabbildung, die zeigt, wie Container über dem Kernel ausgeführt werden.

Auch wenn ein Container den Kernel des Hostbetriebssystems ebenfalls verwendet, erhält der Container keinen uneingeschränkten Zugriff darauf. Stattdessen erhält der Container eine isolierte (und in einigen Fällen virtualisierte) Ansicht des Systems. Ein Container kann z.B. auf eine virtualisierte Version des Dateisystems und der Registrierung zugreifen, aber alle Änderungen wirken sich nur auf den Container aus und werden verworfen, wenn er beendet wird. Zum Speichern von Daten kann der Container permanenten Speicher einbinden, z.B. einen Azure-Datenträger oder eine Dateifreigabe (einschließlich Azure Files).

Ein Container basiert auf dem Kernel, aber der Kernel stellt nicht alle APIs und Dienste bereit, die eine App ausführen muss – die meisten dieser Komponenten werden von Systemdateien (Bibliotheken) bereitgestellt, die über dem Kernel im Benutzermodus ausgeführt werden. Da ein Container von der Benutzermodusumgebung des Hosts isoliert ist, benötigt der Container seine eigene Kopie dieser Benutzermodus-Systemdateien, die in ein als Basisimage bezeichnetes Paket gepackt werden. Das Basisimage dient als grundlegende Ebene, auf der Ihr Container erstellt wird, und stellt Betriebssystemdienste für ihn bereit, die nicht vom Kernel bereitgestellt werden. Wir werden Containerimages später ausführlicher erläutern.

Container im Vergleich zu virtuellen Computern

Im Gegensatz zu einem Container führt ein virtueller Computer (VM) ein vollständiges Betriebssystem (einschließlich seines eigenen Kernels) aus, wie diese Abbildung zeigt.

Architekturabbildung, die zeigt, wie VMs ein vollständiges Betriebssystem neben dem Hostbetriebssystem ausführen.

Container und virtuelle Computer haben jeweils einen eigenen Verwendungszweck: In der Tat verwenden viele Implementierungen von Containern virtuelle Computer als Hostbetriebssystem, anstatt direkt auf der Hardware ausgeführt zu werden, insbesondere wenn Container in der Cloud ausgeführt werden.

Weitere Informationen zu den Ähnlichkeiten und Unterschieden dieser sich ergänzenden Technologien finden Sie unter Container im Vergleich zu virtuellen Computern.

Containerimages

Alle Container werden aus Containerimages erstellt. Ein Containerimage ist eine Sammlung von Dateien, die in einem Stapel von Schichten organisiert sind. Es befindet sich auf Ihrem lokalen Computer oder in einer Remotecontainerregistrierung. Das Containerimage besteht aus den Benutzermodus-Betriebssystemdateien, die zur Unterstützung Ihrer App, aller Laufzeiten und Abhängigkeiten Ihrer App erforderlich sind, sowie aus anderen Konfigurationsdateien, die Ihre App für die ordnungsgemäße Ausführung benötigt.

Microsoft bietet mehrere Images (als Basisimages bezeichnet), die Sie als Ausgangspunkt für das Erstellen eines eigenen Containerimages verwenden können:

  • Windows: Enthält den vollständigen Satz der Windows-APIs und Systemdienste (ausgenommen Serverrollen).
  • Windows Server: Enthält den vollständigen Satz der Windows-APIs und Systemdienste.
  • Windows Server Core: Ein kleineres Image, das eine Teilmenge der Windows Server-APIs enthält (nämlich die vollständige Version von .NET Framework). Sie enthält auch die meisten, aber nicht alle Serverrollen (z. B. ist Faxserver nicht enthalten).
  • Nano Server: Das kleinste Windows Server-Image mit Unterstützung für die .NET Core-APIs und einige Serverrollen.

Wie bereits erwähnt, bestehen Containerimages aus einer Reihe von Schichten. Jede Schicht enthält einen Satz von Dateien, die das Containerimage darstellen, wenn Sie überlagert werden. Aufgrund der überlagerten Natur von Containern müssen Sie nicht immer ein Basisimage zum Erstellen eines Windows-Containers als Ziel verwenden. Stattdessen können Sie ein anderes Image als Ziel verwenden, das das gewünschte Framework bereits enthält. Das .NET-Team veröffentlicht z.B. ein .NET Core-Image, das die .NET Core-Laufzeit enthält. Die Benutzer müssen die Installation von .NET Core daher nicht duplizieren – stattdessen können Sie die Schichten dieses Containerimages wiederverwenden. Das .NET Core-Image selbst basiert auf Nano Server.

Weitere Informationen finden Sie unter Containerbasisimages.

Containerbenutzer

Container für Entwickler

Container helfen Entwicklern, Apps mit höherer Qualität schneller zu entwickeln und auszuliefern. Mit Containern können Entwickler ein Containerimage erstellen, das innerhalb von Sekunden identisch in Umgebungen bereitgestellt werden kann. Container fungieren als einfache Methode, um Code für mehrere Teams freizugeben und eine Entwicklungsumgebung zu starten, ohne dass sich dies auf das Hostdateisystem auswirkt.

Container sind portabel und vielseitig einsetzbar, können in jeder Sprache geschriebene Apps ausführen und sind mit jedem Computer kompatibel, auf dem Windows 10 (Version 1607 oder höher) oder Windows Server 2016 oder höher ausgeführt wird. Entwickler können einen Container lokal auf ihrem Laptop oder Desktop erstellen und testen und dann das gleiche Containerimage in der privaten Cloud ihres Unternehmens, einer öffentlichen Cloud oder über einen Dienstanbieter bereitstellen. Die natürliche Agilität von Containern unterstützt moderne Muster für die Entwicklung von Apps in großen, virtualisierten Cloudumgebungen. Der nützlichste Vorteil für Entwickler besteht vielleicht in der Möglichkeit, Ihre Umgebung zu isolieren, sodass Ihre App immer die von Ihnen angegebene Version von Bibliotheken erhält und Konflikte mit Abhängigkeiten vermieden werden.

Container für IT-Experten

Mithilfe von Containern können Administratoren eine Infrastruktur erstellen, die einfacher zu aktualisieren und zu verwalten ist und die Hardwareressourcen besser nutzt. IT-Experten können Container verwenden, um standardisierte Umgebungen für ihre Entwicklungs-, Qualitätssicherungs- und Produktionsteams bereitzustellen. Mithilfe von Containern können Systemadministratoren Unterschiede bei Betriebssysteminstallationen und der zugrunde liegenden Infrastruktur abstrahieren.

Darüber hinaus können Sie auch den interaktiven Modus von Containern verwenden, um in Konflikt stehende Instanzen eines Befehlszeilentools auf demselben System auszuführen.

Containerorchestrierung

Orchestratoren sind beim Einrichten einer containerbasierten Umgebung ein wichtiger Teil der Infrastruktur. Obwohl Sie einige Container manuell mithilfe von Docker und Windows verwalten können, nutzen Apps häufig fünf, zehn oder sogar Hunderte von Containern, für die Orchestratoren eingesetzt werden.

Containerorchestratoren wurden entwickelt, um die Verwaltung von Containern im richtigen Maßstab und in der Produktion zu erleichtern. Orchestratoren stellen Funktionen für Folgendes bereit:

Orchestratoren helfen Ihnen, Container-Apps in großem Umfang heranzuzüchten, was Ihnen Funktionalität für diese Situationen bietet:

  • Bereitstellung im richtigen Maßstab
  • Planung der Workload
  • Systemüberwachung
  • Failover bei einem Knotenausfall
  • Zentrales Hoch- oder Herunterskalieren
  • Netzwerk
  • Dienstermittlung
  • Koordinieren von App-Upgrades
  • Clusterknotenaffinität

Es gibt viele verschiedene Orchestratoren, die Sie mit Windows-Containern verwenden können. Im Folgenden finden Sie die von Microsoft bereitgestellten Optionen:

Testen von Containern unter Windows

Informationen zu den ersten Schritten mit Containern unter Windows Server oder Windows 10 finden Sie in den folgenden Ressourcen:

Hilfe bei der Entscheidung, welche Azure-Dienste für Ihr Szenario geeignet sind, finden Sie unter Azure Container Services und Auswählen, welche Azure-Dienste zum Hosten Ihrer Anwendung verwendet werden sollten.

Ressourcen

So zeigen Sie Ressourcen für die Verwendung von Windows Server-Containern an: