Zelfstudie: Een .NET-app containeriseren
In deze zelfstudie leert u hoe u een .NET-toepassing in een container kunt opnemen met Docker. Containers hebben veel functies en voordelen, zoals een onveranderbare infrastructuur, die een draagbare architectuur biedt en schaalbaarheid mogelijk maakt. De afbeelding kan worden gebruikt om containers te maken voor uw lokale ontwikkelomgeving, privécloud of openbare cloud.
In deze zelfstudie gaat u het volgende doen:
- Een eenvoudige .NET-app maken en publiceren
- Een Dockerfile maken en configureren voor .NET
- Een Docker-image bouwen
- Een Docker-container maken en uitvoeren
U verkent de Docker-containerbuild en implementeert taken voor een .NET-toepassing. Het Docker-platform maakt gebruik van de Docker-engine om snel apps te bouwen en te verpakken als Docker-installatiekopieën. Deze afbeeldingen zijn vastgelegd in het Dockerfile--formaat om te worden geïmplementeerd en uitgevoerd in een gelaagde container.
Fooi
Als u geïnteresseerd bent in het publiceren van uw .NET-app als een container zonder docker of Podman, raadpleegt u Een .NET-app containeriseren met dotnet publish.
Notitie
Deze zelfstudie is niet voor ASP.NET Core-apps. Als u ASP.NET Core gebruikt, raadpleegt u de Leer hoe u een ASP.NET Core-toepassing kunt containeriseren tutorial.
Voorwaarden
Installeer de volgende vereisten:
-
.NET 8+ SDK.
Als u .NET hebt geïnstalleerd, gebruikt u de opdrachtdotnet --info
om te bepalen welke SDK u gebruikt. - Docker Community Edition.
- Een tijdelijke werkmap voor de Dockerfile-- en .NET-voorbeeld-app. In deze handleiding wordt de naam docker-working gebruikt als de werkmap.
.NET-app maken
U hebt een .NET-app nodig die door de Docker-container wordt uitgevoerd. Open de terminal, maak een werkmap als u dat nog niet hebt gedaan en voer deze in. Voer in de werkmap de volgende opdracht uit om een nieuw project te maken in een submap met de naam App:
dotnet new console -o App -n DotNet.Docker
De mapboom ziet er vergelijkbaar uit met de volgende mapstructuur:
📁 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
Met de opdracht dotnet new
maakt u een nieuwe map met de naam App en genereert u een 'Hallo wereld'-consoletoepassing. U kunt nu mappen wijzigen en vanuit uw terminalsessie naar de map App navigeren. Gebruik de opdracht dotnet run
om de app te starten. De toepassing wordt uitgevoerd en Hello World!
onder de opdracht afgedrukt:
cd App
dotnet run
Hello World!
Met de standaardsjabloon creëert men een app die uitvoert naar de terminal en vervolgens onmiddellijk wordt beëindigd. Voor deze tutorial gebruikt u een app die oneindig blijft herhalen. Open het Program.cs-bestand in een teksteditor.
Tip
Als u Visual Studio Code gebruikt, typt u in de vorige terminalsessie de volgende opdracht:
code .
Met deze opdracht opent u de map App met het project in Visual Studio Code.
De Program.cs moet eruitzien als de volgende C#-code:
Console.WriteLine("Hello World!");
Vervang het bestand door de volgende code waarmee elke seconde getallen worden geteld:
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));
}
Sla het bestand op en test het programma opnieuw met dotnet run
. Houd er rekening mee dat deze app voor onbepaalde tijd wordt uitgevoerd. Gebruik de opdracht Annuleren Ctrl+C om deze te stoppen. Bekijk de volgende voorbeelduitvoer:
dotnet run
Counter: 1
Counter: 2
Counter: 3
Counter: 4
^C
Als u een getal op de opdrachtregel aan de app doorgeeft, wordt het aantal tot dat aantal beperkt en sluit de app vervolgens af. Probeer het met dotnet run -- 5
om te tellen tot vijf.
Belangrijk
Parameters na --
worden niet doorgegeven aan de opdracht dotnet run
en worden in plaats daarvan doorgegeven aan uw toepassing.
.NET-app publiceren
Om ervoor te zorgen dat de app geschikt is voor het maken van een afbeelding, moet deze worden gecompileerd. De dotnet publish
-opdracht is hiervoor het meest geschikt, omdat de app wordt gebouwd en gepubliceerd. Zie voor een uitgebreide naslaginformatie de documentatie van de opdrachten dotnet build en dotnet publish.
dotnet publish -c Release
Tip
Als u geïnteresseerd bent in het publiceren van uw .NET-app als een container zonder Docker, raadpleegt u Een .NET-app containeriseren met dotnet publish.
De opdracht dotnet publish
compileert uw app naar de publicatiemap . Het pad naar de publicatiemap vanuit de werkmap moet zijn ./App/bin/Release/<TFM>/publish/:
Verkrijg vanuit de map App een overzicht van de publicatiemap om te controleren of het DotNet.Docker.dll bestand is gemaakt.
dir .\bin\Release\net9.0\publish\
Directory: C:\Users\default\docker-working\App\bin\Release\net9.0\publish
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 1/6/2025 10:11 AM 431 DotNet.Docker.deps.json
-a---- 1/6/2025 10:11 AM 6144 DotNet.Docker.dll
-a---- 1/6/2025 10:11 AM 145408 DotNet.Docker.exe
-a---- 1/6/2025 10:11 AM 11716 DotNet.Docker.pdb
-a---- 1/6/2025 10:11 AM 340 DotNet.Docker.runtimeconfig.json
dir .\bin\Release\net8.0\publish\
Directory: C:\Users\default\docker-working\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
Het Dockerfile maken
Het Dockerfile-bestand wordt gebruikt door de opdracht docker build
om een containerimage te maken. Dit bestand is een tekstbestand met de naam Dockerfile die geen extensie heeft.
Maak een bestand met de naam Dockerfile in de map met de .csproj- en open het in een teksteditor. In deze tutorial wordt gebruikgemaakt van de ASP.NET Core-runtimeafbeelding (die de .NET-runtime bevat) en dit komt overeen met de .NET-consoleapplicatie.
FROM mcr.microsoft.com/dotnet/sdk:9.0@sha256:3fcf6f1e809c0553f9feb222369f58749af314af6f063f389cbd2f913b4ad556 AS build
WORKDIR /App
# Copy everything
COPY . ./
# Restore as distinct layers
RUN dotnet restore
# Build and publish a release
RUN dotnet publish -o out
# Build runtime image
FROM mcr.microsoft.com/dotnet/aspnet:9.0@sha256:b4bea3a52a0a77317fa93c5bbdb076623f81e3e2f201078d89914da71318b5d8
WORKDIR /App
COPY --from=build /App/out .
ENTRYPOINT ["dotnet", "DotNet.Docker.dll"]
Notitie
De ASP.NET Core runtime-image wordt hier bewust gekozen, hoewel de mcr.microsoft.com/dotnet/runtime:9.0
runtime-image in plaats daarvan kan worden gebruikt.
FROM mcr.microsoft.com/dotnet/sdk:8.0@sha256:35792ea4ad1db051981f62b313f1be3b46b1f45cadbaa3c288cd0d3056eefb83 AS build
WORKDIR /App
# Copy everything
COPY . ./
# Restore as distinct layers
RUN dotnet restore
# Build and publish a release
RUN dotnet publish -o out
# Build runtime image
FROM mcr.microsoft.com/dotnet/aspnet:8.0@sha256:6c4df091e4e531bb93bdbfe7e7f0998e7ced344f54426b7e874116a3dc3233ff
WORKDIR /App
COPY --from=build /App/out .
ENTRYPOINT ["dotnet", "DotNet.Docker.dll"]
Notitie
De ASP.NET Core runtime-afbeelding wordt hier bewust gebruikt, hoewel de mcr.microsoft.com/dotnet/runtime:8.0
-afbeelding in plaats daarvan gebruikt zou kunnen worden.
Belangrijk
Het opnemen van een veilig hash-algoritme (SHA) na de afbeeldingstag in een Dockerfile is een best practice. Dit zorgt ervoor dat er niet met de afbeelding wordt geknoeid en dat de afbeelding hetzelfde is als degene die u verwacht. De SHA is een unieke id voor de afbeelding. Zie Docker Docs voor meer informatie: Een afbeelding ophalen op digest.
Fooi
Deze Dockerfile maakt gebruik van builds met meerdere fasen, waarmee de uiteindelijke grootte van de image wordt geoptimaliseerd door de build in lagen op te splitsen en alleen noodzakelijke artefacten achter te laten. Zie Docker Docs: builds met meerdere fasenvoor meer informatie.
Voor het trefwoord FROM
is een volledig gekwalificeerde Docker containerbeeldnaam vereist. Microsoft Container Registry (MCR, mcr.microsoft.com) is een syndicate van Docker Hub, die openbaar toegankelijke containers host. Het dotnet
segment is de containerrepository, terwijl het sdk
of aspnet
segment de containerimagenaam is. De afbeelding is getagd met 9.0
, dat wordt gebruikt voor versiebeheer. Daarom is mcr.microsoft.com/dotnet/aspnet:9.0
de .NET 9.0-runtime. Zorg ervoor dat u de runtimeversie ophaalt die overeenkomt met de runtime waarop uw SDK is gericht. De app die in de vorige sectie is gemaakt, heeft bijvoorbeeld de .NET 9.0 SDK gebruikt en het basisimage waarnaar wordt verwezen in de Dockerfile is getagd met 9.0.
Belangrijk
Wanneer u containerimages op basis van Windows gebruikt, moet u de tag van de image meer specificeren dan alleen 9.0
, bijvoorbeeld mcr.microsoft.com/dotnet/aspnet:9.0-nanoserver-1809
in plaats van mcr.microsoft.com/dotnet/aspnet:9.0
. Selecteer een installatiekopieënnaam op basis van of u Nano Server of Windows Server Core gebruikt en welke versie van dat besturingssysteem. U kunt een volledige lijst van alle ondersteunde tags vinden op de Docker Hub-pagina van .NET .
Sla het Dockerfile--bestand op. De mapstructuur van de werkmap moet er als volgt uitzien. Sommige bestanden en mappen op dieper niveau worden weggelaten om ruimte te besparen in het artikel:
📁 docker-working
└──📂 App
├── Dockerfile
├── DotNet.Docker.csproj
├── Program.cs
├──📂 bin
│ └───📂 Release
│ └───📂 net9.0
│ ├───📂 publish
│ │ ├─── DotNet.Docker.deps.json
│ │ ├─── DotNet.Docker.dll
│ │ ├─── DotNet.Docker.exe
│ │ ├─── DotNet.Docker.pdb
│ │ └─── DotNet.Docker.runtimeconfig.json
│ ├─── DotNet.Docker.deps.json
│ ├─── DotNet.Docker.dll
│ ├─── DotNet.Docker.exe
│ ├─── DotNet.Docker.pdb
│ └─── DotNet.Docker.runtimeconfig.json
└──📁 obj
└──...
Voor het FROM
trefwoord is een volledig gekwalificeerde naam van de Docker-containerafbeelding vereist. Microsoft Container Registry (MCR, mcr.microsoft.com) is een syndicate van Docker Hub, die openbaar toegankelijke containers host. Het dotnet
segment is de containerrepository, terwijl het sdk
of aspnet
segment de containerimage naam is. De afbeelding is gelabeld met 8.0
, dat wordt gebruikt voor versiebeheer. Daarom is mcr.microsoft.com/dotnet/aspnet:8.0
de .NET 8.0-runtime. Zorg ervoor dat u de runtimeversie ophaalt die overeenkomt met de runtime waarop uw SDK is gericht. De app die in de vorige sectie is gemaakt, gebruikte bijvoorbeeld de .NET 8.0 SDK, en de basisafbeelding waarnaar wordt verwezen in de Dockerfile zijn gelabeld met 8.0.
Belangrijk
Wanneer u op Windows gebaseerde containerimages gebruikt, moet u de image tag meer dan alleen 8.0
opgeven, bijvoorbeeld mcr.microsoft.com/dotnet/aspnet:8.0-nanoserver-1809
in plaats van mcr.microsoft.com/dotnet/aspnet:8.0
. Selecteer een installatiekopieënnaam op basis van of u Nano Server of Windows Server Core gebruikt en welke versie van dat besturingssysteem. U vindt een volledige lijst met alle ondersteunde tags op. De Docker Hub-pagina van NET.
Sla het Dockerfile--bestand op. De mapstructuur van de werkmap moet er als volgt uitzien. Sommige bestanden en mappen op dieper niveau worden weggelaten om ruimte te besparen in het artikel:
📁 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
└──...
De ENTRYPOINT
instructie stelt dotnet
in als host voor de DotNet.Docker.dll
. Het is echter mogelijk om in plaats daarvan de ENTRYPOINT
te definiëren als het uitvoerbare app-bestand zelf, afhankelijk van het besturingssysteem als de app-host:
ENTRYPOINT ["./DotNet.Docker"]
Hierdoor wordt de app rechtstreeks uitgevoerd, zonder dotnet
, en is in plaats daarvan afhankelijk van de app-host en het onderliggende besturingssysteem. Zie Een platformoverschrijdend binairproduceren voor meer informatie over het implementeren van binaire bestanden op meerdere platforms.
Voer vanuit de terminal de volgende opdracht uit om de container te bouwen:
docker build -t counter-image -f Dockerfile .
Docker verwerkt elke regel in de Dockerfile-. De .
in de opdracht docker build
stelt de bouwcontext van het image in. De -f
-switch is het pad naar de Dockerfile-. Met deze opdracht wordt de afbeelding gebouwd en wordt er een lokale repository gemaakt met de naam counter-image die naar die afbeelding verwijst. Nadat deze opdracht is voltooid, voert u docker images
uit om een lijst met geïnstalleerde installatiekopieën weer te geven:
REPOSITORY TAG IMAGE ID CREATED SIZE
counter-image latest 1c1f1433e51d 32 seconds ago 223MB
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
counter-image latest 2f15637dc1f6 10 minutes ago 217MB
De counter-image
opslagplaats is de naam van de afbeelding. Daarnaast maken de afbeeldingstag, afbeeldings-id, grootte en wanneer deze is gemaakt deel uit van de uitvoer. De laatste stappen van de Dockerfile zijn om een container te maken vanuit de image en de app uit te voeren, de gepubliceerde app naar de container te kopiëren en het startpunt te definiëren:
FROM mcr.microsoft.com/dotnet/aspnet:9.0
WORKDIR /App
COPY --from=build /App/out .
ENTRYPOINT ["dotnet", "DotNet.Docker.dll"]
FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /App
COPY --from=build /App/out .
ENTRYPOINT ["dotnet", "DotNet.Docker.dll"]
Met de opdracht FROM
geeft u de basisimage en tag op die moeten worden gebruikt. Met de opdracht WORKDIR
wordt de huidige map in de container gewijzigd in App-.
De opdracht COPY
geeft Docker opdracht om de opgegeven bronmap naar een doelmap te kopiëren. In dit voorbeeld worden de inhoud in de build
laag gepubliceerd naar de map met de naam App/out, dus het is de bron waaruit moet worden gekopieerd. Alle gepubliceerde inhoud in de map App/out wordt gekopieerd naar de huidige werkmap (App).
De volgende opdracht, ENTRYPOINT
, vertelt Docker de container als een uitvoerbaar programma te configureren. Wanneer de container wordt gestart, wordt de opdracht ENTRYPOINT
uitgevoerd. Wanneer deze opdracht eindigt, stopt de container automatisch.
Tip
Voor .NET 8 konden containers die waren geconfigureerd om als alleen-lezen te draaien, mislukken met Failed to create CoreCLR, HRESULT: 0x8007000E
. Als u dit probleem wilt oplossen, geeft u een DOTNET_EnableDiagnostics
omgevingsvariabele op als 0
(net vóór de ENTRYPOINT
stap):
ENV DOTNET_EnableDiagnostics=0
Zie .NET-omgevingsvariabelenvoor meer informatie over verschillende .NET-omgevingsvariabelen.
Notitie
.NET 6 standaardiseert het voorvoegsel DOTNET_
in plaats van COMPlus_
voor omgevingsvariabelen die .NET-runtimegedrag configureren. Het voorvoegsel COMPlus_
blijft echter werken. Als u een eerdere versie van de .NET-runtime gebruikt, moet u nog steeds het COMPlus_
voorvoegsel voor omgevingsvariabelen gebruiken.
Een container maken
Nu u een image hebt die uw app bevat, kunt u een container maken. U kunt op twee manieren een container maken. Maak eerst een nieuwe container aan die niet actief is.
docker create --name core-counter counter-image
Met dit docker create
-commando maakt u een container op basis van het tegenbeeld,-afbeelding. In de uitvoer van de opdracht docker create
ziet u de CONTAINER-id van de container (uw id is anders):
d0be06126f7db6dd1cee369d911262a353c9b7fb4829a0c11b4b2eb7b2d429cf
Als u een lijst met alle containers wilt bekijken, gebruikt u de opdracht docker ps -a
:
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d0be06126f7d counter-image "dotnet DotNet.Docke…" 12 seconds ago Created core-counter
De container beheren
De container is gemaakt met een specifieke naam core-counter
. Deze naam wordt gebruikt om de container te beheren. In het volgende voorbeeld wordt de opdracht docker start
gebruikt om de container te starten en gebruikt u vervolgens de opdracht docker ps
om alleen containers weer te geven die worden uitgevoerd:
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
Op dezelfde manier stopt de opdracht docker stop
de container. In het volgende voorbeeld wordt de opdracht docker stop
gebruikt om de container te stoppen en gebruikt u vervolgens de opdracht docker ps
om aan te geven dat er geen containers worden uitgevoerd:
docker stop core-counter
core-counter
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Verbinding maken met een container
Nadat een container wordt uitgevoerd, kunt u er verbinding mee maken om de uitvoer te zien. Gebruik de opdrachten docker start
en docker attach
om de container te starten en de uitvoerstroom te bekijken. In dit voorbeeld wordt de toetsaanslag Ctrl+C gebruikt om los te koppelen van de actieve container. Met deze toetsaanslag wordt het proces in de container beëindigd, tenzij anders is opgegeven, waardoor de container wordt gestopt. De parameter --sig-proxy=false
zorgt ervoor dat Ctrl+C- het proces in de container niet stopt.
Nadat u de container loskoppelt, koppelt u deze opnieuw om te controleren of deze nog steeds actief is en telt.
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
Een container verwijderen
Voor dit artikel wilt u niet dat containers rondhangen die niets doen. Verwijder de container die u eerder hebt gemaakt. Als de container draait, stopt u deze.
docker stop core-counter
In het volgende voorbeeld ziet u alle containers. Vervolgens wordt de opdracht docker rm
gebruikt om de container te verwijderen en vervolgens een tweede keer te controleren op actieve containers.
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
Enkele run
Docker biedt de docker run
opdracht om de container als één opdracht te maken en uit te voeren. Met deze opdracht hoeft u geen docker create
uit te voeren en vervolgens docker start
. U kunt deze opdracht ook instellen om de container automatisch te verwijderen wanneer de container stopt. Gebruik bijvoorbeeld docker run -it --rm
om twee dingen te doen: gebruik eerst automatisch de huidige terminal om verbinding te maken met de container en verwijder deze wanneer de container is voltooid:
docker run -it --rm counter-image
Counter: 1
Counter: 2
Counter: 3
Counter: 4
Counter: 5
^C
De container geeft ook parameters door aan de uitvoering van de .NET-app. Als u de .NET-app wilt instrueren om slechts drie te tellen, geeft u 3 door.
docker run -it --rm counter-image 3
Counter: 1
Counter: 2
Counter: 3
Met docker run -it
stopt de opdracht Ctrl+C het proces dat wordt uitgevoerd in de container, waardoor de container op zijn beurt wordt gestopt. Omdat de parameter --rm
is opgegeven, wordt de container automatisch verwijderd wanneer het proces wordt gestopt. Controleer of deze niet bestaat:
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Het ENTRYPOINT wijzigen
Met de opdracht docker run
kunt u ook de ENTRYPOINT
opdracht wijzigen vanuit de Dockerfile- en iets anders uitvoeren, maar alleen voor die container. Gebruik bijvoorbeeld de volgende opdracht om bash
of cmd.exe
uit te voeren. Bewerk de opdracht indien nodig.
In dit voorbeeld wordt ENTRYPOINT
gewijzigd in cmd.exe
.
Ctrl+C- wordt ingedrukt om het proces te beëindigen en de container te stoppen.
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
Notitie
Dit voorbeeld werkt alleen in Windows-containers. Linux-containers hebben geen cmd.exe
.
Essentiële opdrachten
Docker heeft veel verschillende commando's die containers en afbeeldingen maken, beheren en interageren met. Deze Docker-opdrachten zijn essentieel voor het beheren van uw containers:
- docker build
- docker uitvoeren
- docker ps
- docker stoppen
- docker rm
- docker rmi
- docker-installatiekopieën
Middelen opschonen
Tijdens deze handleiding hebt u containers en afbeeldingen gemaakt. Verwijder deze resources desgewenst. Gebruik de volgende opdrachten om
Alle containers weergeven
docker ps -a
Stop containers die op hun naam worden uitgevoerd.
docker stop core-counter
De container verwijderen
docker rm core-counter
Verwijder vervolgens alle afbeeldingen die u niet langer op uw computer wilt hebben. Verwijder de installatiekopieën die zijn gemaakt door uw Dockerfile- en verwijder vervolgens de .NET-installatiekopieën waarop de Dockerfile is gebaseerd. U kunt de IMAGE ID of de REPOSITORY:TAG opgemaakte tekenreeks gebruiken.
docker rmi counter-image:latest
docker rmi mcr.microsoft.com/dotnet/aspnet:9.0
docker rmi counter-image:latest
docker rmi mcr.microsoft.com/dotnet/aspnet:8.0
Gebruik de opdracht docker images
om een lijst met geïnstalleerde installatiekopieën weer te geven.
Tip
Afbeeldingsbestanden kunnen groot zijn. Normaal gesproken verwijdert u tijdelijke containers die u hebt gemaakt tijdens het testen en ontwikkelen van uw app. Meestal houdt u de basisbeelden met de runtime al geïnstalleerd als u van plan bent andere beelden te bouwen op basis van die runtime.