Samouczek: konteneryzowanie aplikacji .NET
Z tego samouczka dowiesz się, jak konteneryzować aplikację platformy .NET przy użyciu platformy Docker. Kontenery mają wiele funkcji i korzyści, takich jak niezmienna infrastruktura, zapewniając przenośną architekturę i umożliwiająca skalowalność. Obraz może służyć do tworzenia kontenerów dla lokalnego środowiska deweloperskiego, chmury prywatnej lub chmury publicznej.
W tym samouczku zostały wykonane następujące czynności:
- Tworzenie i publikowanie prostej aplikacji .NET
- Tworzenie i konfigurowanie pliku Dockerfile dla platformy .NET
- Kompilowanie obrazu platformy Docker
- Tworzenie i uruchamianie kontenera platformy Docker
Zapoznasz się z zadaniami kompilacji i wdrażania kontenera platformy Docker dla aplikacji .NET. Platforma Docker używa aparatu platformyDocker do szybkiego kompilowania i tworzenia pakietów aplikacji jako obrazów platformy Docker. Te obrazy są zapisywane w formacie dockerfile do wdrożenia i uruchamiania w kontenerze warstwowym.
Uwaga
Ten samouczek nie dotyczy aplikacji ASP.NET Core. Jeśli używasz ASP.NET Core, zobacz samouczek Dowiedz się, jak konteneryzować aplikację ASP.NET Core.
Wymagania wstępne
Zainstaluj następujące wymagania wstępne:
- Zestaw .NET 8+ SDK
Jeśli masz zainstalowaną platformędotnet --info
.NET, użyj polecenia , aby określić, którego zestawu SDK używasz. - Docker Community Edition
- Tymczasowy folder roboczy dla przykładowej aplikacji Dockerfile i .NET. W tym samouczku nazwa docker-working jest używana jako folder roboczy.
- Zestaw .NET 7+ SDK
Jeśli masz zainstalowaną platformędotnet --info
.NET, użyj polecenia , aby określić, którego zestawu SDK używasz. - Docker Community Edition
- Tymczasowy folder roboczy dla przykładowej aplikacji Dockerfile i .NET. W tym samouczku nazwa docker-working jest używana jako folder roboczy.
Tworzenie aplikacji .NET
Potrzebna jest aplikacja .NET uruchomiona przez kontener platformy Docker. Otwórz terminal, utwórz folder roboczy, jeśli jeszcze tego nie zrobiono, i wprowadź go. W folderze roboczym uruchom następujące polecenie, aby utworzyć nowy projekt w podkatalogu o nazwie App:
dotnet new console -o App -n DotNet.Docker
Drzewo folderów wygląda następująco:
📁 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
Polecenie dotnet new
tworzy nowy folder o nazwie App i generuje aplikację konsolową "Hello World". Zmień katalogi i przejdź do folderu App z poziomu sesji terminalu. dotnet run
Użyj polecenia , aby uruchomić aplikację. Aplikacja jest uruchamiana i drukowana Hello World!
poniżej polecenia:
cd App
dotnet run
Hello World!
Domyślny szablon tworzy aplikację, która jest drukowana w terminalu, a następnie natychmiast kończy działanie. W tym samouczku użyjesz aplikacji, która zapętla się w nieskończoność. Otwórz plik Program.cs w edytorze tekstów.
Napiwek
Jeśli używasz programu Visual Studio Code, z poprzedniej sesji terminalu wpisz następujące polecenie:
code .
Spowoduje to otwarcie folderu App zawierającego projekt w programie Visual Studio Code.
Program.cs powinny wyglądać podobnie do następującego kodu w języku C#:
Console.WriteLine("Hello World!");
Zastąp plik następującym kodem, który liczy liczby co sekundę:
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));
}
Zapisz plik i ponownie przetestuj program za pomocą polecenia dotnet run
. Pamiętaj, że ta aplikacja działa na czas nieokreślony. Użyj polecenia anuluj Ctrl+C , aby go zatrzymać. Poniżej przedstawiono przykładowe dane wyjściowe:
dotnet run
Counter: 1
Counter: 2
Counter: 3
Counter: 4
^C
Jeśli przekażesz liczbę w wierszu polecenia do aplikacji, będzie ona liczyć tylko tę kwotę, a następnie zakończyć działanie. Spróbuj liczyć do dotnet run -- 5
pięciu.
Ważne
Wszystkie parametry po --
nie są przekazywane do dotnet run
polecenia i zamiast tego są przekazywane do aplikacji.
Publikowanie aplikacji .NET
Przed dodaniem aplikacji .NET do obrazu platformy Docker najpierw należy ją opublikować. Najlepiej, aby kontener uruchamiał opublikowaną wersję aplikacji. Aby opublikować aplikację, uruchom następujące polecenie:
dotnet publish -c Release
To polecenie kompiluje aplikację do folderu publikowania. Ścieżka do folderu publikowania z folderu roboczego powinna mieć wartość .\App\bin\Release\net8.0\publish\
.
To polecenie kompiluje aplikację do folderu publikowania. Ścieżka do folderu publikowania z folderu roboczego powinna mieć wartość .\App\bin\Release\net7.0\publish\
.
Z folderu App pobierz listę katalogów folderu publikowania, aby sprawdzić, czy plik DotNet.Docker.dll został utworzony.
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
Tworzenie pliku Dockerfile
Plik Dockerfile jest używany przez docker build
polecenie w celu utworzenia obrazu kontenera. Ten plik jest plikiem tekstowym o nazwie Dockerfile , który nie ma rozszerzenia.
Utwórz plik o nazwie Dockerfile w katalogu zawierającym plik csproj i otwórz go w edytorze tekstów. W tym samouczku jest używany obraz środowiska uruchomieniowego platformy ASP.NET Core (który zawiera obraz środowiska uruchomieniowego platformy .NET) i odpowiada aplikacji konsolowej platformy .NET.
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"]
Uwaga
Obraz środowiska uruchomieniowego ASP.NET Core jest używany celowo, chociaż mcr.microsoft.com/dotnet/runtime:8.0
obraz mógł zostać użyty.
Napiwek
Ten plik Dockerfile używa kompilacji wieloetapowych, co optymalizuje ostateczny rozmiar obrazu przez warstwowanie kompilacji i pozostawienie tylko wymaganych artefaktów. Aby uzyskać więcej informacji, zobacz Docker Docs: kompilacje wieloetapowe.
Słowo FROM
kluczowe wymaga w pełni kwalifikowanej nazwy obrazu kontenera platformy Docker. Microsoft Container Registry (MCR, mcr.microsoft.com) to syndykat usługi Docker Hub, który hostuje publicznie dostępne kontenery. Segment dotnet
to repozytorium kontenerów, natomiast sdk
segment or aspnet
to nazwa obrazu kontenera. Obraz jest oznaczony tagiem 8.0
, który jest używany do przechowywania wersji. mcr.microsoft.com/dotnet/aspnet:8.0
W związku z tym jest to środowisko uruchomieniowe platformy .NET 8.0. Upewnij się, że ściągasz wersję środowiska uruchomieniowego zgodną ze środowiskiem uruchomieniowym przeznaczonym dla zestawu SDK. Na przykład aplikacja utworzona w poprzedniej sekcji używa zestawu SDK platformy .NET 8.0, a obraz podstawowy, do którego odwołuje się plik Dockerfile , jest oznaczony tagiem 8.0.
Ważne
W przypadku korzystania z obrazów kontenerów opartych na systemie Windows należy określić tag obrazu poza elementem 8.0
, na przykład mcr.microsoft.com/dotnet/aspnet:8.0-nanoserver-1809
zamiast mcr.microsoft.com/dotnet/aspnet:8.0
. Wybierz nazwę obrazu na podstawie tego, czy używasz systemu operacyjnego Nano Server, czy Windows Server Core oraz której wersji systemu operacyjnego. Pełną listę wszystkich obsługiwanych tagów można znaleźć na stronie . Strona usługi Docker Hub platformy Docker platformy NET.
Zapisz plik Dockerfile. Struktura katalogów folderu roboczego powinna wyglądać następująco. Niektóre pliki i foldery na wyższym poziomie zostały pominięte, aby zaoszczędzić miejsce w artykule:
📁 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"]
Uwaga
Obraz środowiska uruchomieniowego ASP.NET Core jest używany celowo, chociaż mcr.microsoft.com/dotnet/runtime:7.0
obraz mógł zostać użyty.
Napiwek
Ten plik Dockerfile używa kompilacji wieloetapowych, co optymalizuje ostateczny rozmiar obrazu przez warstwowanie kompilacji i pozostawienie tylko wymaganych artefaktów. Aby uzyskać więcej informacji, zobacz Docker Docs: kompilacje wieloetapowe.
Słowo FROM
kluczowe wymaga w pełni kwalifikowanej nazwy obrazu kontenera platformy Docker. Usługa Microsoft Container Registry (MCR, mcr.microsoft.com) to syndykat usługi Docker Hub, który hostuje publicznie dostępne kontenery. Segment dotnet
to repozytorium kontenerów, natomiast sdk
segment or aspnet
to nazwa obrazu kontenera. Obraz jest oznaczony tagiem 7.0
, który jest używany do przechowywania wersji. mcr.microsoft.com/dotnet/aspnet:7.0
W związku z tym jest to środowisko uruchomieniowe platformy .NET 7.0. Upewnij się, że ściągasz wersję środowiska uruchomieniowego zgodną ze środowiskiem uruchomieniowym przeznaczonym dla zestawu SDK. Na przykład aplikacja utworzona w poprzedniej sekcji używa zestawu SDK platformy .NET 7.0, a obraz podstawowy, do którego odwołuje się plik Dockerfile , jest oznaczony tagiem 7.0.
Zapisz plik Dockerfile. Struktura katalogów folderu roboczego powinna wyglądać następująco. Niektóre pliki i foldery na wyższym poziomie zostały pominięte, aby zaoszczędzić miejsce w artykule:
📁 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
└──...
W terminalu uruchom następujące polecenie:
docker build -t counter-image -f Dockerfile .
Platforma Docker przetworzy każdy wiersz w pliku Dockerfile. W .
poleceniu docker build
ustawia kontekst kompilacji obrazu. Przełącznik -f
jest ścieżką do pliku Dockerfile. To polecenie kompiluje obraz i tworzy lokalne repozytorium o nazwie counter-image , które wskazuje na ten obraz. Po zakończeniu tego polecenia uruchom polecenie docker images
, aby wyświetlić listę zainstalowanych obrazów:
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
counter-image latest 2f15637dc1f6 10 minutes ago 217MB
Repozytorium counter-image
jest nazwą obrazu. Tag latest
to tag używany do identyfikowania obrazu. Jest 2f15637dc1f6
to identyfikator obrazu. Jest 10 minutes ago
to czas utworzenia obrazu. Jest 217MB
to rozmiar obrazu. Ostatnimi krokami pliku Dockerfile jest utworzenie kontenera na podstawie obrazu i uruchomienie aplikacji, skopiowanie opublikowanej aplikacji do kontenera i zdefiniowanie punktu wejścia.
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
Repozytorium counter-image
jest nazwą obrazu. Tag latest
to tag używany do identyfikowania obrazu. Jest 2f15637dc1f6
to identyfikator obrazu. Jest 10 minutes ago
to czas utworzenia obrazu. Jest 208MB
to rozmiar obrazu. Ostatnimi krokami pliku Dockerfile jest utworzenie kontenera na podstawie obrazu i uruchomienie aplikacji, skopiowanie opublikowanej aplikacji do kontenera i zdefiniowanie punktu wejścia.
FROM mcr.microsoft.com/dotnet/aspnet:7.0
WORKDIR /App
COPY --from=build-env /App/out .
ENTRYPOINT ["dotnet", "DotNet.Docker.dll"]
Polecenie COPY
informuje platformę Docker o skopiowaniu określonego folderu na komputerze do folderu w kontenerze. W tym przykładzie folder publikowania jest kopiowany do folderu o nazwie App/out w kontenerze.
Polecenie WORKDIR
zmienia bieżący katalog wewnątrz kontenera na App.
Następne polecenie informuje platformę Docker o ENTRYPOINT
skonfigurowaniu kontenera do uruchamiania jako pliku wykonywalnego. Po uruchomieniu kontenera ENTRYPOINT
polecenie zostanie uruchomione. Po zakończeniu tego polecenia kontener zostanie automatycznie zatrzymany.
Napiwek
Przed użyciem platformy .NET 8 kontenery skonfigurowane do uruchamiania jako tylko do odczytu mogą zakończyć się niepowodzeniem.Failed to create CoreCLR, HRESULT: 0x8007000E
Aby rozwiązać ten problem, określ zmienną środowiskową DOTNET_EnableDiagnostics
jako 0
(tuż przed krokiem ENTRYPOINT
):
ENV DOTNET_EnableDiagnostics=0
Aby uzyskać więcej informacji na temat różnych zmiennych środowiskowych platformy .NET, zobacz Zmienne środowiskowe platformy .NET.
Uwaga
Program .NET 6 standardizuje prefiks DOTNET_
zamiast COMPlus_
zmiennych środowiskowych, które konfigurują zachowanie czasu wykonywania platformy .NET. COMPlus_
Jednak prefiks będzie nadal działać. Jeśli używasz poprzedniej wersji środowiska uruchomieniowego platformy .NET, nadal należy użyć prefiksu COMPlus_
dla zmiennych środowiskowych.
Tworzenie kontenera
Teraz, gdy masz obraz zawierający aplikację, możesz utworzyć kontener. Kontener można utworzyć na dwa sposoby. Najpierw utwórz nowy kontener, który jest zatrzymany.
docker create --name core-counter counter-image
To docker create
polecenie tworzy kontener na podstawie obrazu counter-image . Dane wyjściowe tego polecenia pokazują identyfikator KONTENERa (twój będzie inny) utworzonego kontenera:
d0be06126f7db6dd1cee369d911262a353c9b7fb4829a0c11b4b2eb7b2d429cf
Aby wyświetlić listę wszystkich kontenerów, użyj docker ps -a
polecenia :
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d0be06126f7d counter-image "dotnet DotNet.Docke…" 12 seconds ago Created core-counter
Zarządzanie kontenerem
Kontener został utworzony o określonej nazwie core-counter
, ta nazwa jest używana do zarządzania kontenerem. W poniższym przykładzie docker start
użyto polecenia , aby uruchomić kontener, a następnie użyj docker ps
polecenia , aby wyświetlić tylko uruchomione kontenery:
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
docker stop
Podobnie polecenie zatrzymuje kontener. W poniższym przykładzie docker stop
użyto polecenia , aby zatrzymać kontener, a następnie użyj docker ps
polecenia , aby pokazać, że żadne kontenery nie są uruchomione:
docker stop core-counter
core-counter
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Połączenie do kontenera
Po uruchomieniu kontenera możesz nawiązać z nim połączenie, aby wyświetlić dane wyjściowe. docker start
Użyj poleceń idocker attach
, aby uruchomić kontener i zajrzeć do strumienia wyjściowego. W tym przykładzie naciśnięcie klawiszy Ctrl+C jest używane do odłączania od uruchomionego kontenera. To naciśnięcie klawiszy kończy proces w kontenerze, chyba że określono inaczej, co spowoduje zatrzymanie kontenera. Parametr --sig-proxy=false
zapewnia, że klawisze Ctrl+C nie zatrzymają procesu w kontenerze.
Po odłączeniu od kontenera dołącz ponownie, aby sprawdzić, czy nadal działa i zliczasz.
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
Usuwanie kontenera
W tym artykule nie chcesz, aby kontenery wisiały, które nie robią nic. Usuń utworzony wcześniej kontener. Jeśli kontener jest uruchomiony, zatrzymaj go.
docker stop core-counter
Poniższy przykład zawiera listę wszystkich kontenerów. Następnie używa docker rm
polecenia do usunięcia kontenera, a następnie sprawdza drugi raz dla wszystkich uruchomionych kontenerów.
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
Pojedyncze uruchomienie
Platforma Docker udostępnia docker run
polecenie służące do tworzenia i uruchamiania kontenera jako pojedynczego polecenia. To polecenie eliminuje konieczność uruchomienia docker create
polecenia , a następnie docker start
. Możesz również ustawić to polecenie, aby automatycznie usunąć kontener po zatrzymaniu kontenera. Na przykład użyj polecenia docker run -it --rm
, aby najpierw wykonać dwie czynności, automatycznie użyj bieżącego terminalu, aby nawiązać połączenie z kontenerem, a następnie po zakończeniu działania kontenera usuń go:
docker run -it --rm counter-image
Counter: 1
Counter: 2
Counter: 3
Counter: 4
Counter: 5
^C
Kontener przekazuje również parametry do wykonywania aplikacji .NET. Aby poinstruować aplikację .NET, aby liczyła się tylko do trzech, przekaż wartość 3.
docker run -it --rm counter-image 3
Counter: 1
Counter: 2
Counter: 3
Za pomocą docker run -it
polecenia Ctrl+C zatrzymuje proces uruchomiony w kontenerze, co z kolei zatrzymuje kontener. --rm
Ponieważ parametr został podany, kontener jest automatycznie usuwany po zatrzymaniu procesu. Sprawdź, czy nie istnieje:
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Zmienianie PUNKTU WEJŚCIA
Polecenie docker run
pozwala również zmodyfikować ENTRYPOINT
polecenie z pliku Dockerfile i uruchomić coś innego, ale tylko dla tego kontenera. Na przykład użyj następującego polecenia, aby uruchomić bash
polecenie lub cmd.exe
. Edytuj polecenie zgodnie z potrzebami.
W tym przykładzie ENTRYPOINT
zmieniono wartość na cmd.exe
. Naciśnij klawisze Ctrl+C , aby zakończyć proces i zatrzymać kontener.
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
Podstawowe polecenia
Platforma Docker ma wiele różnych poleceń, które tworzą kontenery i obrazy oraz zarządzają nimi oraz współdziałają z nimi. Te polecenia platformy Docker są niezbędne do zarządzania kontenerami:
- kompilacja platformy Docker
- Uruchamianie platformy docker
- docker ps
- zatrzymywanie platformy Docker
- docker rm
- docker rmi
- Obraz platformy Docker
Czyszczenie zasobów
W tym samouczku utworzono kontenery i obrazy. Jeśli chcesz, usuń te zasoby. Użyj następujących poleceń, aby
Wyświetlanie listy wszystkich kontenerów
docker ps -a
Zatrzymaj kontenery, które są uruchomione według ich nazwy.
docker stop core-counter
Usuwanie kontenera
docker rm core-counter
Następnie usuń wszystkie obrazy, które nie są już potrzebne na maszynie. Usuń obraz utworzony przez plik Dockerfile , a następnie usuń obraz platformy .NET, na podstawie którego został utworzony plik Dockerfile . Możesz użyć identyfikatora OBRAZU lub ciągu w formacie REPOSITORY:TAG.
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
docker images
Użyj polecenia , aby wyświetlić listę zainstalowanych obrazów.
Napiwek
Pliki obrazów mogą być duże. Zazwyczaj można usunąć tymczasowe kontenery utworzone podczas testowania i tworzenia aplikacji. Zwykle obrazy podstawowe są instalowane przy użyciu środowiska uruchomieniowego, jeśli planujesz kompilowanie innych obrazów na podstawie tego środowiska uruchomieniowego.