
Wenn ich mit Linux-Ingenieuren spreche und ihnen von den Problemen des Kubernetes-Clusters unter Windows erzähle, sehen sie mich sehr misstrauisch an. Einige glauben nicht einmal, dass
dies legitim ist . Container unter Windows sind nicht so verbreitet und gefragt wie unter Linux. Ich denke jedoch, dass es sich lohnt, über dieses Thema zu sprechen, wenn man nur das allgemeine Konzept und die Hauptunterschiede zwischen Windows- und Linux-Containern versteht. Beim ersten Eintrag werde ich mit einem breiten Pinsel über die Leinwand gehen und dann in den folgenden Beiträgen versuchen, mich schrittweise mit den Nuancen zu befassen.
Windows-Container
Nach
diesem Artikel:Viele .NET- oder SQL Server-Entwickler haben sich die Ellbogen gebissen und ihre Linux-Kollegen beneidet.
In der Tat waren Container unter Windows bis vor kurzem exotisch. Und das Schlimmste ist, dass die Dokumentation in Teilen auf jeder Ressource gesammelt werden musste, egal ob es sich um die offizielle Docker- oder Microsoft-Website handelte. Alles wurde in einer Übersichtsform ohne Beschreibung des „Wie und Warum“ dargestellt, und nach ein oder zwei Monaten waren die vorhandenen Informationen veraltet. Und daran ist nichts Übernatürliches - Container und damit verbundene Technologien entwickeln sich mit unrealistischer Geschwindigkeit.
Im Moment ist alles besser mit der Dokumentation und um in die Welt der Container für Windows einzutauchen, lesen Sie einfach die
offizielle Dokumentation von Microsoft und überwachen Sie die Änderungen. Interessanterweise ist die Dokumentation gut geschrieben und in russischer Sprache, obwohl Sie mit einer gründlichen Studie nicht vermeiden können, auf Links zu verschiedenen Ressourcen wie
https://www.docker.com/ oder
https://kubernetes.io/ zu klicken, wo alles in der alten geschrieben ist gutes Englisch.
Die Antworten auf alle Fragen finden Sie jetzt in der offiziellen Dokumentation, aber es gibt einige Nuancen, die im Voraus am besten bekannt sind. Vielleicht ist dies für Sie nützlich und spart Zeit, wenn Sie unter der Microsoft-Flagge in die Containertechnologie eintauchen.
Sie können Windows-Container nicht unter Linux und Windows ausführen *
Die Containertechnologie erleichtert den Umgang mit der Umgebung dank neu konfigurierter Anwendungsabbilder. Es ist wie ein Apple Appstore oder Google Play, aber nur für Ingenieure und Entwickler. Wie in Geschäften für mobile Anwendungen können Sie die Anwendung von Google Play nicht auf iOS stellen. Auf dem Docker-Host mit dem Linux-Betriebssystem können Sie den Container also nicht mit dem Windows-Betriebssystem starten. Das Umgekehrte gilt auch, wenn auch mit einigen "Aber", da der Docker-Host mit Windows Linux weiterhin eine Umgebung zum Ausführen von Containern bieten kann.
Sie können einen Windows-Container auch nicht in einer Windows-Umgebung starten, ohne sicherzustellen, dass die Betriebssystemversionen kompatibel sind. Wenn Sie mit Containern von Microsoft arbeiten, müssen Sie auf die
Kompatibilität der
Windows-Containerversion zurückblicken und dieses Dokument regelmäßig öffnen.
Apropos Versionierung - Microsoft hat mit dem Aufkommen von Containern beschlossen, neue halbjährliche Versionen von Windows halbjährlich zu veröffentlichen. Dies sind Versionen wie Windows Server 1703, 1709, 1803, 1809, 1903. Die Zahlen geben das Jahr und den Monat der Veröffentlichung an und werden 18 Monate lang unterstützt. Die ersten beiden sind bereits in Frieden und am Ende des Dienstes. Darüber hinaus gibt es LTS-Versionen wie Windows Server 2016 und Windows Server 2019.
Versionsliste.Wenn Sie den Container auf einem Host mit einer Version von Windows 1803 gesammelt haben, können Sie diesen Container nur auf Hosts mit Windows 1803 ausführen. Um den Container nicht jedes Mal neu zu erstellen, müssen Sie die LTS-Version von Windows verwenden, die mit moderner Technologieentwicklungsgeschwindigkeit arbeitet nicht immer gerechtfertigt. Oder denken Sie trotzdem an die Versionierung und bauen Sie die Container nach dem Schritt-für-Schritt-Programm für das Halbjahr immer wieder neu zusammen.
Das neueste Tag in Dokerfile für Windows-Containern ist nicht immer vorhanden und im Allgemeinen
veraltet . Auf eine gute Weise müssen Sie immer wissen, was Ihre Windows-Version ist, und die entsprechenden Änderungen an der Docker-Datei vornehmen.
Container sind Teil des Ansatzes "Infrastruktur als Code". Container müssen ständig neu zusammengesetzt werden. Dies ist nicht nur einfach und macht Spaß. Dies ist auch die Hauptmagie, mit der Anwendungen immer an frischer, verbesserter Software arbeiten können. In unserem Fall sind wir jedoch mit einer Einschränkung konfrontiert: Es funktioniert nicht, eine universelle Docker-Datei für alle Windows-Systeme zu führen. Dies muss berücksichtigt werden.
All dies gilt für Container, die im Prozessisolationsmodus ausgeführt werden. Im Hyper-V-Isolationsmodus gilt die Abwärtskompatibilität. Sie können alle Container ausführen, die auf der aktuellen und früheren Version basieren. Im Allgemeinen können Sie mithilfe der Hyper-V-Isolation auch Linux-Container auf einem Windows-Host ausführen. Aber dieser Modus unterstützt bisher weniger Goodies, was nur das Fehlen von Kubernetes ist.
Der Unterschied zwischen Prozessisolation und Hyper-V-Isolation ist das Thema eines separaten Artikels. Im Moment möchte ich nur sagen, dass die Szenarien mit Hyper-V-Isolation für mich nicht ganz offensichtlich sind und Windows standardmäßig die Prozessisolation verwendet.
Ein weiteres Problem besteht darin, die richtige Version der Bilder auf dem Docker Hub zu finden. Einige Bilder fehlen in der Regel für Windows. Beispielsweise finden Sie nicht den offiziellen Build von Nginx, MySQL, Nodejs sowie Hunderten anderer Anwendungen für Windows, und Sie müssen Container selbst sammeln oder Container verwenden, die von Community-Mitgliedern gesammelt und bereitgestellt wurden.
Windows kostet Geld.Vergessen Sie nicht, dass Windows immer noch eine bezahlte Sache ist. Beispielsweise sind halbjährliche Versionen über das Visual Studio-Abonnement oder mit Software Assurance in der bestehenden Microsoft-Lizenzvereinbarung verfügbar.
LinkMicrosoft bietet jedoch eine Vielzahl von Möglichkeiten, um kostenlos bezahlt zu werden. Dies ist das BizSpark-Programm und alle Arten von Testversionen von Windows Server 2019 für 180 Tage und so weiter und so fort.
Windows-Container sind nicht leicht.Es ist allgemein anerkannt, dass Container leichtgewichtig sind, die Wahrheit für Linux jedoch nicht immer für Windows gilt. Die überwiegende Mehrheit der Windows-Container wiegt auf den ersten Blick unerschwinglich viel. Und auf den zweiten Blick ändert sich der Eindruck nicht. Ein einfaches Aspnet: 4.8-Image wiegt beispielsweise etwa 7,5 GB.

Selbst wenn Sie grundlegende Images in einem lokalen Repository hosten, dauert das erste Hochladen des Images auf den Host eine Weile, geschweige denn Remote-Repositorys wie den Docker Hub.
Ja, Sie können den leichtgewichtigen Windows Nano Server in einigen Szenarien verwenden, aber leider gibt es eine Reihe von Einschränkungen. Und noch mehr, Sie sind mit Windows Nano Server nicht unterwegs, wenn Sie für das .Net Framework entwickeln.
Um dies zu verwalten, müssen Sie CMD und Powershell gut kennen.Höchstwahrscheinlich müssen Sie auf Docker-Hosts mit der Kernversion von Windows Server arbeiten. Windows Server verfügt über eine Vielzahl von Remoteverwaltungsfunktionen. Der allgemeine Ansatz besteht darin, dass Sie mit einem Windows Server mit einer grafischen Oberfläche alle Grafik-Snap-Ins mit jedem Kernserver verbinden können.
Dieser Ansatz funktioniert in Containerszenarien nicht, obwohl der Container eine Vollversion von Windows Server enthält. In einem Windows-Container ist es theoretisch möglich, eine Verbindung über WMI herzustellen. Dies ist jedoch nicht so einfach, schon allein deshalb, weil das Host-Betriebssystem diesen Datenverkehr für sich selbst abfängt. Auf einem Host können sich mehrere zehn und Hunderte von Containern befinden. In diesem Fall ist es eine ganze Sache, den Verkehr auf den richtigen Container zu lenken.
CMD und Powershell werden sowohl für die Containerverwaltung als auch für den Host benötigt, auf dem Docker installiert ist. Die Kenntnis dieser Shells ist auch zum Schreiben einer Docker-Datei erforderlich, da alle RUN-Anweisungen in den oben genannten Shells ausgeführt werden.
Es ist ziemlich schwierig, sich an all die langen Powershell-Cmdlets zu erinnern. Dies sind keine prägnanten Bash-Befehle für Sie. Obwohl jetzt die meisten Cmdlets Aliase haben, die für jeden Linux-Ingenieur klar sind. In Powershell können Sie Folgendes verwenden:
rm Remove-Item pwd Get-Location. cat Get-Content touch New-Item etc. # Linux . rm –rf . # Powershell man Get-Help <>
Zu den äußerst nützlichen Dingen gehört, dass Sie mit Powershell einen einfachen
Webserver in einem Container zu Testzwecken ausführen können. In Powershell wird alles als Objekt angezeigt. Wenn Sie ein Befürworter von OOP sind, werden Sie die Vorteile dieser Shell schnell zu schätzen wissen.
Als Abschluss des einleitenden Artikels möchte ich sagen, dass ich mich bewusst nicht mit dem Thema Orchestrierung und Clusterverwaltung befasst habe. Docker unter Windows holt auf und Orchestrierungsanwendungen wie Swarm und Kubernetes unter Windows realisieren ihre Funktionalität nicht vollständig.
Wenn Sie den Docker-Cluster im Moment erhöhen möchten, handelt es sich höchstwahrscheinlich um mehrere Plattformen. Das heißt, Sie müssen einen oder mehrere Linux-Hosts im Cluster haben. Für Kubernetes müssen sich die Masterknoten beispielsweise unter Linux befinden. In Swarm werden Linux-Container beispielsweise benötigt, um einen Balancer unter Nginx zu implementieren oder andere beliebte Clusteranwendungen auszuführen, die nur für Linux verfügbar sind.
PS Die Verwendung von Windows in Containern kann nur in sehr begrenztem Umfang verwendet werden. Diese Szenarien können jedoch äußerst produktiv sein. Das erste, was mir in den Sinn kommt, sind natürlich IIS-Webanwendungen, aber meine Erfahrung zeigt, dass Windows-eigenständige Dienste und einige Dienste wie MSMQ in Containern gut isoliert sind.
UPD Der Artikel weist eine leichte Ungenauigkeit auf: Sie können einen Docker-Cluster nur auf Windows-Hosts erstellen. Darüber hinaus ist dies nicht nur Swarm, sondern auch ein von Micrisoft entwickeltes Produkt zur Orchestrierung des Service Fabric-Clusters
UPD2. Docker-Container für Windows 10 sind nur im Hyper-V-Isolationsmodus verfügbar und verwenden andere Basisimages als Windows Server.