Share via


Wann sollte .NET für Docker-Container verwendet werden?

Tipp

Diese Inhalte sind ein Auszug aus dem eBook „.NET Microservices Architecture for Containerized .NET Applications“, verfügbar unter .NET Docs oder als kostenlos herunterladbare PDF-Datei, die offline gelesen werden kann.

.NET Microservices Architecture for Containerized .NET Applications eBook cover thumbnail.

Die Modularität und der schlanke Aufbau von .NET 8 sind ideal für Container. Das Image eines mit .NET 8 bereitgestellten und ausgeführten Containers ist wesentlich kleiner als bei .NET Framework. Um .NET Framework für einen Container verwenden zu können, muss das Image auf dem Windows Server Core-Image basieren, das viel größer ist als die Windows Nano Server- oder Linux-Images, die für .NET 8 verwendet werden.

Darüber hinaus funktioniert .NET 8 plattformübergreifend, sodass Sie Server-Apps mit Linux- oder Windows-Containerimages bereitstellen können. Wenn Sie jedoch das herkömmliche .NET Framework verwenden, können Sie nur auf Windows Server Core basierende Images bereitstellen.

Im Folgenden finden Sie eine ausführlichere Erläuterung der Vorteile von .NET 8.

Plattformübergreifendes Entwickeln und Bereitstellen

Wenn Sie eine Anwendung (Webanwendung oder Dienst) entwickeln möchten, die auf mehreren von Docker unterstützten Plattformen (Linux und Windows) ausgeführt werden kann, ist .NET 8 die richtige Wahl, da .NET Framework nur Windows unterstützt.

.NET 8 unterstützt auch macOS als Entwicklungsplattform. Wenn Sie Container jedoch auf einem Docker-Host bereitstellen, muss der Host (aktuell) auf Linux oder Windows basieren. In einer Entwicklungsumgebung können Sie z.B. eine Linux-VM benutzen, die auf einem Mac ausgeführt wird.

Visual Studio stellt eine integrierte Entwicklungsumgebung (Integrated Development Environment, IDE) für Windows und Mac bereit und unterstützt die Entwicklung auf Docker.

Visual Studio für Mac ist eine IDE, eine Weiterentwicklung von Xamarin Studio, die unter macOS ausgeführt wird und die Docker-basierte Anwendungsentwicklung unterstützt. Entwickler, die auf Mac-Computern arbeiten und eine leistungsfähige IDE benötigen, sollten dieses Tool verwenden.

Sie können außerdem Visual Studio Code unter macOS, Linux und Windows verwenden. Visual Studio Code bietet vollständige Unterstützung für .NET 8, einschließlich IntelliSense und Debuggen. Mit dem schlanken Editor in Visual Studio Code können Sie Container-Apps auf dem Computer entwickeln und hierfür die Docker-CLI und die .NET-CLI nutzen. Sie können außerdem mit den meisten Drittanbieter-Editoren für .NET 8 entwickeln, z. B. mit Sublime, Emacs, vi und dem Open Source-Projekt OmniSharp, das darüber hinaus IntelliSense unterstützt.

Zusätzlich zu den IDEs und Editoren können Sie die .NET-CLI für alle unterstützten Plattformen verwenden.

Verwenden von Containern für neue Projekte (Greenfield-Projekte)

Container werden meist in Verbindung mit einer Microservicearchitektur eingesetzt, obwohl sie auch für Web-Apps oder Dienste mit jedem beliebigen Architekturmuster verwendet werden können. .NET Framework kann auch für Windows-Container verwendet werden. Allerdings ist .NET 8 durch die Modularität und den einfachen Aufbau ideal für Container und Microservicearchitekturen. Das Image eines mit .NET 8 erstellten und bereitgestellten Containers ist wesentlich kleiner als bei .NET Framework.

Erstellen und Bereitstellen von Microservices in Containern

Auf Microservices basierende Anwendungen (ohne Container) lassen sich mithilfe des traditionellen .NET Framework erstellen, indem Sie einfache Prozesse verwenden. Da .NET Framework bereits installiert und von allen Prozesse genutzt wird, sind die Prozesse schnell und einfach zu starten. Wenn Sie jedoch Container verwenden, basiert auch das Image für das traditionelle .NET Framework auf Windows Server Core. Aus diesem Grund ist es zu groß für die Bereitstellung von Microservices in Containern. Teams haben jedoch auch nach Möglichkeiten gesucht, um die Erfahrung für .NET Framework-Benutzer zu verbessern. Kürzlich wurde die Größe der Windows Server Core-Containerimages um >40 % verkleinert.

.NET 8 ist hingegen die beste Wahl, wenn Sie ein an Microservices orientiertes System erstellen, das auf Containern basiert, da .NET 8 sehr schlank ist. Außerdem sind die dazugehörigen Containerimages für entweder Linux oder Windows Nano Server schlank und klein, sodass sich Container leicht und schnell starten lassen.

Ein Microservice soll so klein wie möglich sein: schlank beim Hochfahren, mit einem kleinen Fußabdruck und engen Kontextgrenzen (siehe dazu DDD, Domain-Driven Design), mit der Darstellung eines kleinen Sachbereichs und der Fähigkeit, schnell gestartet und beendet zu werden. Um diese Anforderungen zu erfüllen, sollten Sie kleine und schnell zu instanziierende Containerimages wie das .NET 8-Containerimage verwenden.

Durch eine Microservicearchitektur ist also eine dienstübergreifende Kombination aus Technologien möglich. Dieser Ansatz ermöglicht eine kontinuierliche Migration zu .NET 8 für neue Microservices, die mit anderen Microservices oder Diensten zusammenarbeiten, die mit Node.js, Python, Java, GoLang oder anderen Technologien entwickelt wurden.

Bereitstellen von hoher Dichte in skalierbaren Systemen

Wenn Sie für Ihr containerbasiertes System die bestmögliche Dichte, Granularität und Leistung benötigen, sollten Sie sich für .NET und ASP.NET Core entscheiden. ASP.NET Core ist zehn Mal schneller als ASP.NET in herkömmlichen .NET Framework-Lösungen und ist im Vergleich zu anderen bekannten Branchentechnologien für Microservices (z. B. Java Servlets, Go und Node.js) führend.

Dieser Ansatz ist insbesondere für Microservicearchitekturen relevant, in denen Hunderte von Microservices (Container) ausgeführt werden können. Mit ASP.NET Core-Images unter Linux oder Windows Nano, die auf der .NET-Runtime basieren, können Sie Ihr System mit einer wesentlich geringeren Anzahl von Servern oder virtuellen Computern ausführen und so Kosten für Infrastruktur und das Hosting sparen.