Docker und C#: Containerisierung von .NET-Anwendungen von Grund auf

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Docker und C#: Containerisierung von .NET-Anwendungen



In der modernen Softwareentwicklung ist die Containerisierung zum De-facto-Standard für das Erstellen, Testen und Bereitstellen von Anwendungen geworden. Docker ermöglicht es, Ihre C#-Anwendung zusammen mit all ihren Abhängigkeiten in einer isolierten Umgebung – einem Container – zu verpacken. Dies garantiert, dass die Anwendung auf jeder Maschine gleich funktioniert: vom Entwickler-Laptop bis zum Production-Server in der Cloud.



In diesem Artikel werden wir im Detail besprechen, wie man .NET-Anwendungen mit Docker containerisiert. Sie erfahren, wie Sie effiziente Dockerfiles erstellen, Multi-Stage-Builds verwenden, mit docker-compose für Multi-Container-Anwendungen arbeiten und Best Practices befolgen.



Was ist Docker und warum braucht ein C#-Entwickler es?



Docker ist eine Plattform zum Entwickeln, Ausliefern und Ausführen von Anwendungen in Containern. Ein Container ist ein leichtgewichtiges, autarkes, ausführbares Paket, das alles enthält, was zum Ausführen der Anwendung benötigt wird: Code, Laufzeitumgebung (Runtime), Systemtools, Bibliotheken und Einstellungen.



Für einen C#-Entwickler bietet Docker die folgenden Vorteile:

  • Umgebungsisolierung – keine Notwendigkeit mehr, die Umgebung auf jeder Maschine einzurichten. Alle Abhängigkeiten werden im Image festgehalten.
  • Vereinheitlichung – die Anwendung funktioniert auf Windows, Linux und macOS gleich.
  • Skalierbarkeit – mehrere Instanzen der Anwendung können einfach gestartet werden, um die Last zu bewältigen.
  • CI/CD-Integration – Container sind ideal für automatisierte Build- und Deployment-Pipelines.
  • Microservices-Architektur – jeder Dienst kann in einen eigenen Container verpackt werden.


Es ist wichtig zu beachten, dass .NET Core (und die neueren .NET 5/6/7/8) plattformübergreifend sind und hervorragend in Linux-Containern funktionieren, die der Standard für Docker sind. .NET Framework-Anwendungen benötigen Windows-Container, was gewisse Einschränkungen mit sich bringt.



Erstellen eines Dockerfiles für eine .NET-Anwendung



Das wichtigste Artefakt für die Containerisierung ist die Datei Dockerfile. Sie enthält Anweisungen zum Erstellen des Images Ihrer Anwendung. Betrachten wir ein Beispiel für eine typische ASP.NET Core Web API.



Erstellen Sie eine Datei Dockerfile im Stammverzeichnis Ihres Projekts:



# Stufe 1: Anwendung erstellenFROM mcr.microsoft.com/dotnet/sdk:8.0 AS buildWORKDIR /src

# Projektdatei kopieren und Abhängigkeiten wiederherstellenCOPY ["MyApp/MyApp.csproj", "MyApp/"]RUN dotnet restore "MyApp/MyApp.csproj"

# Gesamten Quellcode kopieren und Anwendung erstellenCOPY . .WORKDIR "/src/MyApp"RUN dotnet build "MyApp.csproj" -c Release -o /app/build

# Stufe 2: Anwendung veröffentlichenFROM build AS publishRUN dotnet publish "MyApp.csproj" -c Release -o /app/publish /p:UseAppHost=false

# Stufe 3: Finales Image für die AusführungFROM mcr.microsoft.com/dotnet/aspnet:8.0 AS finalWORKDIR /appEXPOSE 80EXPOSE 443

# Veröffentlichte Dateien aus der publish-Stufe kopierenCOPY --from=publish /app/publish .

# Aus Sicherheitsgründen einen Benutzer ohne Root-Rechte festlegenUSER app

ENTRYPOINT ["dotnet", "MyApp.dll"]


Erklärung der Anweisungen:

  • FROM ... AS build – wir verwenden das SDK-Image für den Build. Dies ist die "Bau"-Stufe.
  • WORKDIR – legt das Arbeitsverzeichnis fest.
  • COPY – kopiert Dateien vom Host-System in das Image.
  • RUN dotnet restore – stellt NuGet-Pakete wieder her.
  • RUN dotnet build – kompiliert das Projekt.
  • FROM ... AS publish – zweite Stufe für die Veröffentlichung (oft mit build kombiniert).
  • FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS final – finales Image, das nur die ASP.NET Core Runtime enthält. Es ist viel leichter als das SDK-Image.
  • COPY --from=

Blogs

Buchempfehlungen