Neu in .NET 7.0 [15]: Docker-Deployment mit .NET CLI ohne Dockerfile

Ein neues NuGet-Paket kümmert sich um die passende Docker-Konfiguration für containerisierte .NET-Anwendungen.

In Pocket speichern vorlesen Druckansicht 1 Kommentar lesen

(Bild: Da Da Diamond/Shutterstock.com)

Lesezeit: 1 Min.
Von
  • Dr. Holger Schwichtenberg

Wer den Aufwand vermeiden möchte, ein richtig konfiguriertes Dockerfile zu schreiben, kann in .NET 7.0 Docker-Container direkt per .NET CLI (dotnet/dotnet.exe) erstellen.

Der Dotnet-Doktor – Holger Schwichtenberg

Dr. Holger Schwichtenberg ist technischer Leiter des Expertennetzwerks www.IT-Visions.de, das mit 53 renommierten Experten zahlreiche mittlere und große Unternehmen durch Beratungen und Schulungen sowie bei der Softwareentwicklung unterstützt. Durch seine Auftritte auf zahlreichen nationalen und internationalen Fachkonferenzen sowie mehr als 90 Fachbücher und mehr als 1500 Fachartikel gehört Holger Schwichtenberg zu den bekanntesten Experten für .NET und Webtechniken in Deutschland.

Dazu hat Microsoft das neue NuGet-Paket Microsoft.NET.Build.Containers veröffentlicht, das man in Verbindung mit dem bestehenden .NET CLI-Befehl dotnet publish verwenden kann.

Folgendes PowerShell-Skript mit .NET CLI-Befehlen zeigt die Abfolge der wenigen Kommandozeilenbefehle vom Anlegen eines neuen .NET-Projekts (in diesem Fall eine Blazor Server-Anwendung) und Veränderung des Codes in der Startseite (um zu beweisen, dass die Anwendung wirklich im Container läuft) über das Docker-Deployment bis zum Aufruf des im Linux-Container laufenden Webservers plus Start des Browsers.

# Projekt anlegen (hier: ASP.NET Core Blazor Server)
dotnet new blazorserver -n BSContainer

# In den Ordner wechseln
cd .\BSContainer\

# Programmcode in Startseite austauschen mit Informationen über 
# Umgebung, .NET- und OS-Version sowie Prozess
$indexpage = @'
@page "/"
<PageTitle>Index</PageTitle>
<h1>Hallo iX-Leser*in,</h1>
<p>diese Blazor Server App läuft  
@if (System.Environment.GetEnvironmentVariable
  ("DOTNET_RUNNING_IN_CONTAINER")=="true")
{ <text><b>im Container </b></text> }
else
{ <text>nicht im Container </text> }
mit
@System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription 
auf @System.Runtime.InteropServices.RuntimeInformation.OSDescription!
</p>
<p>Prozess: 
@System.Diagnostics.Process.GetCurrentProcess().ProcessName<br>
Prozessidentität: 
@System.Environment.UserDomainName\@System.Environment.UserName</p>
'@
$indexpage | Set-Content "pages/index.razor"

# Container-Build-Paket hinzufügen
dotnet add package Microsoft.NET.Build.Containers

# Veröffentlichen als Container
dotnet publish --os linux --arch x64 -c Release\
  -p:PublishProfile=DefaultContainer

# Start des Containers (in getrennten Prozess, 
# weil sonst dieser hier blockiert ist)
Start-Process powershell  {
  docker run -it --rm -p 5000:80 bscontainer:1.0.0 }

# optionaler Aufruf des Browsers zur Kontrolle
Start-Process "http://localhost:5000" 

Das neue NuGet-Paket stellt das PublishProfile "DefaultContainer" bereit, welches das entsprechende Basisimage (hier "mcr.microsoft.com/dotnet/aspnet:7.0") wählt und konfiguriert. Docker muss installiert sein und der Zielcontainer läuft automatisch auf Linux x64.

Das PowerShell-Fenster zeigt die Ausgaben des im Container laufenden Webservers mit ASP.NET Core Blazor Server und das Browserfenster greift darauf zu.

(rme)