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.

Lesezeit: 1 Min.
In Pocket speichern
vorlesen Druckansicht Kommentare lesen 1 Beitrag

(Bild: Da Da Diamond/Shutterstock.com)

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 Chief Technology Expert bei MAXIMAGO, die Innovations- und Experience-getriebener Softwareentwicklung, u.a. in hochkritischen sicherheitstechnischen Bereichen, anbietet. Zudem ist er Leiter des Expertennetzwerks www.IT-Visions.de, das mit 38 renommierten Experten zahlreiche mittlere und große Unternehmen durch Beratung und Schulung bei der Entwicklung sowie dem Betrieb von Software unterstützt.

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)