Compare Container Citizen - Linux und Windows Container im Vergleich

Compare Container Citizen - Linux und Windows Container im Vergleich

Cloud native Softwareentwicklung ohne die Containerplattform Docker? – Undenkbar! Neben den etablierten Linux Containern versuchen auch die Windows-Container ihren Weg zu finden. Wir wagen den Vergleich und prüfen, ob Windows Container schon zu den “First-Class-Citizens“ zählen.

Was sind Container?

Als Container-Image wird ein eigenständiges, ausführbares Softwarepaket bezeichnet, dass alle seine Abhängigkeiten, mit Ausnahme des Betriebssystems, bereits mitbringt. Wird ein Image instanziiert, so wird ein Container erzeugt, der entsprechend der enthaltenen Software arbeitet. Ein Image kann beliebig oft instanziiert und damit beliebig viele Container erzeugt werden.

Der wesentliche Vorteil von Containern ist die Abstraktion vom Betriebssystem ohne das Einfügen eines viel langsameren Hypervisors wie bspw. bei Hyper-V oder VMWare. Durch die Portabilität und geringe Größe können schnell Containerinstanzen erzeugt werden und so große Cloud-Native-Anwendungen mit vielen Microservices entsprechend skalieren.

Unterstützung von Linux und Windows Containern bei AWS und Azure

Die folgende Grafik zeigt verschiedene Dienste bei AWS und Azure. Hierbei wurde geprüft, ob die Dienste Windows (links), Linux (rechts) oder beide Container (Mitte) unterstützen. Zusätzlich floss ein, ob die Dienste manueller Konfiguration und Wartung bedürfen (unten) oder ob es sich um Full Managed Services handelt (oben).

Containerplattform, Docker, AWS, Azure, Linux, Windows, .NET
Vergleich von Linux- und Windows basierten Container-Diensten in Amazon AWS und Microsoft Azure

Eine kurze Einordnung, welche Dienste wir untersucht haben, gibt die folgende Tabelle:

Containerplattform, Dockers, Azure, AWS, Windows, Linux, .NET

Beim Betrachten des Diagrammes fällt sofort auf, dass Windows Container derzeit eher wenig unterstützt werden. Der rechte Bereich (Linux) ist gut gefüllt und der Automatisierungsgrad sehr hoch. In den linken Windows-Quadranten klafft hingegen gähnende Leere. In der Mitte finden sich immerhin einige Hyprid-Entwicklungen. Diese Verteilung ist wenig verwunderlich: Historisch begann alles mit Linux und diese bestehenden Technologien werden nun nach und nach um Windows Container erweitert.

Auch alle neuen Managed Services von Amazon AWS wie Fargate (P) und EKS (O) oder die neuen Services von Microsoft Azure wie AKS (L) und ACS mit DockerCE (M) zielen auf einen höheren Automatisierungsgrad ab. Jedoch wird bei keinem Service eine zusätzliche Unterstützung für Windows Container berücksichtigt.

Windows Container gehören also noch lange nicht zu den „First-Class-Citizens“. Die Entwicklung konzentriert sich erst einmal auf die weitere Automatisierung der bestehenden (Linux-)Technologien. Erst im Anschluss wird eine Bewegung in die Breite zur Unterstützung von Windows erfolgen.

Was sollen .NET Entwickler tun, wenn sie Container brauchen?

Nun stehen die .NET Entwickler ein wenig verlassen und einsam vor der schönen neuen Containerwelt. Welche Wege können sie gehen, um .NET Anwendungen mit Containern zu nutzen?

Windows Container

Microsoft hat es verschlafen, mit seinen Serverprodukten kleine, leichtgewichtige Images anzubieten. Ein Windows Server Core mit 5GB Speicherplatz ist für einen Container keine gute Grundlage. Doch vor ein paar Jahren kam der Nanoserver mit rund 400MB ins Docker-Hub. Die neueste Version (Tag 1709) spart noch einmal 80% Speicherplatz und liegt derzeit bei 99MB. Damit ist der Nanoserver als Container äußerst attraktiv geworden.

Fehlen nur noch die zusätzlichen Dienste. Hier gibt es mit ACS Kubernetes eine Unterstützung für Windows Container und mit Service Fabric sogar einen Managed Service.

.NET Core

Mit .NETCore 2.0 ist der Umfang an Funktionalität deutlich gestiegen. Es wird von 70% des .NET Frameworks gesprochen. Mit .NET Core kann die Anwendung auch in Linux Containern laufen. So gelingt die Entkoppelung von Windows Containern – und alle Dienste aus der oberen rechten Ecke unseres Diagrammes werden nutzbar.

Mit dem Roslyn API Analyzer bietet Microsoft ein zusätzliches Analysetool für .NET Core Projekte. Dabei werden nicht nur die verwendeten APIs auf Aktualität geprüft, sondern auch ein Plattform-Kompatibilitäts-Prüfer mitgeliefert. Jede Funktion wird gemeldet, die unter MacOS oder Linux nicht unterstützt wird. Das erleichtert die Entwicklung für Linux Container und ist sehr hilfreich bei der Migration von bestehenden Anwendungen zu .NET Core.

Serverless ohne Container

Bei Serverless Architektur werden Dienste genutzt, ohne sich um die darunterliegende Infrastruktur zu kümmern. Einige der genannten Dienste sind bereits serverless. Die Entwicklung wird hier noch einen Schritt weitergehen: Statt Microservices in Container zu verpacken, kann der C#-Code direkt in Azure Functions oder AWS Lambdas entwickelt/deployt werden. Beide Mechanismen bieten fast grenzenlose Skalierung und sekundengenaue Abrechnung bei Benutzung.

Auch wenn die Containerangebote für Linux sehr umfänglich sind, gibt es auch für Windows Container bereits einige Möglichkeiten. Ein detaillierter Vergleich fällt aber weiterhin ganz klar zu Gunsten von Linux aus. Und überall dort, wo die Windows Container Unterstützung noch nicht ausreichend ist, gibt es mit .NET Core und serverless Ansätzen auch heute schon interessante Alternativen.


Über den Autor des Beitrags:

Thomas Zühlke

Leave a reply

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.