Docker und C#: Containerisierung von Anwendungen von A bis Z

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#: Vollständiger Leitfaden zur Containerisierung von .NET-Anwendungen



Die Containerisierung hat sich zum De-facto-Standard für die Bereitstellung moderner Anwendungen entwickelt. Wenn Sie in C# (.NET) entwickeln, ermöglicht Ihnen Docker, Ihre Anwendung zusammen mit allen Abhängigkeiten in einen leichten, isolierten Container zu packen. In diesem Artikel gehen wir den Weg von der Erstellung eines einfachen Dockerfile bis zur Veröffentlichung und dem Start eines fertigen Images. Sie erfahren, wie Sie eine C#-Anwendung containerisieren, die Image-Größe optimieren und Best Practices anwenden.



1. Grundlagen von Docker für .NET-Entwickler



Docker ist eine Plattform für die Entwicklung, Bereitstellung und Ausführung von Anwendungen in Containern. Ein Container ist eine standardisierte Softwareeinheit, die den Code und alle seine Abhängigkeiten enthält. Im Gegensatz zu virtuellen Maschinen nutzen Container den gemeinsamen Kernel des Betriebssystems, was sie schneller und leichter macht.



Für C# (.NET) ist Docker besonders nützlich, da es das Problem "bei mir funktioniert es" löst – Sie garantieren, dass sich die Anwendung auf dem Entwicklerrechner, dem Testserver und in der Produktion gleich verhält. Die Hauptkomponenten sind:



  • Docker Engine – die Laufzeitumgebung für Container
  • Dockerfile – eine Textdatei mit Anweisungen zum Erstellen des Images
  • Image – eine unveränderliche Vorlage zum Erstellen von Containern
  • Container – eine ausgeführte Instanz eines Images


Installieren Sie Docker Desktop für Windows/Mac oder Docker Engine für Linux. Überprüfen Sie nach der Installation die Funktion mit dem Befehl:



docker --version


2. Erstellen eines Dockerfile für eine C# (.NET)-Anwendung



Beginnen wir mit einer einfachen ASP.NET Core Web API-Anwendung. Erstellen Sie ein neues Projekt:



dotnet new webapi -n MyDockerAppcd MyDockerApp


Erstellen Sie nun eine Datei Dockerfile (ohne Erweiterung) im Stammverzeichnis des Projekts. Hier ist eine Basisversion mit einem mehrstufigen Build (multi-stage build):



# Stufe 1: Erstellen der AnwendungFROM mcr.microsoft.com/dotnet/sdk:8.0 AS buildWORKDIR /src

# Kopieren der csproj-Datei und Wiederherstellen der AbhängigkeitenCOPY ["MyDockerApp.csproj", "."]RUN dotnet restore

# Kopieren des restlichen Codes und Erstellen des ProjektsCOPY . .RUN dotnet publish -c Release -o /app/publish

# Stufe 2: Erstellen eines minimalen Images für die AusführungFROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtimeWORKDIR /appEXPOSE 80EXPOSE 443

# Kopieren der erstellten Anwendung aus der ersten StufeCOPY --from=build /app/publish .

# EinstiegspunktENTRYPOINT ["dotnet", "MyDockerApp.dll"]


Erklärung der wichtigsten Anweisungen:

  • FROM – legt das Basis-Image fest (SDK für den Build, ASP.NET für die Ausführung)
  • WORKDIR – legt das Arbeitsverzeichnis fest
  • COPY – kopiert Dateien aus dem Build-Kontext in das Image
  • RUN dotnet restore – stellt NuGet-Pakete wieder her
  • RUN dotnet publish – kompiliert und veröffentlicht die Anwendung
  • EXPOSE – gibt die Ports an, die der Container abhören wird
  • ENTRYPOINT – Befehl, der beim Start des Containers ausgeführt wird


Der mehrstufige Build ist für C# entscheidend: Das endgültige Image enthält nur die Runtime und Ihre Anwendung, ohne SDK und Quellcode. Dadurch wird die Image-Größe von ~1,5 GB auf ~200 MB reduziert.



3. Erstellen und Starten des Containers



Erstellen Sie das Docker-Image:



docker build -t my-dotnet-app:latest .


Das Flag -t legt das Tag fest (Name:Version). Der Punkt am Ende bedeutet das aktuelle Verzeichnis als Build-Kontext.



Starten Sie den Container:



docker run -d -p 8080:80 --name my-app my-dotnet-app:latest


Parameter:

  • -d – Start im Hintergrundmodus (detached)
  • -p 8080:80 – Portweiterleitung: Host-Port 8080

Blogs

Buchempfehlungen