Neu in .NET 7.0 [16]: Anpassen des Docker-Deployments mit .NET CLI
Verschiedene Optionen für dotnet publish erlauben individuelle Anpassungen der ohne Dockerfile mit .NET CLI angelegten Docker-Deployments.
- Dr. Holger Schwichtenberg
Im vorherigen Teil dieser .NET-7.0-Serie wurde die Erweiterung von dotnet publish
besprochen, mit der sich direkt Docker-Container aus .NET-Projekten erstellen lassen.
Dazu genügen die folgenden zwei Befehle, wenn der aktuelle Konsolenpfad ein .NET-Projekt ist:
# 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
Das dabei automatisch verwendete Basisimage ("mcr.microsoft.com/dotnet/aspnet:7.0") basiert auf Debian. Mit der Option -p:ContainerBaseImage
lässt sich ein anderes Image wie beispielsweise Alpine wählen:
dotnet publish --os linux --arch x64 -c Release
-p:PublishProfile=DefaultContainer
-p:ContainerBaseImage=mcr.microsoft.com/dotnet/aspnet:7.0-alpine
Eine Liste aller Docker-Basisimages von Microsoft mit ASP.NET Core Runtime findet sich auf Docker Hub.
Mit .NET 8.0 erscheint die nächste Long-Time-Support-Version. Am 21. November 2023 bietet die von Heise und www.IT-Visions.de präsentierte Online-Konferenz betterCode() .NET 8.0 das Rüstzeug, sich einen grundlegenden Überblick zu .NET 8.0 zu verschaffen. Die Expertenvorträge zeigen die Neuerungen in .NET 8.0, ASP.NET Core 8.0, Blazor 8.0, .NET MAUI, C# 12.0 und mehr. Vier ganztägige Workshops vermitteln Hands-on-Wissen.
Mit der Option -p:ContainerImageName
lässt sich auch der Name des entstehenden Docker-Image ändern. Standardmäßig wird jeweils nur der Name des .NET-Projekts übernommen.
dotnet publish --os linux --arch x64 -c Release
-p:PublishProfile=DefaultContainer
-p:ContainerBaseImage=mcr.microsoft.com/dotnet/aspnet:7.0-alpine
-p:ContainerImageName=MeinBlazorImage
Erläuterungen zum Einsatz weiterer Optionen, um beispielsweise eine andere Ziel-Registry (-p:ContainerRegistry
) oder einen anderen Port (-p:ContainerPort
) einzustellen, sind in der Dokumentation auf GitHub beschrieben.
(map)