Tutorial: Containerisieren einer .NET Core-AppTutorial: Containerize a .NET Core app

In diesem Tutorial erfahren Sie, wie Sie eine .NET Core-Anwendung mit Docker containerisieren können.In this tutorial, you'll learn how to containerize a .NET Core application with Docker. Container haben viele Features und Vorteile, z. B. eine unveränderliche Infrastruktur, eine portable Architektur und die Skalierbarkeit.Containers have many features and benefits, such as being an immutable infrastructure, providing a portable architecture, and enabling scalability. Das Image kann zum Erstellen von Containern für Ihre lokale Entwicklungsumgebung, eine private Cloud oder eine öffentliche Cloud verwendet werden.The image can be used to create containers for your local development environment, private cloud, or public cloud.

In diesem Tutorial:In this tutorial, you:

  • Erstellen und Veröffentlichen einer einfachen .NET Core-AppCreate and publish a simple .NET Core app
  • Erstellen und Konfigurieren einer Dockerfile-Datei für .NET CoreCreate and configure a Dockerfile for .NET Core
  • Erstellen eines Docker-ImagesBuild a Docker image
  • Erstellen und Ausführen eines Docker-ContainersCreate and run a Docker container

Hier erfahren Sie mehr über die Aufgaben für das Erstellen und Bereitstellen von Docker-Containern für eine .NET Core-Anwendung.You'll understand the Docker container build and deploy tasks for a .NET Core application. Die Docker-Plattform verwendet die Docker-Engine, um Pakete schnell als Docker-Images zu erstellen und zu packen.The Docker platform uses the Docker engine to quickly build and package apps as Docker images. Diese Images werden im Dockerfile-Format geschrieben, um in einem mehrstufigen Container bereitgestellt und ausgeführt zu werden.These images are written in the Dockerfile format to be deployed and run in a layered container.

Hinweis

Dieses Tutorial gilt nicht für ASP.NET Core-Apps.This tutorial is not for ASP.NET Core apps. Wenn Sie mit ASP.NET Core arbeiten, lesen Sie das Tutorial Informationen zum Containerisieren einer ASP.NET Core-Anwendung.If you're using ASP.NET Core, see the Learn how to containerize an ASP.NET Core application tutorial.

VoraussetzungenPrerequisites

Die folgenden Komponenten müssen installiert sein:Install the following prerequisites:

  • .NET Core 3.1 SDK.NET Core 3.1 SDK
    Wenn Sie .NET Core installiert haben, verwenden Sie den Befehl dotnet --info, um festzustellen, welches SDK Sie verwenden.If you have .NET Core installed, use the dotnet --info command to determine which SDK you're using.
  • Docker Community EditionDocker Community Edition
  • Ein temporärer Arbeitsordner für das Dockerfile und eine .NET Core-Beispiel-App.A temporary working folder for the Dockerfile and .NET Core example app. In diesem Tutorial trägt der Arbeitsordner den Namen docker-working.In this tutorial, the name docker-working is used as the working folder.

Erstellen der .NET Core-AppCreate .NET Core app

Sie benötigen eine.NET Core-App, die der Docker-Container ausführen kann.You need a .NET Core app that the Docker container will run. Öffnen Sie Ihr Terminal, erstellen Sie einen Arbeitsordner, falls noch nicht geschehen, und geben Sie den Ordnernamen ein.Open your terminal, create a working folder if you haven't already, and enter it. Führen Sie im Arbeitsordner den folgenden Befehl aus, um ein neues Projekt im Unterverzeichnis app zu erstellen:In the working folder, run the following command to create a new project in a subdirectory named app:

dotnet new console -o App -n NetCore.Docker

Ihre Ordnerstruktur sollte wie folgt aussehen:Your folder tree will look like the following:

docker-working
    └──App
        ├──NetCore.Docker.csproj
        ├──Program.cs
        └──obj
            ├──NetCore.Docker.csproj.nuget.dgspec.json
            ├──NetCore.Docker.csproj.nuget.g.props
            ├──NetCore.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.The dotnet new command creates a new folder named App and generates a "Hello World" console application. Ändern Sie die Verzeichnisse, und navigieren Sie in der Terminalsitzung zum Ordner App.Change directories and navigate into the App folder, from your terminal session. Verwenden Sie den dotnet run-Befehl, um die App zu starten.Use the dotnet run command to start the app. Die Anwendung wird ausgeführt, und Hello World! wird unter dem Befehl ausgegeben:The application will run, and print Hello World! below the command:

dotnet run
Hello World!

Die Standardvorlage erstellt eine App, die eine Ausgabe im Terminal anzeigt und dann sofort beendet wird.The default template creates an app that prints to the terminal and then immediately terminates. Für dieses Tutorial verwenden Sie eine App, die auf unbestimmte Zeit ausgeführt wird.For this tutorial, you'll use an app that loops indefinitely. Öffnen Sie die Datei Program.cs in einem Text-Editor.Open the Program.cs file in a text editor.

Tipp

Wenn Sie Visual Studio Code verwenden, geben Sie in der vorherigen Terminalsitzung den folgenden Befehl ein:If you're using Visual Studio Code, from the previous terminal session type the following command:

code .

Dadurch wird der Ordner App geöffnet, der das Projekt in Visual Studio Code enthält.This will open the App folder that contains the project in Visual Studio Code.

Die Program.cs-Datei sollte dem folgenden C#-Code entsprechen:The Program.cs should look like the following C# code:

using System;

namespace NetCore.Docker
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

Ersetzen Sie die Datei durch den folgenden Code, der die Zahlen pro Sekunde zählt:Replace the file with the following code that counts numbers every second:

using System;
using System.Threading.Tasks;

namespace NetCore.Docker
{
    class Program
    {
        static async Task Main(string[] args)
        {
            var counter = 0;
            var max = args.Length != 0 ? Convert.ToInt32(args[0]) : -1;
            while (max == -1 || counter < max)
            {
                Console.WriteLine($"Counter: {++counter}");
                await Task.Delay(1000);
            }
        }
    }
}

Speichern Sie die Datei, und testen Sie das Programm erneut mit dotnet run.Save the file and test the program again with dotnet run. Denken Sie daran, dass diese App auf unbestimmte Zeit ausgeführt wird.Remember that this app runs indefinitely. Verwenden Sie zum Beenden den Befehl STRG+C, um diese anzuhalten.Use the cancel command Ctrl+C to stop it. Nachfolgend sehen Sie eine Beispielausgabe:The following is an example output:

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.If you pass a number on the command line to the app, it will only count up to that amount and then exit. Probieren Sie es mitdotnet run -- 5, um bis Fünf zu zählen.Try it with dotnet run -- 5 to count to five.

Wichtig

Jegliche Parameter, die auf -- folgen, werden nicht an den Befehl dotnet run, sondern an Ihre Anwendung übergeben.Any parameters after -- are not passed to the dotnet run command and instead are passed to your application.

Veröffentlichen der .NET Core-AppPublish .NET Core app

Bevor Sie die .NET Core-App dem Docker-Image hinzufügen, muss sie veröffentlicht werden.Before adding the .NET Core app to the Docker image, first it must be published. Es ist am besten, wenn der Container die veröffentlichte Version der App ausführt.It is best to have the container run the published version of the app. Führen Sie den folgenden Befehl aus, um die App zu veröffentlichen:To publish the app, run the following command:

dotnet publish -c Release

Dieser Befehl kompiliert Ihre App in den Ordner publish.This command compiles your app to the publish folder. Der Pfad zum Ordner publish aus dem Arbeitsordner sollte wie folgt lauten: .\App\bin\Release\netcoreapp3.1\publish\The path to the publish folder from the working folder should be .\App\bin\Release\netcoreapp3.1\publish\

Rufen Sie über den Ordner App eine Verzeichnisliste des Veröffentlichungsordners ab, um sicherzustellen, dass die Datei NetCore.Docker.dll erstellt wurde.From the App folder, get a directory listing of the publish folder to verify that the NetCore.Docker.dll file was created.

dir .\bin\Release\netcoreapp3.1\publish\

    Directory: C:\Users\dapine\App\bin\Release\netcoreapp3.1\publish

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        4/27/2020   8:27 AM            434 NetCore.Docker.deps.json
-a----        4/27/2020   8:27 AM           6144 NetCore.Docker.dll
-a----        4/27/2020   8:27 AM         171520 NetCore.Docker.exe
-a----        4/27/2020   8:27 AM            860 NetCore.Docker.pdb
-a----        4/27/2020   8:27 AM            154 NetCore.Docker.runtimeconfig.json

Erstellen der DockerfileCreate the Dockerfile

Die Dockerfile-Datei wird vom Befehl docker build zum Erstellen des Containerimage verwendet.The Dockerfile file is used by the docker build command to create a container image. Diese Datei ist eine Textdatei mit dem Namen Dockerfile, die keine Erweiterung besitzt.This file is a text file named Dockerfile that doesn't have an extension.

Erstellen Sie eine Datei namens Dockerfile in dem Verzeichnis mit der CSPROJ-Datei, und öffnen Sie sie in einem Text-Editor.Create a file named Dockerfile in directory containing the .csproj and open it in a text editor. In diesem Tutorial wird das ASP.NET Core-Runtimeimage (das das .NET Core-Runtimeimage enthält) verwendet, das der .NET Core-Konsolenanwendung entspricht.This tutorial will use the ASP.NET Core runtime image (which contains the .NET Core runtime image) and corresponds with the .NET Core console application.

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1

Hinweis

Das ASP.NET Core-Runtimeimage wird hier absichtlich verwendet, obwohl auch das mcr.microsoft.com/dotnet/core/runtime:3.1-Image verwendet werden könnte.The ASP.NET Core runtime image is used intentionally here, although the mcr.microsoft.com/dotnet/core/runtime:3.1 image could have been used.

Für das FROM-Schlüsselwort ist der vollqualifizierte Name des Docker-Containerimages erforderlich.The FROM keyword requires a fully qualified Docker container image name. Die Microsoft Container Registry (MCR, mcr.microsoft.com) ist ein Konsortium von Docker Hub, das öffentlich zugängliche Container hostet.The Microsoft Container Registry (MCR, mcr.microsoft.com) is a syndicate of Docker Hub - which hosts publicly accessible containers. Das dotnet/core-Segment ist das Containerrepository, wobei das aspnet-Segment der Name des Containerimages ist.The dotnet/core segment is the container repository, where as the aspnet segment is the container image name. Das Image wird für die Versionsverwaltung mit 3.1 gekennzeichnet.The image is tagged with 3.1, which is used for versioning. Daher entspricht mcr.microsoft.com/dotnet/core/aspnet:3.1 der .NET Core 3.1-Runtime.Thus, mcr.microsoft.com/dotnet/core/aspnet:3.1 is the .NET Core 3.1 runtime. Stellen Sie sicher, dass Sie die .NET Core-Runtimeversion pullen, die der Runtime entspricht, die das Ziel Ihres SDK ist.Make sure that you pull the runtime version that matches the runtime targeted by your SDK. Beispielsweise verwendet die im vorherigen Abschnitt erstellte App das .NET Core 3.1 SDK, und das Basisimage, auf das in der Dockerfile-Datei verwiesen wird, ist mit 3.1 gekennzeichnet.For example, the app created in the previous section used the .NET Core 3.1 SDK and the base image referred to in the Dockerfile is tagged with 3.1.

Speichern Sie das Dockerfile.Save the Dockerfile file. Die Verzeichnisstruktur des Arbeitsordners sollte wie folgt aussehen.The directory structure of the working folder should look like the following. Einige Dateien und Ordner, die sich auf tieferen Ebenen befinden, sind in diesem Beispiel nicht enthalten, um Platz zu sparen:Some of the deeper-level files and folders have been omitted to save space in the article:

docker-working
    └──App
        ├──Dockerfile
        ├──NetCore.Docker.csproj
        ├──Program.cs
        ├──bin
        │   └──Release
        │       └──netcoreapp3.1
        │           └──publish
        │               ├──NetCore.Docker.deps.json
        │               ├──NetCore.Docker.exe
        │               ├──NetCore.Docker.dll
        │               ├──NetCore.Docker.pdb
        │               └──NetCore.Docker.runtimeconfig.json
        └──obj
            └──...

Führen Sie in Ihrem Terminal den folgenden Befehl aus:From your terminal, run the following command:

docker build -t counter-image -f Dockerfile .

Docker verarbeitet die einzelnen Zeilen aus dem Dockerfile.Docker will process each line in the Dockerfile. Durch den Punkt . im Befehl docker build wird Docker angewiesen, im aktuellen Ordner nach einem Dockerfile zu suchen.The . in the docker build command tells Docker to use the current folder to find a Dockerfile. Dieser Befehl erstellt das Image und ein lokales Repository namens counter-image, das auf dieses Image zeigt.This command builds the image and creates a local repository named counter-image that points to that image. Nachdem dieser Befehl abgeschlossen ist, führen Sie docker images aus, um eine Liste der installierten Images anzuzeigen:After this command finishes, run docker images to see a list of images installed:

docker images
REPOSITORY                              TAG                 IMAGE ID            CREATED             SIZE
counter-image                           latest              e6780479db63        4 days ago          190MB
mcr.microsoft.com/dotnet/core/aspnet    3.1                 e6780479db63        4 days ago          190MB

Beachten Sie, dass die beiden Images den gleichen IMAGE ID-Wert haben.Notice that the two images share the same IMAGE ID value. Der Wert ist zwischen beiden Images gleich, da der einzige Befehl in der Dockerfile war, das neue Image auf Basis eines vorhandenen Images zu erstellen.The value is the same between both images because the only command in the Dockerfile was to base the new image on an existing image. Fügen Sie drei Befehle zum Dockerfile hinzu.Let's add three commands to the Dockerfile. Jeder Befehl erstellt eine neue Imageebene, wobei der letzte Befehl das Image darstellt, auf das der Repositoryeintrag counter-image verweist.Each command creates a new image layer with the final command representing the counter-image repository entry points to.

COPY bin/Release/netcoreapp3.1/publish/ App/
WORKDIR /App
ENTRYPOINT ["dotnet", "NetCore.Docker.dll"]

Der Befehl COPY weist Docker an, den angegebenen Ordner auf Ihrem Computer in einen Ordner im Container zu kopieren.The COPY command tells Docker to copy the specified folder on your computer to a folder in the container. In diesem Beispiel wird der Ordner publish in einen Ordner mit dem Namen App im Container kopiert.In this example, the publish folder is copied to a folder named App in the container.

Mit dem Befehl WORKDIR wird das aktuelle Verzeichnis im Container in App geändert.The WORKDIR command changes the current directory inside of the container to App.

Der nächste Befehl, ENTRYPOINT, weist Docker an, den Container so zu konfigurieren, dass er als ausführbare Datei ausgeführt wird.The next command, ENTRYPOINT, tells Docker to configure the container to run as an executable. Wenn der Container gestartet wird, wird die ENTRYPOINT-Befehl ausgeführt.When the container starts, the ENTRYPOINT command runs. Wenn dieser Befehl beendet wird, wird der Container automatisch beendet.When this command ends, the container will automatically stop.

Führen Sie von Ihrem Terminal aus docker build -t counter-image -f Dockerfile . aus, und wenn dieser Befehl abgeschlossen ist, führen Sie docker images aus.From your terminal, run docker build -t counter-image -f Dockerfile . and when that command finishes, run docker images.

docker build -t counter-image -f Dockerfile .
Sending build context to Docker daemon  1.117MB
Step 1/4 : FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
 ---> e6780479db63
Step 2/4 : COPY bin/Release/netcoreapp3.1/publish/ App/
 ---> d1732740eed2
Step 3/4 : WORKDIR /App
 ---> Running in b1701a42f3ff
Removing intermediate container b1701a42f3ff
 ---> 919aab5b95e3
Step 4/4 : ENTRYPOINT ["dotnet", "NetCore.Docker.dll"]
 ---> Running in c12aebd26ced
Removing intermediate container c12aebd26ced
 ---> cd11c3df9b19
Successfully built cd11c3df9b19
Successfully tagged counter-image:latest

docker images
REPOSITORY                              TAG                 IMAGE ID            CREATED             SIZE
counter-image                           latest              cd11c3df9b19        41 seconds ago      190MB
mcr.microsoft.com/dotnet/core/aspnet    3.1                 e6780479db63        4 days ago          190MB

Jeder Befehl in der Dockerfile generierte eine Ebene und erstellte eine IMAGE ID.Each command in the Dockerfile generated a layer and created an IMAGE ID. Der endgültige IMAGE ID-Wert (Ihrer wird anders sein) ist cd11c3df9b19. Als Nächstes erstellen Sie einen Container auf Grundlage dieses Images.The final IMAGE ID (yours will be different) is cd11c3df9b19 and next you'll create a container based on this image.

Erstellen eines ContainersCreate a container

Da Sie nun ein Image haben, das Ihre App enthält, können Sie einen Container erstellen.Now that you have an image that contains your app, you can create a container. Für die Erstellung eines Containers haben Sie zwei Möglichkeiten.You can create a container in two ways. Erstellen Sie zunächst einen neuen Container, der beendet wird.First, create a new container that is stopped.

docker create --name core-counter counter-image
0f281cb3af994fba5d962cc7d482828484ea14ead6bfe386a35e5088c0058851

Der obige Befehl docker create erstellt einen Container auf Grundlage des Images counter-image.The docker create command from above will create a container based on the counter-image image. Die Ausgabe dieses Befehls zeigt Ihnen die CONTAINER ID (Ihre wird anders sein) des erstellten Containers.The output of that command shows you the CONTAINER ID (yours will be different) of the created container. Um eine Liste aller Container zu erhalten, verwenden Sie den docker ps -a-Befehl:To see a list of all containers, use the docker ps -a command:

docker ps -a
CONTAINER ID    IMAGE            COMMAND                   CREATED           STATUS     PORTS    NAMES
0f281cb3af99    counter-image    "dotnet NetCore.Dock…"    40 seconds ago    Created             core-counter

Verwalten des ContainersManage the container

Der Container wurde mit dem spezifischen Namen core-counter erstellt, der zum Verwalten des Containers verwendet wird.The container was created with a specific name core-counter, this name is used to manage the container. 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:The following example uses the docker start command to start the container, and then uses the docker ps command to only show containers that are running:

docker start core-counter
core-counter

docker ps
CONTAINER ID    IMAGE            COMMAND                   CREATED          STATUS          PORTS    NAMES
2f6424a7ddce    counter-image    "dotnet NetCore.Dock…"    2 minutes ago    Up 11 seconds            core-counter

In ähnlicher Weise beendet der Befehl docker stop den Container.Similarly, the docker stop command will stop the 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:The following example uses the docker stop command to stop the container, and then uses the docker ps command to show that no containers are running:

docker stop core-counter
core-counter

docker ps
CONTAINER ID    IMAGE    COMMAND    CREATED    STATUS    PORTS    NAMES

Herstellen einer Verbindung mit einem ContainerConnect to a container

Nachdem ein Container ausgeführt wird, können Sie sich mit ihm verbinden, um die Ausgabe anzuzeigen.After a container is running, you can connect to it to see the output. Verwenden Sie die Befehle docker start und docker attach, um den Container zu starten und den Ausgabestream anzuzeigen.Use the docker start and docker attach commands to start the container and peek at the output stream. In diesem Beispiel wird die Tastenkombination STRG+C verwendet, um die Trennung vom ausgeführten Container durchzuführen.In this example, the Ctrl+C keystroke is used to detach from the running container. Diese Tastenkombination beendet den Prozess im Container, sofern nicht anders angegeben, was den Container anhalten würde.This keystroke will end the process in the container unless otherwise specified, which would stop the container. Der Parameter --sig-proxy=false stellt sicher, dass STRG+C den Prozess im Container nicht anhält.The --sig-proxy=false parameter ensures that Ctrl+C will not stop the process in the container.

Nachdem Sie den Container abgetrennt haben, fügen Sie ihn erneut an, um sicherzustellen, dass er noch läuft und zählt.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

Löschen eines ContainersDelete a container

Für die Zwecke dieses Artikels wollen Sie nicht, dass Container einfach nur vorhanden sind und nichts tun.For the purposes of this article you don't want containers just hanging around doing nothing. Löschen Sie den zuvor erstellten Container.Delete the container you previously created. Wenn der Container ausgeführt wird, beenden Sie ihn.If the container is running, stop it.

docker stop core-counter

Das folgende Beispiel listet alle Container auf.The following example lists all containers. Anschließend wird der Container mit dem Befehl docker rm gelöscht und dann wird ein zweites Mal auf laufende Container überprüft.It then uses the docker rm command to delete the container, and then checks a second time for any running containers.

docker ps -a
CONTAINER ID    IMAGE            COMMAND                   CREATED          STATUS                        PORTS    NAMES
2f6424a7ddce    counter-image    "dotnet NetCore.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ührungSingle run

Docker bietet den Befehl docker run, um den Container als einen einzigen Befehl zu erstellen und auszuführen.Docker provides the docker run command to create and run the container as a single command. Dieser Befehl erübrigt die Ausführung von docker create und dann docker start.This command eliminates the need to run docker create and then docker start. Sie können diesen Befehl auch so einstellen, dass der Container beim Beenden des Containers automatisch gelöscht wird.You can also set this command to automatically delete the container when the container stops. 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:For example, use docker run -it --rm to do two things, first, automatically use the current terminal to connect to the container, and then when the container finishes, remove it:

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 Core-App,The container also passes parameters into the execution of the .NET Core app. um diese anzuweisen, nur bis 3 zu zählen und dann 3 zu übergeben.To instruct the .NET Core app to count only to 3 pass in 3.

docker run -it --rm counter-image 3
Counter: 1
Counter: 2
Counter: 3

Bei docker run -it hält der Befehl STRG + C den Prozess an, der im Container ausgeführt wird, was wiederum den Container anhält.With docker run -it, the Ctrl+C command will stop process that is running in the container, which in turn, stops the container. Da der Parameter --rm angegeben wurde, wird der Container beim Anhalten des Prozesses automatisch gelöscht.Since the --rm parameter was provided, the container is automatically deleted when the process is stopped. Stellen Sie sicher, dass er nicht vorhanden ist:Verify that it doesn't exist:

docker ps -a
CONTAINER ID    IMAGE    COMMAND    CREATED    STATUS    PORTS    NAMES

Ändern des EINSTIEGSPUNKTSChange the ENTRYPOINT

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.The docker run command also lets you modify the ENTRYPOINT command from the Dockerfile and run something else, but only for that container. Verwenden Sie beispielsweise den folgenden Befehl, um bash oder cmd.exe auszuführen.For example, use the following command to run bash or cmd.exe. Bearbeiten Sie den Befehl nach Bedarf.Edit the command as necessary.

In diesem Beispiel wird ENTRYPOINT in cmd.exe geändert.In this example, ENTRYPOINT is changed to cmd.exe. STRG+C wird gedrückt, um den Prozess zu beenden und den Container anzuhalten.Ctrl+C is pressed to end the process and stop the container.

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 BefehleEssential commands

Docker bietet viele verschiedene Befehle für die Erstellung, Verwaltung und Interaktion mit Containern und Images.Docker has many different commands that create, manage, and interact with containers and images. Diese Docker-Befehle sind für die Verwaltung Ihrer Container unerlässlich:These Docker commands are essential to managing your containers:

Bereinigen von RessourcenClean up resources

In diesem Tutorial haben Sie Container und Images erstellt.During this tutorial, you created containers and images. Wenn Sie möchten, können Sie diese Ressourcen löschen.If you want, delete these resources. Führen Sie die folgenden Befehle für diese Aktionen aus:Use the following commands to

  1. Zum Anzeigen aller ContainerList all containers

    docker ps -a
    
  2. Zum Anhalten aller ausgeführten Container nach NamenStop containers that are running by their name.

    docker stop counter-image
    
  3. Zum Löschen des ContainersDelete the container

    docker rm counter-image
    

Löschen Sie anschließend alle Images, die Sie nicht mehr auf Ihrem Computer benötigen.Next, delete any images that you no longer want on your machine. Löschen Sie das von Ihrer Dockerfile erstellte Image und löschen Sie dann das .NET Core-Image, auf dem die Dockerfile basiert.Delete the image created by your Dockerfile and then delete the .NET Core image the Dockerfile was based on. Sie können die IMAGE ID oder die mit REPOSITORY:TAG formatierte Zeichenfolge verwenden.You can use the IMAGE ID or the REPOSITORY:TAG formatted string.

docker rmi counter-image:latest
docker rmi mcr.microsoft.com/dotnet/core/aspnet:3.1

Verwenden Sie den Befehl docker images, um eine Liste der installierten Images anzuzeigen.Use the docker images command to see a list of images installed.

Tipp

Imagedateien können groß sein.Image files can be large. Normalerweise würden Sie temporäre Container entfernen, die Sie während des Tests und der Entwicklung Ihrer App erstellt haben.Typically, you would remove temporary containers you created while testing and developing your app. In der Regel behalten Sie die Basisimages mit installierter Runtime, wenn Sie planen, andere Images auf Basis dieser Runtime zu erstellen.You usually keep the base images with the runtime installed if you plan on building other images based on that runtime.

Nächste SchritteNext steps