Udostępnij za pośrednictwem


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.

In this tutorial, you:

  • Tworzenie i publikowanie prostej aplikacji .NET
  • Tworzenie i konfigurowanie pliku Dockerfile dla platformy .NET
  • Tworzenie obrazu platformy Docker
  • Tworzenie i uruchamianie kontenera platformy Docker

Zapoznasz się z zadaniami kompilacji i wdrażania kontenera platformy Docker dla aplikacji .NET. The Docker platform uses the Docker engine to quickly build and package apps as Docker images. Te obrazy są zapisywane w formacie Dockerfile, który ma zostać wdrożony i uruchomiony w kontenerze warstwowym.

Tip

Jeśli interesuje Cię publikowanie aplikacji .NET jako kontenera bez konieczności używania Docker lub Podman, zobacz Konteneryzacja aplikacji .NET za pomocą polecenia dotnet publish.

Notatka

This tutorial is not for ASP.NET Core apps. Jeśli używasz ASP.NET Core, zobacz samouczek Dowiedz się, jak konteneryzować aplikację ASP.NET Core.

Warunki wstępne

Zainstaluj następujące wymagania wstępne:

  • .NET 9+ SDK.
    Jeśli masz zainstalowaną platformę .NET, użyj polecenia dotnet --info, aby określić, którego zestawu SDK używasz.
  • .NET 8+ SDK.
    Jeśli masz zainstalowaną platformę .NET, użyj polecenia dotnet --info, aby określić, którego zestawu SDK używasz.
  • Docker Community Edition.
  • Tymczasowy folder roboczy dla przykładowej aplikacji Dockerfile i .NET. In this tutorial, the name docker-working is used as the working folder.

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 podobnie do następującej struktury katalogów:

📁 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". Teraz zmienisz katalogi i przejdziesz do folderu App z sesji terminalu. Użyj polecenia dotnet run, aby uruchomić aplikację. Aplikacja działa i drukuje Hello World! poniżej polecenia:

cd App
dotnet run
Hello World!

Domyślny szablon tworzy aplikację, która wyświetla dane w terminalu, a następnie natychmiast kończy działanie. For this tutorial, you use an app that loops indefinitely. Otwórz plik Program.cs w edytorze tekstów.

Tip

Jeśli używasz programu Visual Studio Code, z poprzedniej sesji terminalu wpisz następujące polecenie:

code .

To polecenie otwiera folder App zawierający projekt w programie Visual Studio Code.

Program.cs powinien 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 przy użyciu dotnet run. Pamiętaj, że ta aplikacja działa na czas nieokreślony. Aby go zatrzymać, użyj polecenia anuluj Ctrl+C. Rozważmy następujące 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, ogranicza ona liczbę do tej kwoty, a następnie kończy działanie. Spróbuj użyć dotnet run -- 5, aby zliczyć do pięciu.

Ważny

Wszystkie parametry po -- nie są przekazywane do polecenia dotnet run i zamiast tego są przekazywane do aplikacji.

Publikowanie aplikacji .NET

Aby aplikacja była odpowiednia do utworzenia obrazu, musi zostać skompilowana. Polecenie dotnet publish jest najbardziej trafne, ponieważ kompiluje i publikuje aplikację. For an in-depth reference, see dotnet build and dotnet publish commands documentation.

dotnet publish -c Release

Tip

Jeśli interesuje Cię publikowanie aplikacji .NET jako kontenera bez konieczności korzystania z platformy Docker, zobacz Containerize a .NET app with dotnet publish.

The dotnet publish command compiles your app to the publish folder. The path to the publish folder from the working folder should be ./App/bin/Release/<TFM>/publish/:

Z folderu App pobierz listę katalogów folderu publikowania, aby sprawdzić, czy plik DotNet.Docker.dll został utworzony.

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

Tworzenie pliku Dockerfile

Plik Dockerfile jest używany przez polecenie docker build do 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 .csproj i otwórz go w edytorze tekstów. This tutorial uses the ASP.NET Core runtime image (which contains the .NET runtime image) and corresponds with the .NET console application.

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"]

Notatka

Obraz środowiska uruchomieniowego ASP.NET Core jest używany celowo, chociaż zamiast tego można użyć obrazu mcr.microsoft.com/dotnet/runtime:9.0.

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"]

Notatka

Obraz środowiska uruchomieniowego ASP.NET Core jest używany celowo, chociaż zamiast tego można użyć obrazu mcr.microsoft.com/dotnet/runtime:8.0.

Ważny

Including a secure hash algorithm (SHA) after the image tag in a Dockerfile is a best practice. Gwarantuje to, że obraz nie zostanie naruszony i że obraz jest taki sam jak oczekiwany. Sha jest unikatowym identyfikatorem obrazu. For more information, see Docker Docs: Pull an image by digest.

Tip

This Dockerfile uses multi-stage builds, which optimize the final size of the image by layering the build and leaving only required artifacts. Aby uzyskać więcej informacji, zobacz Docker Docs: kompilacje wieloetapowe.

Słowo kluczowe FROM 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 jest repozytorium kontenerów, natomiast segment sdk lub aspnet jest nazwą obrazu kontenera. Obraz jest oznaczony tagiem 9.0, który jest używany do wersjonowania. W związku z tym mcr.microsoft.com/dotnet/aspnet:9.0 jest środowiskiem uruchomieniowym platformy .NET 9.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 .NET 9.0 SDK, a obraz podstawowy, do którego odwołuje się Dockerfile, jest oznaczony tagiem 9.0.

Ważny

W przypadku używania obrazów kontenerów Windows należy określić tag obrazu innym niż 9.0, na przykład mcr.microsoft.com/dotnet/aspnet:9.0-nanoserver-1809 zamiast mcr.microsoft.com/dotnet/aspnet:9.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 Docker Hub platformy .NET .

Zapisz plik Dockerfile. Struktura katalogów folderu roboczego powinna wyglądać następująco. Niektóre z bardziej szczegółowych plików i folderów zostaną pominięte, aby zaoszczędzić miejsce w artykule:

📁 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
            └──...

Słowo kluczowe FROM 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 jest repozytorium kontenerów, natomiast segment sdk lub aspnet jest nazwą obrazu kontenera. Obraz jest oznaczony tagiem 8.0, który jest używany do wersjonowania. W związku z tym mcr.microsoft.com/dotnet/aspnet:8.0 jest środowiskiem uruchomieniowym 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, o którym mowa w dockerfile, jest oznaczony tagiem 8.0.

Ważny

W przypadku używania obrazów kontenerów Windows należy określić tag obrazu innym niż 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 Docker Hub platformy .NET .

Zapisz plik Dockerfile. Struktura katalogów folderu roboczego powinna wyglądać następująco. Niektóre z bardziej szczegółowych plików i folderów zostaną 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
            └──...

Instrukcje ENTRYPOINT ustawiają dotnet jako hosta dla DotNet.Docker.dll. Jednak zamiast tego można zdefiniować ENTRYPOINT jako plik wykonywalny aplikacji, opierając się na systemie operacyjnym jako hoście aplikacji:

ENTRYPOINT ["./DotNet.Docker"]

Powoduje to bezpośrednie wykonanie aplikacji bez dotnet, a zamiast tego opiera się na hoście aplikacji i podstawowym systemie operacyjnym. Aby uzyskać więcej informacji na temat wdrażania plików binarnych międzyplatformowych, zobacz Tworzenie wieloplatformowego pliku binarnego.

Aby skompilować kontener, w terminalu uruchom następujące polecenie:

docker build -t counter-image -f Dockerfile .

Platforma Docker przetwarza każdy wiersz w pliku Dockerfile. Polecenie . w docker build ustawia kontekst kompilacji obrazu. The -f switch is the path to the 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 docker images, aby wyświetlić listę zainstalowanych obrazów:

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

Repozytorium counter-image jest nazwą obrazu. Ponadto tag obrazu, identyfikator obrazu, rozmiar i czas jego utworzenia są częścią danych wyjściowych. Ostatnimi krokami Dockerfile są utworzenie kontenera z obrazu i uruchomienie aplikacji, skopiowanie aplikacji do kontenera i zdefiniowanie punktu wejścia:

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"]

Polecenie FROM określa obraz podstawowy i tag do użycia. The WORKDIR command changes the current directory inside of the container to App.

Polecenie COPY informuje platformę Docker o skopiowaniu określonego katalogu źródłowego do folderu docelowego. In this example, the publish contents in the build layer are output into the folder named App/out, so it's the source to copy from. All of the published contents in the App/out directory are copied into current working directory (App).

Następne polecenie, ENTRYPOINT, informuje platformę Docker o skonfigurowaniu kontenera do uruchomienia jako pliku wykonywalnego. Po uruchomieniu kontenera zostanie uruchomione polecenie ENTRYPOINT. Po zakończeniu tego polecenia kontener automatycznie zatrzymuje się.

Tip

Before .NET 8, containers configured to run as read-only might fail with 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.

Notatka

Program .NET 6 standaryzuje prefiks DOTNET_ zamiast COMPlus_ dla zmiennych środowiskowych, które konfigurują zachowanie środowiska uruchomieniowego .NET. Jednak prefiks COMPlus_ 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

This docker create command creates a container based on the counter-image image. The output of the docker create command shows you the CONTAINER ID of the container (your identifier will be different):

d0be06126f7db6dd1cee369d911262a353c9b7fb4829a0c11b4b2eb7b2d429cf

Aby wyświetlić listę wszystkich kontenerów, użyj polecenia 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

Zarządzanie kontenerem

Kontener został utworzony pod określoną nazwą core-counter. Ta nazwa służy do zarządzania kontenerem. W poniższym przykładzie użyto polecenia docker start do uruchomienia kontenera, a następnie użyto polecenia docker ps, 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

Podobnie polecenie docker stop zatrzymuje kontener. W poniższym przykładzie użyto polecenia docker stop, aby zatrzymać kontener, a następnie użyje polecenia docker ps, aby pokazać, że żadne kontenery nie są uruchomione:

docker stop core-counter
core-counter

docker ps
CONTAINER ID    IMAGE    COMMAND    CREATED    STATUS    PORTS    NAMES

Nawiązywanie połączenia z kontenerem

Po uruchomieniu kontenera możesz nawiązać z nim połączenie, aby wyświetlić dane wyjściowe. Użyj poleceń docker start i docker attach, aby uruchomić kontener i zajrzeć do strumienia wyjściowego. In this example, the Ctrl+C keystroke is used to detach from the running container. To naciśnięcie kończy proces w kontenerze, chyba że określono inaczej, co spowoduje zatrzymanie kontenera. Parametr --sig-proxy=false gwarantuje, że Ctrl+C nie zatrzymuje procesu w kontenerze.

After you detach from the container, reattach to verify that it's still running and counting.

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 przypadku tego artykułu nie chcesz, aby kontenery pozostawały bezczynne. 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 polecenia docker rm 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

Single run

Platforma Docker udostępnia polecenie docker run służące do tworzenia i uruchamiania kontenera jako pojedynczego polecenia. To polecenie eliminuje konieczność uruchamiania docker create, a następnie docker start. Możesz również ustawić to polecenie, aby automatycznie usunąć kontener po zatrzymaniu kontenera. Na przykład użyj 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 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

W przypadku docker run -itpolecenie Ctrl+C zatrzymuje proces uruchomiony w kontenerze, co z kolei zatrzymuje kontener. Ponieważ podano parametr --rm, 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 umożliwia również zmodyfikowanie polecenia z Dockerfile i uruchomienie czegoś innego, ale tylko dla tego kontenera. Na przykład użyj następującego polecenia, aby uruchomić bash lub cmd.exe. Edytuj polecenie zgodnie z potrzebami.

W tym przykładzie ENTRYPOINT zostanie zmieniona na cmd.exe. naciśnij 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

Notatka

Ten przykład działa tylko w kontenerach systemu Windows. Kontenery systemu Linux nie mają cmd.exe.

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:

Czyszczenie zasobów

W tym samouczku utworzono kontenery i obrazy. Jeśli chcesz, usuń te zasoby. Use the following commands to

  1. Wyświetlanie listy wszystkich kontenerów

    docker ps -a
    
  2. Stop containers that are running by their name.

    docker stop core-counter
    
  3. Usuwanie kontenera

    docker rm core-counter
    

Następnie usuń wszystkie obrazy, które nie są już potrzebne na maszynie. Usuń obraz stworzony za pomocą Dockerfile , a następnie usuń obraz .NET, na którym bazował Dockerfile . You can use the IMAGE ID or the REPOSITORY:TAG formatted string.

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

Użyj polecenia docker images, aby wyświetlić listę zainstalowanych obrazów.

Tip

Pliki obrazów mogą być duże. Zazwyczaj można usunąć tymczasowe kontenery utworzone podczas testowania i tworzenia aplikacji. Zwykle przechowujesz obrazy podstawowe ze zainstalowanym środowiskiem uruchomieniowym, jeśli planujesz budowanie innych obrazów na podstawie tego środowiska.

Następne kroki