Was Sie über Docker in Windows wissen müssen

Ich verbrachte das Ende der letzten Woche bei Monki Gras, einer Londoner Entwicklerkonferenz, die sich mit dem Handwerk der Softwareentwicklung befasste. Es ist eine faszinierende Veranstaltung, und dieses Jahr ging es darum, wie man Software verpackt.

Kein Wunder, dass viele der Redner über die Rolle von Containern bei der Entwicklung und kontinuierlichen Lieferung sprachen. Es gab jedoch ein allgemeines Missverständnis hinsichtlich der Windows-Unterstützung für Container, die im Allgemeinen als Unterstützung für Docker auf Linux-VMs charakterisiert wurde.

Das stimmt nicht: Windows verfügt über eigene Containertechnologien, die auf Docker aufbauen, ihm jedoch einen einzigartigen Microsoft-Touch verleihen. Dies ist wahrscheinlich die Ursache für die Verwirrung, da Windows 10 Unterstützung für ein Linux-Subsystem hinzufügt und Microsoft ungefähr zur gleichen Zeit Docker-Tools zu Windows Server 2016 hinzufügt. Beide sind Teil des Ansatzes von Microsoft zur Entwicklung von Cloud-nativen Anwendungen, der ein Schlüsselelement der zukünftigen Azure-Plattform ist.

Das Engagement von Microsoft für Container, eine der wichtigsten branchenübergreifenden Entwicklungen der letzten Jahre, sollte nicht überraschen. Container werden am besten als eine Möglichkeit angesehen, ein ganzes Benutzerland von Prozessen und Namespaces zu kapseln, um es von anderen Instanzen zu isolieren, die auf demselben Server ausgeführt werden. Container sind schnell zu einer Schlüsselkomponente von Devops und Implementierungen mit kontinuierlicher Integration geworden. Microsoft hat diese Ansätze intern schnell umgesetzt, und wie immer spiegeln seine Tools wider, wie Redmond Software verwendet und wie Anwendungen erstellt werden.

Container verstehen

Durch die Trennung der von einer Anwendung verwendeten Dienste von den Diensten, die ein Betriebssystem benötigt, sind moderne Container zu einem leistungsstarken Werkzeug zum Packen und Bereitstellen von Anwendungen auf Servern geworden. Container bieten Portabilität zwischen Entwicklungs-, lokalen Rechenzentren sowie privaten, hybriden und öffentlichen Clouds. In einen Container eingeschlossene Anwendungen sind unabhängig vom Host-Betriebssystem und können ohne Änderungen auf einem ähnlichen Container-Host ausgeführt werden.

Das Umschließen einer Anwendung in einen Container bedeutet, dass die Anwendung zusammen mit allen entsprechenden Konfigurationsdateien und Abhängigkeiten einfach bereitgestellt werden kann: Wenn ein Container auf einem Entwicklungscomputer ausgeführt wird oder alle Integrationstests besteht, wird er ohne Änderungen auf einem Server ausgeführt. Sie können einen Container gegen eine neue Version austauschen, ohne das zugrunde liegende Betriebssystem zu beeinflussen, und Sie können einen Container von Server zu Server verschieben, ohne Ihren Code zu beeinflussen. Dies ist der logische Endpunkt eines Devops-Modells, mit dem Sie Infrastruktur und Anwendungen separat bereitstellen und separat verwalten können.

Ursprünglich eine Mainframe-Technologie, waren Container (oder zumindest ähnliche Formen der Namespace- und Prozessisolation) in vielen Unix-Betriebssystemen zu finden, einschließlich Linux und Solaris.

In Windows-Containern

Mit der Veröffentlichung von Windows Server 2016 verfügt Windows nun über eine eigene Containertechnologie. Es basiert auf dem beliebten Open-Source-Docker-Containerdienst, bietet jedoch Unterstützung für die Verwendung der PowerShell-Befehlszeile und für zusätzliche Isolation durch die Kombination der auf dünne Container ausgerichteten Nano Server- und Hyper-V-Container.

Docker bleibt das Herzstück der Container-Strategie von Microsoft. Seine Tools wie Swarm und Machine sind weit verbreitet, und sein Data Center-Produkt kann sowohl Windows- als auch Linux-Container verwalten. Sie können den Docker-Client sogar über die Bash-Shell verwenden, die Teil von Windows 10 ist, und ihn im Windows-Subsystem für Linux installieren. Für diesen Ansatz müssen Sie Zertifikate jonglieren. Daher bevorzugen Sie möglicherweise die Windows-App von Docker als Entwicklungs- und Basisverwaltungstool für Ihre Windows- und Linux-Container.

Windows-Container sind wie viele Windows Server-Funktionen eine Rolle, die entweder über das bekannte Windows-Funktionsdialogfeld oder über PowerShell installiert werden kann. Die Verwendung der PowerShell-Route ist am sinnvollsten, da es ein OneGet PowerShell-Modul gibt, das sowohl die Windows-Containerfunktion als auch Docker installiert. Für den Start ist nur ein Neustart erforderlich. (Sie müssen auch die Hyper-V-Virtualisierung aktivieren, wenn Sie Hyper-V-Container verwenden möchten.)

Die Begeisterung für Windows-Container ist sowohl bei Entwicklern als auch bei Betriebsteams überraschend hoch. Microsoft hat mehr als 1 Million Downloads der Windows-Basisabbilder aus der Docker Hub-Containerbibliothek gemeldet, seit Windows Server 2016 allgemein verfügbar ist.

Erstellen und Bereitstellen von Containern unter Windows

Container sind nicht nur ein Server-Tool. Die Professional- und Enterprise-Versionen von Windows 10 Anniversary Edition unterstützen auch Container. Sie müssen sie im Dialogfeld "Windows-Funktionen" aktivieren. Sobald sie aktiviert sind, können Sie Windows-Container mithilfe von PowerShell auf einem Entwicklungs-PC installieren und verwalten. Da Windows 10 nur Hyper-V-Container unterstützt, müssen Sie auch Hyper-V installieren.

Sobald die Windows-Container aktiviert wurden, müssen Sie die Docker Engine und den Docker-Client herunterladen und installieren sowie die Basisimages installieren, die Sie für Ihre Anwendung konfigurieren müssen.

Das von Microsoft vorgeschlagene Basisimage für neu erstellte Windows-Container ist Nano Server, eine Cloud-fokussierte Serverimplementierung mit geringem Platzbedarf. Nano Server ist als Containerbasis sehr sinnvoll: Es ist klein und schnell, ohne Benutzeroberfläche, daher schnell bereitzustellen und relativ sicher.

Ein wichtiger Hinweis: Obwohl Sie damit Laufzeiten wie Node.js hosten können, soll Nano Server .Net Core-Anwendungen, einschließlich ASP.Net Core, hosten, sodass Sie nicht alle gewohnten .Net-Funktionen erhalten . Es gibt genug Unterschiede zum bekannten Windows Server, sodass es am besten ist, sich von Nano Server gehostete Windows-Container als Tool für neue Anwendungen und nicht als Host für vorhandenen Code vorzustellen.

Diese Unterschiede erklären, warum viele Unternehmen Windows Server Core als Basisimage verwenden. Obwohl die Bereitstellung größer ist und die Bereitstellung länger dauert als die von Nano Server, bietet Windows Server Core Unterstützung für aktuelle Windows SDKs und eine vollständige .NET-Implementierung. Es ist viel einfacher, vorhandenen Code schnell in Server Core zu verschieben, sodass Sie, wie Taylor Brown, Lead Program Manager für Windows Server und Hyper-V-Container, dies nennt, von vorhandenen Servern in Container "heben und verschieben" können. wieder einsetzbar, wo immer Sie wollen. Sobald sich die Anwendung in einem Container befindet, können Entwickler sie weiter zerlegen. Verschieben von API-Konnektoren in ihre eigenen Nano Server-basierten Container, um die Anwendungswartung zu vereinfachen.

Die Containerunterstützung wird auf der untersten Ebene in Windows-Tools integriert. Windows-Container sind jetzt ein Bereitstellungsziel für Visual Studio 2017. Sie können Anwendungen als Container erstellen und bereitstellen, der zum Testen bereit ist. Es ist ein wichtiger Schritt, Container mit einem einfachen Mausklick zu entfernen.

Da Windows Azure in Kürze die verschachtelte Virtualisierung unterstützen wird, wird die Möglichkeit, mehr Isolation in der öffentlichen Cloud hinzuzufügen, regulierten Branchen dabei helfen, einen Wechsel sowohl zu Containern als auch in die Cloud zu rechtfertigen.