Wie man .NET dockerisiert und deployed

Wie man .NET dockerisiert und deployed

Lukas Mauser - Co-Founder von sliplane.ioLukas Mauser
5 min

Dieses Dockerfile erstellt deine ASP.NET Core App mit dem .NET SDK-Image und lässt den Output dann auf dem kleineren ASP.NET Runtime-Image laufen. Durch den Multi-Stage Build bleibt das finale Image schlank.

Falls du nur zum Kopieren und Einfügen hier bist, hier ist das fertige Dockerfile, das ein Image für deine .NET App erstellt:

Dockerfile
FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
WORKDIR /src

# Erst die Dependencies restoren, damit dieser Layer gecacht bleibt, wenn sich nur der Quellcode ändert
COPY *.csproj ./
RUN dotnet restore

# Einen Release-Build erstellen
COPY . .
RUN dotnet publish -c Release -o /app

FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS runtime
WORKDIR /app
COPY --from=build /app ./

# Ersetz YourApp.dll durch den Namen der DLL deines Projekts
ENV ASPNETCORE_URLS=http://+:8080
EXPOSE 8080
ENTRYPOINT ["dotnet", "YourApp.dll"]

Und hier ist die .dockerignore Datei:

bin
obj
.git
.vs

Um das Image zu bauen und auszuführen, nutze diese Befehle:

docker build -t dotnet-app .
docker run -p 8080:8080 dotnet-app

Nicht nur zum Kopieren und Einfügen hier? Dann lass uns durchgehen, was im Dockerfile passiert!

Das Setup

Für dieses Tutorial gehe ich davon aus, dass du eine ASP.NET Core Web-App oder API hast. Lokal führst du dotnet run aus, was die App in einem Schritt kompiliert und startet. Für Production wollen wir einen kompilierten, optimierten Build und die kleinstmögliche Runtime, also nutzen wir zwei Images: das SDK zum Bauen und die Runtime zum Ausliefern.

Das Dockerfile

Die build Stage nutzt das komplette SDK:

  1. Basis-Image:
  • Nutzt mcr.microsoft.com/dotnet/sdk:9.0, das den Compiler und das gesamte Build-Tooling enthält.
  1. Dependency-Restore:
  • Kopiert erst die .csproj Datei und führt dotnet restore aus. Weil das vor dem restlichen Code passiert, cacht Docker deine NuGet-Packages und restored nur neu, wenn sich die Projektdatei ändert.
  1. Publish-Schritt:
  • Führt dotnet publish -c Release -o /app aus, was einen Release-Build kompiliert und den fertigen Output nach /app schreibt.

Die runtime Stage ist deutlich kleiner:

  1. Runtime-Image:
  • Nutzt mcr.microsoft.com/dotnet/aspnet:9.0, das nur die ASP.NET Runtime enthält, nicht das SDK.
  • Kopiert den Publish-Output aus der Build-Stage.
  • Setzt ASPNETCORE_URLS=http://+:8080, damit die App auf allen Interfaces auf Port 8080 lauscht. Neuere .NET Container-Images nutzen standardmäßig 8080, und die explizite Angabe räumt jeden Zweifel aus.
  • Startet die App mit dotnet YourApp.dll. Ersetz YourApp.dll durch deinen tatsächlichen Assembly-Namen, der deinem Projektnamen entspricht.

Halt Konfiguration wie Connection Strings in Environment-Variablen. ASP.NET Core liest sie out of the box, und doppelte Unterstriche mappen auf verschachtelte Keys, also setzt ConnectionStrings__Default den Default Connection String.

Deployment

Du kannst diesen Docker Container bei jedem Cloud-Anbieter deployen, der Docker unterstützt. Du könntest zum Beispiel Plattformen wie Heroku, DigitalOcean oder AWS ECS nutzen. Da ich Mitgründer von Sliplane bin, zeig ich dir, wie du es dort deployst.

Nach der Anmeldung kannst du einen neuen Service erstellen, indem du dein GitHub Repository auswählst. Behalt dann die Standardeinstellungen bei, füg die Environment-Variablen hinzu, die deine App braucht, und klick auf Deploy.

Sliplane Dashboard

Nach dem Deployment ist deine .NET App unter einer Subdomain von sliplane.app verfügbar, normalerweise ist das einfach dein Service-Name.

Du kannst auch die Logs deiner App sehen, Metriken wie CPU- und Speichernutzung einsehen, persistenten Speicher hinzufügen und vieles mehr. Wann immer du in dein Repository pushst, deployed Sliplane deine App automatisch.

Wenn du Sliplane ausprobieren möchtest, sind die ersten 2 Tage kostenlos! Probier es aus und lass mich wissen, was du davon hältst :)

Deploy .NET in 2 Minuten 🚀

Push dein Repo zu GitHub und lass Sliplane deine .NET App für dich bauen und deployen. Die ersten 2 Tage sind kostenlos.

Nächste Schritte

Wenn du mehrere Projekte in einer Solution hast, pass die Restore- und Publish-Schritte so an, dass sie auf die konkrete .csproj zeigen, die du ausliefern willst. Brauchst du dabei Hilfe oder beim Ausführen von EF Core Migrations beim Deploy? Melde dich gerne!

Bis dann,

Lukas

Willkommen auf deiner Cloud-Plattform

Sliplane macht es einfach, deine Apps in der Cloud zu deployen und zu skalieren. Starte mit einem Container oder deinem Lieblings-Framework und wachse von da aus. Probier es jetzt aus!