Tutorial: Containerisieren einer .NET Core-App
In diesem Tutorial erfahren Sie, wie Sie eine .NET-Anwendung mit Docker containerisieren können. Container haben viele Features und Vorteile, z. B. eine unveränderliche Infrastruktur, eine portable Architektur und die Skalierbarkeit. Das Image kann zum Erstellen von Containern für Ihre lokale Entwicklungsumgebung, eine private Cloud oder eine öffentliche Cloud verwendet werden.
In diesem Tutorial:
- Erstellen und Veröffentlichen einer einfachen .NET-App
- Erstellen und Konfigurieren einer Dockerfile-Datei für .NET
- Erstellen eines Docker-Images
- Erstellen und Ausführen eines Docker-Containers
Hier erfahren Sie mehr über die Aufgaben für das Erstellen und Bereitstellen von Docker-Containern für eine .NET-Anwendung. Die Docker-Plattform verwendet die Docker-Engine, um Pakete schnell als Docker-Images zu erstellen und zu packen. Diese Images werden im Dockerfile-Format geschrieben, um in einem mehrstufigen Container bereitgestellt und ausgeführt zu werden.
Hinweis
Dieses Tutorial gilt nicht für ASP.NET Core-Apps. Wenn Sie mit ASP.NET Core arbeiten, lesen Sie das Tutorial Informationen zum Containerisieren einer ASP.NET Core-Anwendung.
Voraussetzungen
Die folgenden Komponenten müssen installiert sein:
- .NET 8+ SDK
Wenn Sie .NET installiert haben, verwenden Sie den Befehldotnet --info
, um festzustellen, welches SDK Sie verwenden. - Docker Community Edition
- Ein temporärer Arbeitsordner für das Dockerfile und eine .NET-Beispiel-App. In diesem Tutorial trägt der Arbeitsordner den Namen docker-working.
- SDK für .NET ab Version 7
Wenn Sie .NET installiert haben, verwenden Sie den Befehldotnet --info
, um festzustellen, welches SDK Sie verwenden. - Docker Community Edition
- Ein temporärer Arbeitsordner für das Dockerfile und eine .NET-Beispiel-App. In diesem Tutorial trägt der Arbeitsordner den Namen docker-working.
Erstellen einer .NET-App
Sie benötigen eine.NET-App, die der Docker-Container ausführen kann. Öffnen Sie Ihr Terminal, erstellen Sie einen Arbeitsordner, falls noch nicht geschehen, und geben Sie den Ordnernamen ein. Führen Sie im Arbeitsordner den folgenden Befehl aus, um ein neues Projekt im Unterverzeichnis App zu erstellen:
dotnet new console -o App -n DotNet.Docker
Ihre Ordnerstruktur sollte wie folgt aussehen:
📁 docker-working
└──📂 App
├──DotNet.Docker.csproj
├──Program.cs
└──📂 obj
├── DotNet.Docker.csproj.nuget.dgspec.json
├── DotNet.Docker.csproj.nuget.g.props
├── DotNet.Docker.csproj.nuget.g.targets
├── project.assets.json
└── project.nuget.cache
Über den Befehl dotnet new
wird ein neuer Ordner namens App erstellt und eine „Hallo Welt“-Konsolenanwendung generiert. Ändern Sie die Verzeichnisse, und navigieren Sie in der Terminalsitzung zum Ordner App. Verwenden Sie den dotnet run
-Befehl, um die App zu starten. Die Anwendung wird ausgeführt, und Hello World!
wird unter dem Befehl ausgegeben:
cd App
dotnet run
Hello World!
Die Standardvorlage erstellt eine App, die eine Ausgabe im Terminal anzeigt und dann sofort beendet wird. Für dieses Tutorial verwenden Sie eine App, die auf unbestimmte Zeit ausgeführt wird. Öffnen Sie die Datei Program.cs in einem Text-Editor.
Tipp
Wenn Sie Visual Studio Code verwenden, geben Sie in der vorherigen Terminalsitzung den folgenden Befehl ein:
code .
Dadurch wird der Ordner App geöffnet, der das Projekt in Visual Studio Code enthält.
Die Program.cs-Datei sollte dem folgenden C#-Code entsprechen:
Console.WriteLine("Hello World!");
Ersetzen Sie die Datei durch den folgenden Code, der die Zahlen pro Sekunde zählt:
var counter = 0;
var max = args.Length is not 0 ? Convert.ToInt32(args[0]) : -1;
while (max is -1 || counter < max)
{
Console.WriteLine($"Counter: {++counter}");
await Task.Delay(TimeSpan.FromMilliseconds(1_000));
}
var counter = 0;
var max = args.Length is not 0 ? Convert.ToInt32(args[0]) : -1;
while (max is -1 || counter < max)
{
Console.WriteLine($"Counter: {++counter}");
await Task.Delay(TimeSpan.FromMilliseconds(1_000));
}
Speichern Sie die Datei, und testen Sie das Programm erneut mit dotnet run
. Denken Sie daran, dass diese App auf unbestimmte Zeit ausgeführt wird. Verwenden Sie zum Beenden den Befehl STRG+C, um diese anzuhalten. Nachfolgend sehen Sie eine Beispielausgabe:
dotnet run
Counter: 1
Counter: 2
Counter: 3
Counter: 4
^C
Wenn Sie eine Zahl auf der Kommandozeile an die App übergeben, zählt sie nur bis zu diesem Betrag und wird dann beendet. Probieren Sie es mitdotnet run -- 5
, um bis Fünf zu zählen.
Wichtig
Jegliche Parameter, die auf --
folgen, werden nicht an den Befehl dotnet run
, sondern an Ihre Anwendung übergeben.
Veröffentlichen einer .NET-App
Bevor Sie die .NET-App dem Docker-Image hinzufügen, muss sie veröffentlicht werden. Es ist am besten, wenn der Container die veröffentlichte Version der App ausführt. Führen Sie den folgenden Befehl aus, um die App zu veröffentlichen:
dotnet publish -c Release
Dieser Befehl kompiliert Ihre App in den Ordner publish. Der Pfad zum Ordner publish aus dem Arbeitsordner sollte wie folgt lauten: .\App\bin\Release\net8.0\publish\
Dieser Befehl kompiliert Ihre App in den Ordner publish. Der Pfad zum Ordner publish aus dem Arbeitsordner sollte wie folgt lauten: .\App\bin\Release\net7.0\publish\
Rufen Sie über den Ordner App eine Verzeichnisliste des Veröffentlichungsordners ab, um sicherzustellen, dass die Datei DotNet.Docker.dll erstellt wurde.
dir .\bin\Release\net8.0\publish\
Directory: C:\Users\default\App\bin\Release\net8.0\publish
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 9/22/2023 9:17 AM 431 DotNet.Docker.deps.json
-a--- 9/22/2023 9:17 AM 6144 DotNet.Docker.dll
-a--- 9/22/2023 9:17 AM 157696 DotNet.Docker.exe
-a--- 9/22/2023 9:17 AM 11688 DotNet.Docker.pdb
-a--- 9/22/2023 9:17 AM 353 DotNet.Docker.runtimeconfig.json
dir .\bin\Release\net7.0\publish\
Directory: C:\Users\default\App\bin\Release\net7.0\publish
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2/13/2023 1:52 PM 431 DotNet.Docker.deps.json
-a--- 2/13/2023 1:52 PM 6144 DotNet.Docker.dll
-a--- 2/13/2023 1:52 PM 153600 DotNet.Docker.exe
-a--- 2/13/2023 1:52 PM 11052 DotNet.Docker.pdb
-a--- 2/13/2023 1:52 PM 253 DotNet.Docker.runtimeconfig.json
Erstellen der Dockerfile
Die Dockerfile-Datei wird vom Befehl docker build
zum Erstellen des Containerimage verwendet. Diese Datei ist eine Textdatei mit dem Namen Dockerfile, die keine Erweiterung besitzt.
Erstellen Sie im Verzeichnis mit der CSPROJ-Datei eine Datei namens Dockerfile, und öffnen Sie sie in einem Text-Editor. In diesem Tutorial wird das ASP.NET Core-Runtimeimage (das das .NET-Runtimeimage enthält) verwendet, das der .NET-Konsolenanwendung entspricht.
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build-env
WORKDIR /App
# Copy everything
COPY . ./
# Restore as distinct layers
RUN dotnet restore
# Build and publish a release
RUN dotnet publish -c Release -o out
# Build runtime image
FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /App
COPY --from=build-env /App/out .
ENTRYPOINT ["dotnet", "DotNet.Docker.dll"]
Hinweis
Das ASP.NET Core-Runtimeimage wird hier absichtlich verwendet, obwohl auch das mcr.microsoft.com/dotnet/runtime:8.0
-Image verwendet werden könnte.
Tipp
Diese Dockerfile arbeitet mit mehrstufigen Builds, die die endgültige Größe des Images optimieren, indem sie den Build schichten und nur benötigte Artefakte belassen. Weitere Informationen finden Sie unter Docker-Dokumentation: mehrstufige Builds.
Für das FROM
-Schlüsselwort ist der vollqualifizierte Name des Docker-Containerimages erforderlich. Microsoft Container Registry (MCR, mcr.microsoft.com) ist ein Konsortium von Docker Hub, das öffentlich zugängliche Container hostet. Das Segment dotnet
ist das Containerrepository, wobei das Segment sdk
oder aspnet
der Name des Containerimages ist. Das Image wird für die Versionsverwaltung mit 8.0
gekennzeichnet. Daher entspricht mcr.microsoft.com/dotnet/aspnet:8.0
der .NET 8.0-Runtime. Stellen Sie sicher, dass Sie die .NET Core-Runtimeversion pullen, die der Runtime entspricht, die das Ziel Ihres SDK ist. Beispielsweise verwendet die im vorherigen Abschnitt erstellte App das .NET 8.0 SDK, und das Basisimage, auf das in der Dockerfile-Datei verwiesen wird, ist mit 8.0 gekennzeichnet.
Wichtig
Bei der Verwendung von Windows-basierten Container-Images müssen Sie das Image-Tag über das einfache 8.0
hinaus spezifizieren, zum Beispiel mcr.microsoft.com/dotnet/aspnet:8.0-nanoserver-1809
statt mcr.microsoft.com/dotnet/aspnet:8.0
. Wählen Sie einen Image-Namen, je nachdem, ob Sie Nano Server oder Windows Server Core verwenden und welche Version des Betriebssystems Sie einsetzen. Eine vollständige Liste aller unterstützten Tags finden Sie auf der Docker Hub-Seite von .NET.
Speichern Sie das Dockerfile. Die Verzeichnisstruktur des Arbeitsordners sollte wie folgt aussehen. Einige Dateien und Ordner, die sich auf tieferen Ebenen befinden, sind in diesem Beispiel nicht enthalten, um Platz zu sparen:
📁 docker-working
└──📂 App
├── Dockerfile
├── DotNet.Docker.csproj
├── Program.cs
├──📂 bin
│ └──📂 Release
│ └──📂 net8.0
│ └──📂 publish
│ ├── DotNet.Docker.deps.json
│ ├── DotNet.Docker.exe
│ ├── DotNet.Docker.dll
│ ├── DotNet.Docker.pdb
│ └── DotNet.Docker.runtimeconfig.json
└──📁 obj
└──...
FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build-env
WORKDIR /App
# Copy everything
COPY . ./
# Restore as distinct layers
RUN dotnet restore
# Build and publish a release
RUN dotnet publish -c Release -o out
# Build runtime image
FROM mcr.microsoft.com/dotnet/aspnet:7.0
WORKDIR /App
COPY --from=build-env /App/out .
ENTRYPOINT ["dotnet", "DotNet.Docker.dll"]
Hinweis
Das ASP.NET Core-Runtimeimage wird hier absichtlich verwendet, obwohl auch das mcr.microsoft.com/dotnet/runtime:7.0
-Image verwendet werden könnte.
Tipp
Diese Dockerfile arbeitet mit mehrstufigen Builds, die die endgültige Größe des Images optimieren, indem sie den Build schichten und nur benötigte Artefakte belassen. Weitere Informationen finden Sie unter Docker-Dokumentation: mehrstufige Builds.
Für das FROM
-Schlüsselwort ist der vollqualifizierte Name des Docker-Containerimages erforderlich. Microsoft Container Registry (MCR, mcr.microsoft.com) ist ein Konsortium von Docker Hub, das öffentlich zugängliche Container hostet. Das Segment dotnet
ist das Containerrepository, wobei das Segment sdk
oder aspnet
der Name des Containerimages ist. Das Image wird für die Versionsverwaltung mit 7.0
gekennzeichnet. Daher entspricht mcr.microsoft.com/dotnet/aspnet:7.0
der .NET 7.0-Runtime. Stellen Sie sicher, dass Sie die .NET Core-Runtimeversion pullen, die der Runtime entspricht, die das Ziel Ihres SDK ist. Beispielsweise verwendet die im vorherigen Abschnitt erstellte App das .NET 7.0 SDK, und das Basisimage, auf das in der Dockerfile-Datei verwiesen wird, ist mit 7.0 gekennzeichnet.
Speichern Sie das Dockerfile. Die Verzeichnisstruktur des Arbeitsordners sollte wie folgt aussehen. Einige Dateien und Ordner, die sich auf tieferen Ebenen befinden, sind in diesem Beispiel nicht enthalten, um Platz zu sparen:
📁 docker-working
└──📂 App
├── Dockerfile
├── DotNet.Docker.csproj
├── Program.cs
├──📂 bin
│ └──📂 Release
│ └──📂 net7.0
│ └──📂 publish
│ ├── DotNet.Docker.deps.json
│ ├── DotNet.Docker.exe
│ ├── DotNet.Docker.dll
│ ├── DotNet.Docker.pdb
│ └── DotNet.Docker.runtimeconfig.json
└──📁 obj
└──...
Führen Sie in Ihrem Terminal den folgenden Befehl aus:
docker build -t counter-image -f Dockerfile .
Docker verarbeitet die einzelnen Zeilen aus dem Dockerfile. .
im Befehl docker build
legt den Buildkontext des Images fest. Der Schalter -f
ist der Pfad zur Dockerfile. Dieser Befehl erstellt das Image und ein lokales Repository namens counter-image, das auf dieses Image zeigt. Nachdem dieser Befehl abgeschlossen ist, führen Sie docker images
aus, um eine Liste der installierten Images anzuzeigen:
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
counter-image latest 2f15637dc1f6 10 minutes ago 217MB
Das Repository counter-image
ist der Name des Images. Das Tag latest
ist das Tag zum Bestimmen des Images. 2f15637dc1f6
ist die Image-ID. 10 minutes ago
ist die Uhrzeit der Erstellung des Images. 217MB
ist die Größe des Images. Die letzten Schritte in der Dockerfile sind das Erstellen eines Containers anhand des Images und Ausführen der App, das Kopieren der veröffentlichten App in den Container und das Festlegen des Einstiegspunkts.
FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /App
COPY --from=build-env /App/out .
ENTRYPOINT ["dotnet", "DotNet.Docker.dll"]
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
counter-image latest 2f15637dc1f6 10 minutes ago 208MB
Das Repository counter-image
ist der Name des Images. Das Tag latest
ist das Tag zum Bestimmen des Images. 2f15637dc1f6
ist die Image-ID. 10 minutes ago
ist die Uhrzeit der Erstellung des Images. 208MB
ist die Größe des Images. Die letzten Schritte in der Dockerfile sind das Erstellen eines Containers anhand des Images und Ausführen der App, das Kopieren der veröffentlichten App in den Container und das Festlegen des Einstiegspunkts.
FROM mcr.microsoft.com/dotnet/aspnet:7.0
WORKDIR /App
COPY --from=build-env /App/out .
ENTRYPOINT ["dotnet", "DotNet.Docker.dll"]
Der Befehl COPY
weist Docker an, den angegebenen Ordner auf Ihrem Computer in einen Ordner im Container zu kopieren. In diesem Beispiel wird der Ordner publish in einen Ordner mit dem Namen App/out im Container kopiert.
Mit dem Befehl WORKDIR
wird das aktuelle Verzeichnis im Container in App geändert.
Der nächste Befehl, ENTRYPOINT
, weist Docker an, den Container so zu konfigurieren, dass er als ausführbare Datei ausgeführt wird. Wenn der Container gestartet wird, wird die ENTRYPOINT
-Befehl ausgeführt. Wenn dieser Befehl beendet wird, wird der Container automatisch beendet.
Tipp
Vor .NET 8 können Container, die als schreibgeschützt ausgeführt werden sollen, mit Failed to create CoreCLR, HRESULT: 0x8007000E
fehlschlagen. Um dieses Problem zu beheben, geben Sie die Umgebungsvariable DOTNET_EnableDiagnostics
(unmittelbar vor Schritt ENTRYPOINT
) mit 0
an:
ENV DOTNET_EnableDiagnostics=0
Weitere Informationen zu verschiedenen .NET-Umgebungsvariablen finden Sie unter .NET-Umgebungsvariablen.
Hinweis
In .NET 6 ist das Präfix DOTNET_
statt COMPlus_
Standard für Umgebungsvariablen, die das .NET-Runtimeverhalten konfigurieren. Das Präfix COMPlus_
funktioniert jedoch weiterhin. Wenn Sie eine frühere Version der .NET-Runtime verwenden, sollten Sie weiterhin das Präfix COMPlus_
für Umgebungsvariablen verwenden.
Erstellen eines Containers
Da Sie nun ein Image haben, das Ihre App enthält, können Sie einen Container erstellen. Für die Erstellung eines Containers haben Sie zwei Möglichkeiten. Erstellen Sie zunächst einen neuen Container, der beendet wird.
docker create --name core-counter counter-image
Dieser docker create
-Befehl erstellt einen Container auf Grundlage des Images counter-image. Die Ausgabe dieses Befehls zeigt Ihnen die CONTAINER ID (Ihre wird anders sein) des erstellten Containers:
d0be06126f7db6dd1cee369d911262a353c9b7fb4829a0c11b4b2eb7b2d429cf
Um eine Liste aller Container zu erhalten, verwenden Sie den docker ps -a
-Befehl:
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d0be06126f7d counter-image "dotnet DotNet.Docke…" 12 seconds ago Created core-counter
Verwalten des Containers
Der Container wurde mit dem spezifischen Namen core-counter
erstellt, der zum Verwalten des Containers verwendet wird. Das folgende Beispiel verwendet den Befehl docker start
, um den Container zu starten, und verwendet dann den Befehl docker ps
, um nur die laufenden Container anzuzeigen:
docker start core-counter
core-counter
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cf01364df453 counter-image "dotnet DotNet.Docke…" 53 seconds ago Up 10 seconds core-counter
In ähnlicher Weise beendet der docker stop
-Befehl den Container. Im folgenden Beispiel wird der Befehl docker stop
verwendet, um den Container zu beenden, und dann der Befehl docker ps
, um anzuzeigen, dass keine Container ausgeführt werden:
docker stop core-counter
core-counter
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Herstellen einer Verbindung mit einem Container
Nachdem ein Container ausgeführt wird, können Sie sich mit ihm verbinden, um die Ausgabe anzuzeigen. Verwenden Sie die Befehle docker start
und docker attach
, um den Container zu starten und den Ausgabestream anzuzeigen. In diesem Beispiel wird die Tastenkombination STRG+C verwendet, um die Trennung vom ausgeführten Container durchzuführen. Diese Tastenkombination beendet den Prozess im Container, sofern nicht anders angegeben, was den Container anhalten würde. Der Parameter --sig-proxy=false
stellt sicher, dass der Prozess im Container durch das Drücken von STRG+C nicht angehalten wird.
Nachdem Sie den Container abgetrennt haben, fügen Sie ihn erneut an, um sicherzustellen, dass er noch läuft und zählt.
docker start core-counter
core-counter
docker attach --sig-proxy=false core-counter
Counter: 7
Counter: 8
Counter: 9
^C
docker attach --sig-proxy=false core-counter
Counter: 17
Counter: 18
Counter: 19
^C
Löschen eines Containers
In diesem Artikel möchten Sie nicht, dass Container vorhanden sind, die nichts bewirken. Löschen Sie den zuvor erstellten Container. Wenn der Container ausgeführt wird, beenden Sie ihn.
docker stop core-counter
Das folgende Beispiel listet alle Container auf. Anschließend wird der Container mit dem Befehl docker rm
gelöscht. Dann wird ein zweites Mal auf ausgeführte Container überprüft.
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2f6424a7ddce counter-image "dotnet DotNet.Dock…" 7 minutes ago Exited (143) 20 seconds ago core-counter
docker rm core-counter
core-counter
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Einzelausführung
Docker bietet den Befehl docker run
, um den Container als einen einzigen Befehl zu erstellen und auszuführen. Dieser Befehl erübrigt die Ausführung von docker create
und dann docker start
. Sie können diesen Befehl auch so einstellen, dass der Container beim Beenden des Containers automatisch gelöscht wird. Verwenden Sie beispielsweise docker run -it --rm
, um zwei Dinge zu tun: 1) um sich automatisch über das aktuelle Terminal mit dem Container zu verbinden, und 2) wenn der Container fertig ist, um ihn zu entfernen:
docker run -it --rm counter-image
Counter: 1
Counter: 2
Counter: 3
Counter: 4
Counter: 5
^C
Der Container übergibt auch Parameter an die Ausführung der .NET-App, um diese anzuweisen, nur bis 3 zu zählen und dann „3“ zu übergeben.
docker run -it --rm counter-image 3
Counter: 1
Counter: 2
Counter: 3
Bei docker run -it
beendet der Befehl STRG + C den Prozess, der im Container ausgeführt wird, was wiederum den Container anhält. Da der Parameter --rm
angegeben wurde, wird der Container beim Anhalten des Prozesses automatisch gelöscht. Stellen Sie sicher, dass er nicht vorhanden ist:
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Ändern des EINSTIEGSPUNKTS
Mit dem Befehl docker run
können Sie auch den Befehl ENTRYPOINT
aus der Dockerfile ändern und etwas anderes ausführen, jedoch nur für diesen Container. Verwenden Sie beispielsweise den folgenden Befehl, um bash
oder cmd.exe
auszuführen. Bearbeiten Sie den Befehl nach Bedarf.
In diesem Beispiel wird ENTRYPOINT
in cmd.exe
geändert. STRG+C wird gedrückt, um den Prozess zu beenden und den Container anzuhalten.
docker run -it --rm --entrypoint "cmd.exe" counter-image
Microsoft Windows [Version 10.0.17763.379]
(c) 2018 Microsoft Corporation. All rights reserved.
C:\>dir
Volume in drive C has no label.
Volume Serial Number is 3005-1E84
Directory of C:\
04/09/2019 08:46 AM <DIR> app
03/07/2019 10:25 AM 5,510 License.txt
04/02/2019 01:35 PM <DIR> Program Files
04/09/2019 01:06 PM <DIR> Users
04/02/2019 01:35 PM <DIR> Windows
1 File(s) 5,510 bytes
4 Dir(s) 21,246,517,248 bytes free
C:\>^C
Grundlegende Befehle
Docker bietet viele verschiedene Befehle für die Erstellung, Verwaltung und Interaktion mit Containern und Images. Diese Docker-Befehle sind für die Verwaltung Ihrer Container unerlässlich:
Bereinigen von Ressourcen
In diesem Tutorial haben Sie Container und Images erstellt. Wenn Sie möchten, können Sie diese Ressourcen löschen. Führen Sie die folgenden Befehle für diese Aktionen aus:
Zum Anzeigen aller Container
docker ps -a
Zum Anhalten aller ausgeführten Container nach Namen
docker stop core-counter
Zum Löschen des Containers
docker rm core-counter
Löschen Sie anschließend alle Images, die Sie nicht mehr auf Ihrem Computer benötigen. Löschen Sie das von Ihrer Dockerfile erstellte Image und löschen Sie dann das .NET-Image, auf dem die Dockerfile basiert. Sie können die IMAGE ID oder die mit REPOSITORY:TAG formatierte Zeichenfolge verwenden.
docker rmi counter-image:latest
docker rmi mcr.microsoft.com/dotnet/aspnet:8.0
docker rmi counter-image:latest
docker rmi mcr.microsoft.com/dotnet/aspnet:7.0
Verwenden Sie den Befehl docker images
, um eine Liste der installierten Images anzuzeigen.
Tipp
Imagedateien können groß sein. Normalerweise würden Sie temporäre Container entfernen, die Sie während des Tests und der Entwicklung 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.