.NET 8.0'daki yenilikler [38]: Dotnet yayınlama yoluyla konteyner dosyası oluşturun

Womanne

Member
.NET 7.0'dan başlayarak zaten kullanabilirsiniz dotnet publish Önce bir Docker dosyası (ek bir metin dosyası) sağlamak zorunda kalmadan bir Docker kapsayıcısı oluşturun.


Duyuru








Dr. Holger Schwichtenberg, 53 tanınmış uzmanıyla danışmanlık, eğitim ve yazılım geliştirme yoluyla çok sayıda orta ve büyük ölçekli şirketi destekleyen www.IT-Visions.de uzman ağının teknik direktörüdür. Çok sayıda ulusal ve uluslararası konferansa katılımı, 90'dan fazla uzmanlık kitabı ve 1.500'den fazla uzmanlık makalesi sayesinde Holger Schwichtenberg, .NET ve web teknolojileri konusunda Almanya'nın en tanınmış uzmanlarından biridir.







Seçenek aracılığıyla .NET 7.0 içeren bir tane PublishProfile=DefaultContainer Oluşturulan Docker kapsayıcısı otomatik olarak Docker'a etkin bir kapsayıcı olarak dağıtıldı.

.NET 8.0'da ek bir seçenek vardır: -ContainerArchiveOutputPath. Bu, doğrudan etkin kapsayıcı olarak kullanılabilir hale getirmeden bir kapsayıcı dosyası (tar.gz) oluşturmanıza olanak tanır:


dotnet publish -p PublishProfile=DefaultContainer
-p ContainerArchiveOutputPath=t:meinblazorimage.tar.gz
-p:ContainerBaseImage=mcr.microsoft.com/dotnet/aspnet:8.0-alpine






(Resim: Dmytro Vikarchuk/Shutterstock)


19 Kasım 2024'te iX ve dpunkt.verlag tarafından düzenlenecek BetterCode() .NET 9.0 çevrimiçi konferansında, www.IT-Visions.de adresindeki .NET uzmanları pratik örnekler kullanarak .NET 9.0'ın son sürümünü sunacaklar.

Bunlar arasında .NET 9.0 SDK, C# 13.0, ASP.NET Core 9.0, Blazor 9.0, Windows Forms 9.0, WPF 9.0, WinUI, .NET MAUI 9.0'daki yenilikler ve yapay zekanın .NET uygulamalarına entegrasyonu yer alıyor.

Programda altı ders, bir tartışma ve altı atölye çalışması yer alıyor. Biletler 22 Ekim'e kadar erken kayıt fiyatlarıyla satışta.







Aşağıdaki kod, örneğin tamamını gösterir:


function New-TempDirectory {
$parent = [System.IO.Path]::GetTempPath()
[string] $name = [System.Guid]::NewGuid()
New-Item -ItemType Directory -Path (Join-Path $parent $name)
}

docker --version

# Tempordner erzeugen und dahin wechseln
New-TempDirectory | cd

# Projekt anlegen (hier: Blazor SSR)
dotnet new blazor -n BlazorImContainer

# In den Ordner wechseln
cd .BlazorImContainer

#region Programmcode in Startseite austauschen mit Informationen über Umgebung, .NET- und OS-Version sowie Prozess
$indexpage = @'
@page "/"
<PageTitle>Index</PageTitle>
<h1>Liebe Leser*innen,</h1>
<p>diese Blazor Web App (Blazor Static SSR) läuft
@if (System.Environment.GetEnvironmentVariable("DOTNET_RUNNING_IN_CONTAINER")=="true")
{ <text><b>im Container </b></text> }
else
{ <text>nicht im Container </text> }!</p>
<p>
.NET-Version: @System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription<br>
Betriebssystem: @System.Runtime.InteropServices.RuntimeInformation.OSDescription<br>
Prozess: @System.Diagnostics.Process.GetCurrentProcess().ProcessName<br>
Prozessidentität: @[email protected]<br>
IsPrivilegedProcess: @System.Environment.IsPrivilegedProcess</p>
<hr>
Umgebungsvariablen:
<ul>
@foreach(System.Collections.DictionaryEntry e in System.Environment.GetEnvironmentVariables())
{
<li>@e.Key: @e.Value</li>
}
</ul>
'@
$indexpage | Set-Content "components/pages/home.razor"
#endregion

# Container-Build-Paket hinzufügen (neu seit .NET 7.0, wird nicht mehr explizit gebraucht in .NET 8.0!!!)
#dotnet add package Microsoft.NET.Build.Containers --prerelease

# Veröffentlichen als Containerdatei (neu seit .NET 8.0)
dotnet publish -p PublishProfile=DefaultContainer -p ContainerArchiveOutputPath=t:meinblazorimage.tar.gz -p:ContainerBaseImage=mcr.microsoft.com/dotnet/aspnet:8.0-alpine
# dann irgendwann: Laden in Docker
docker load --input t:meinblazorimage.tar.gz

# Das ging schon in .NET 7.0
# Veröffentlichen als Container, alle MSBuild-Properties nach PublishProfile=DefaultContainer sind optional
#dotnet publish --os linux --arch x64 -c Release -p:publishProfile=DefaultContainer -p:ContainerImageName=meinblazorimage #-p:ContainerBaseImage=mcr.microsoft.com/dotnet/aspnet:7.0-alpine

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

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




(Ben)
 
Üst