Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Container verfügen über viele Features und Vorteile, z. B. eine unveränderliche Infrastruktur, bieten eine tragbare Architektur und ermöglichen skalierbarkeit. Das Image kann verwendet werden, um Container für Ihre lokale Entwicklungsumgebung, private Cloud oder öffentliche Cloud zu erstellen. In diesem Lernprogramm erfahren Sie, wie Sie eine .NET-Anwendung mithilfe des Dotnet-Veröffentlichungsbefehls containern, ohne eine Dockerfile-Datei zu verwenden. Darüber hinaus erfahren Sie, wie Sie das Containerimage und die Ausführung konfigurieren und wie Sie Ressourcen bereinigen.
Tipp
Wenn Sie an der Verwendung einer Dockerfile-Datei zum Containern Ihrer .NET-App interessiert sind, lesen Sie Tutorial: Containerisieren einer .NET-App.
Voraussetzungen
Installieren Sie die folgenden Voraussetzungen:
- .NET 8+ SDK
Wenn .NET installiert ist, verwenden Sie den Befehldotnet --info, um zu bestimmen, welches SDK Sie verwenden.
Wenn Sie den Container lokal ausführen möchten, benötigen Sie eine mit der Open Container Initiative (OCI) kompatible Container-Runtime, z. B.:
- Docker Desktop: Am häufigsten verwendete Containerlaufzeit.
- Podman: Eine open-Source-Daemonless-Alternative zu Docker.
Wichtig
Das .NET SDK erstellt Containerimages ohne Docker. Docker oder Podman sind nur erforderlich, wenn Sie das Image lokal ausführen möchten. Wenn Sie Ihre .NET-App standardmäßig als Containerimage veröffentlichen, wird sie an eine lokale Containerlaufzeit übertragen. Alternativ können Sie das Image als Tarball speichern oder direkt in eine Containerregistrierung übertragen, ohne überhaupt eine Containerlaufzeit zu verwenden.
Zusätzlich zu diesen Voraussetzungen ist es empfehlenswert, dass Sie mit Worker-Diensten in .NET vertraut sind, da das Beispielprojekt ein Worker ist.
Erstellen einer .NET-App
Sie benötigen eine .NET-App zum Containerisieren. Beginnen Sie also mit dem Erstellen einer neuen App aus einer Vorlage. Öffnen Sie Ihr Terminal, erstellen Sie einen Arbeitsordner (Beispielverzeichnis), falls noch nicht geschehen, und ändern Sie Verzeichnisse so, dass Sie sich darin befinden. Führen Sie im Arbeitsordner den folgenden Befehl aus, um ein neues Projekt in einem Unterverzeichnis namens Worker zu erstellen:
dotnet new worker -o Worker -n DotNet.ContainerImage
Die Ordnerstruktur sieht ähnlich wie im folgenden Verzeichnis aus:
📁 sample-directory
└──📂 Worker
├──appsettings.Development.json
├──appsettings.json
├──DotNet.ContainerImage.csproj
├──Program.cs
├──Worker.cs
├──📂 Properties
│ └─── launchSettings.json
└──📂 obj
├── DotNet.ContainerImage.csproj.nuget.dgspec.json
├── DotNet.ContainerImage.csproj.nuget.g.props
├── DotNet.ContainerImage.csproj.nuget.g.targets
├── project.assets.json
└── project.nuget.cache
Der dotnet new Befehl erstellt einen neuen Ordner mit dem Namen "Worker " und generiert einen Workerdienst, der bei ausführung eine Meldung jede Sekunde protokolliert. Ändern Sie in Ihrer Terminalsitzung Verzeichnisse, und navigieren Sie in den Ordner "Worker ". Verwenden Sie den Befehl dotnet run, um die App zu starten.
dotnet run
Using launch settings from ./Worker/Properties/launchSettings.json...
Building...
info: DotNet.ContainerImage.Worker[0]
Worker running at: 01/06/2025 13:37:28 -06:00
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
Content root path: .\Worker
info: DotNet.ContainerImage.Worker[0]
Worker running at: 01/06/2025 13:37:29 -06:00
info: DotNet.ContainerImage.Worker[0]
Worker running at: 01/06/2025 13:37:30 -06:00
info: Microsoft.Hosting.Lifetime[0]
Application is shutting down...
Die Workervorlage wird unbegrenzt in einer Schleife ausgeführt. Verwenden Sie den Befehl "Abbrechen " STRG+C , um ihn zu beenden.
Festlegen des Namens des Containerimages
Beim Veröffentlichen einer App als Container stehen verschiedene Konfigurationsoptionen zur Verfügung. Standardmäßig ist der Name des Containerimages der AssemblyName des Projekts. Wenn dieser Name als Container-Imagename ungültig ist, können Sie ihn überschreiben, indem Sie eine ContainerRepository angeben, wie in der Projektdatei unten gezeigt:
<Project Sdk="Microsoft.NET.Sdk.Worker">
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<UserSecretsId>dotnet-DotNet.ContainerImage-2e40c179-a00b-4cc9-9785-54266210b7eb</UserSecretsId>
<ContainerRepository>dotnet-worker-image</ContainerRepository>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Hosting" Version="9.0.10" />
</ItemGroup>
</Project>
Weitere Informationen finden Sie unter ContainerRepository.
.NET-App veröffentlichen
Verwenden Sie den folgenden Dotnet-Veröffentlichungsbefehl , um die .NET-App als Container zu veröffentlichen:
dotnet publish --os linux --arch x64 /t:PublishContainer
Der vorangehende .NET CLI-Befehl veröffentlicht die App als Container:
- Ausrichtung auf Linux als Betriebssystem (
--os linux) - Angeben einer x64-Architektur (
--arch x64).
Wichtig
Um den Container lokal zu veröffentlichen, müssen Sie über einen aktiven OCI-kompatiblen Daemon verfügen. Wenn er nicht ausgeführt wird, wenn Sie versuchen, die App als Container zu veröffentlichen, erhalten Sie eine Fehlermeldung ähnlich der folgenden:
..\build\Microsoft.NET.Build.Containers.targets(66,9): error MSB4018:
The "CreateNewImage" task failed unexpectedly. [..\Worker\DotNet.ContainerImage.csproj]
Der Befehl dotnet publish erzeugt eine Ausgabe ähnlich der Beispielausgabe:
Restore complete (0.2s)
DotNet.ContainerImage succeeded (2.6s) → bin\Release\net9.0\linux-x64\publish\
Mit diesem Befehl wird Ihre Worker-App in den Veröffentlichungsordner kompiliert und standardmäßig das Containerimage an den lokalen Docker-Daemon übertragen. Wenn Sie Podman verwenden, unterstützt das Tooling auch das Pushen ohne zusätzliche Konfiguration.
Veröffentlichen einer .NET-App in einem Tarball
Ein Tarball (oder Tar-Datei) ist eine Datei, die andere Dateien enthält. Es endet in der Regel mit einer *.tar.gz zusammengesetzten Dateierweiterung, um anzugeben, dass es sich um ein komprimiertes Archiv handelt. Diese Dateitypen werden verwendet, um Software zu verteilen oder Sicherungen zu erstellen. In diesem Fall wird die erstellte Tarball-Datei verwendet, um ein Container-Image zu verteilen.
Verwenden Sie den folgenden Befehl, um eine .NET-App als Container in einem Tarball zu veröffentlichen:
dotnet publish --os linux --arch x64 \
/t:PublishContainer \
-p ContainerArchiveOutputPath=./images/container-image.tar.gz
Der vorangehende Befehl veröffentlicht die App als Container in einer Tarball-Datei:
- Ausrichtung auf Linux als Betriebssystem (
--os linux) - Angeben einer x64-Architektur (
--arch x64). - Legen Sie die Eigenschaft
ContainerArchiveOutputPathauf./images/container-image.tar.gzfest.
Der Befehl erfordert keinen laufenden OCI-kompatiblen Daemon. Weitere Informationen finden Sie unter ContainerArchiveOutputPath.
Laden der Tarball
Ein allgemeiner Anwendungsfall für den Export in eine Tarball ist für Organisationen, die auf Sicherheit bedacht sind. Sie erstellen Container, exportieren sie als Tarballs und führen dann Sicherheitsscanner-Tools über die Tarballs aus. Dieser Ansatz vereinfacht die Compliance, da er die Komplexität des Scannens eines Live-Systems vermeidet.
Die Tarball enthält den gesamten Container, der dann mit dem entsprechenden Tool geladen werden kann:
- Docker:
docker load -i ./images/container-image.tar.gz - Podman:
podman load -i ./images/container-image.tar.gz
Veröffentlichen einer .NET-App in einer Containerregistrierung
Container-Registries sind Dienste, die Container-Images speichern und verwalten. Sie werden verwendet, um die Container-Images in mehreren Umgebungen zu speichern und zu verteilen. Sie können eine .NET-App als Container in einer Containerregistrierung veröffentlichen, indem Sie den folgenden Befehl verwenden:
dotnet publish --os linux --arch x64 \
/t:PublishContainer \
-p ContainerRegistry=ghcr.io
Der vorangehende Code veröffentlicht die App als Container in einer Container Registry:
- Ausrichtung auf Linux als Betriebssystem (
--os linux) - Angeben einer x64-Architektur (
--arch x64). - Legen Sie die Eigenschaft
ContainerRegistryaufghcr.iofest.
Weitere Informationen finden Sie unter ContainerRegistry.
Bereinigen von Ressourcen
In diesem Artikel haben Sie einen .NET-Worker als Containerimage veröffentlicht. Wenn Sie möchten, löschen Sie diese Ressource. Verwenden Sie den Befehl docker images, um eine Liste der installierten Images anzuzeigen.
docker images
Betrachten Sie die folgende Beispielausgabe:
REPOSITORY TAG IMAGE ID CREATED SIZE
dotnet-worker-image 1.0.0 25aeb97a2e21 12 seconds ago 191MB
Tipp
Bilddateien können groß sein. In der Regel entfernen Sie temporäre Container, die Sie beim Testen und Entwickeln Ihrer App erstellt haben. In der Regel behalten Sie die Basisimages mit installierter Runtime, wenn Sie planen, andere Images auf Basis dieser Runtime zu erstellen.
Um das Bild zu löschen, kopieren Sie die Bild-ID, und führen Sie den Befehl docker image rm aus:
docker image rm 25aeb97a2e21