Docker-Images für ASP.NET CoreDocker images for ASP.NET Core

In diesem Tutorial wird gezeigt, wie eine ASP.NET Core-App in Docker-Containern ausgeführt wird.This tutorial shows how to run an ASP.NET Core app in Docker containers.

In diesem Tutorial:In this tutorial, you:

  • Allgemeines zu Docker-Images in Microsoft .NET CoreLearn about Microsoft .NET Core Docker images
  • Herunterladen einer ASP.NET Core-Beispiel-AppDownload an ASP.NET Core sample app
  • Lokales Ausführen der Beispiel-AppRun the sample app locally
  • Ausführen der Beispiel-App in Linux-ContainernRun the sample app in Linux containers
  • Ausführen der Beispiel-App in Windows-ContainernRun the sample app in Windows containers
  • Manuelles Erstellen und BereitstellenBuild and deploy manually

ASP.NET Core Docker-ImagesASP.NET Core Docker images

Für dieses Tutorial laden Sie eine ASP.NET Core-Beispiel-App herunter, und führen sie in Docker-Containern aus.For this tutorial, you download an ASP.NET Core sample app and run it in Docker containers. Das Beispiel funktioniert sowohl mit Linux- als auch mit Windows-Containern.The sample works with both Linux and Windows containers.

Die Dockerfile-Beispieldatei verwendet das Docker-Feature für mehrstufige Builds zur Erstellung und Ausführung in verschiedenen Containern.The sample Dockerfile uses the Docker multi-stage build feature to build and run in different containers. Die Erstellungs- und Ausführungscontainer werden aus Images erstellt, die im Docker-Hub von Microsoft bereitgestellt werden:The build and run containers are created from images that are provided in Docker Hub by Microsoft:

  • dotnet/core/sdk

    Das Beispiel verwendet dieses Image für die Erstellung der App.The sample uses this image for building the app. Das Image enthält das .NET Core SDK mit den Befehlszeilentools (CLI).The image contains the .NET Core SDK, which includes the Command Line Tools (CLI). Das Image ist für die lokale Entwicklung sowie für das Debuggen und für Komponententests optimiert.The image is optimized for local development, debugging, and unit testing. Die für Entwicklung und Kompilierung installierten Tools machen dies zu einem relativ großen Image.The tools installed for development and compilation make this a relatively large image.

  • dotnet/core/aspnet

    Das Beispiel verwendet dieses Image zum Ausführen der App.The sample uses this image for running the app. Das Image enthält die ASP.NET Core-Runtime und -Bibliotheken und wurde für das Ausführen von Apps in der Produktion optimiert.The image contains the ASP.NET Core runtime and libraries and is optimized for running apps in production. Das Image wurde im Hinblick auf Bereitstellungs- und App-Startgeschwindigkeit entwickelt und ist daher relativ klein, sodass die Netzwerkleistung von Docker-Registrierung zu Docker-Host optimiert ist.Designed for speed of deployment and app startup, the image is relatively small, so network performance from Docker Registry to Docker host is optimized. Nur die zum Ausführen einer App benötigten Binärdateien und Inhalte werden in den Container kopiert.Only the binaries and content needed to run an app are copied to the container. Die Inhalte sind bereit zur Ausführung und ermöglichen in kürzester Zeit nach dem Docker run das Starten der App.The contents are ready to run, enabling the fastest time from Docker run to app startup. Die dynamische Codekompilierung ist im Docker-Modell nicht erforderlich.Dynamic code compilation isn't needed in the Docker model.

VoraussetzungenPrerequisites

Herunterladen der Beispiel-AppDownload the sample app

Lokales Ausführen der AppRun the app locally

  • Navigieren Sie zum Projektordner unter dotnet-docker/samples/aspnetapp/aspnetapp.Navigate to the project folder at dotnet-docker/samples/aspnetapp/aspnetapp.

  • Führen Sie den folgenden Befehl aus, um die App zu erstellen und lokal auszuführen:Run the following command to build and run the app locally:

    dotnet run
    
  • Navigieren Sie in einem Browser zu http://localhost:5000, um die App zu testen.Go to http://localhost:5000 in a browser to test the app.

  • Drücken Sie Strg+C an der Eingabeaufforderung, um die App zu stoppen.Press Ctrl+C at the command prompt to stop the app.

Ausführen in einem Linux-ContainerRun in a Linux container

  • Wechseln Sie im Docker-Client zu Linux-Containern.In the Docker client, switch to Linux containers.

  • Navigieren Sie zum Dockerfile-Ordner unter dotnet-docker/samples/aspnetapp.Navigate to the Dockerfile folder at dotnet-docker/samples/aspnetapp.

  • Führen Sie die folgenden Befehle zum Erstellen und Ausführen des Beispiels in Docker aus:Run the following commands to build and run the sample in Docker:

    docker build -t aspnetapp .
    docker run -it --rm -p 5000:80 --name aspnetcore_sample aspnetapp
    

    Argumente des build-Befehls:The build command arguments:

    • Nennen Sie das Image „aspnetapp“.Name the image aspnetapp.
    • Suchen Sie nach der Dockerfil-Datei im aktuellen Ordner (Punkt am Ende).Look for the Dockerfile in the current folder (the period at the end).

    Argumente des run-Befehls:The run command arguments:

    • Ordnen Sie ein pseudo-TTY zu, und halten Sie es offen, wenn auch nicht angefügt.Allocate a pseudo-TTY and keep it open even if not attached. (Dieselben Auswirkungen wie --interactive --tty.)(Same effect as --interactive --tty.)
    • Entfernen Sie den Container, wenn er beendet wird.Automatically remove the container when it exits.
    • Ordnen Sie Port 5000 auf dem lokalen Computer Port 80 im Container zu.Map port 5000 on the local machine to port 80 in the container.
    • Nennen Sie den Container „aspnetcore_sample“.Name the container aspnetcore_sample.
    • Geben Sie das aspnetapp-Image an.Specify the aspnetapp image.
  • Navigieren Sie in einem Browser zu http://localhost:5000, um die App zu testen.Go to http://localhost:5000 in a browser to test the app.

Ausführen in einem Windows-ContainerRun in a Windows container

  • Wechseln Sie im Docker-Windows zu Linux-Containern.In the Docker client, switch to Windows containers.

Navigieren Sie zum Dockerfile-Ordner unter dotnet-docker/samples/aspnetapp.Navigate to the docker file folder at dotnet-docker/samples/aspnetapp.

  • Führen Sie die folgenden Befehle zum Erstellen und Ausführen des Beispiels in Docker aus:Run the following commands to build and run the sample in Docker:

    docker build -t aspnetapp .
    docker run -it --rm --name aspnetcore_sample aspnetapp
    
  • Für Windows-Container benötigen Sie die IP-Adresse des Containers (Navigieren zu http://localhost:5000 funktioniert nicht):For Windows containers, you need the IP address of the container (browsing to http://localhost:5000 won't work):

    • Öffnen Sie eine weitere Eingabeaufforderung.Open up another command prompt.

    • Führen Sie docker ps aus, um die ausgeführten Container anzuzeigen.Run docker ps to see the running containers. Vergewissern Sie sich, dass der Container „aspnetcore_sample“ vorhanden ist.Verify that the "aspnetcore_sample" container is there.

    • Führen Sie docker exec aspnetcore_sample ipconfig aus, um die IP-Adresse des Containers anzuzeigen.Run docker exec aspnetcore_sample ipconfig to display the IP address of the container. Die Ausgabe des Befehls sieht wie im folgenden Beispiel aus:The output from the command looks like this example:

      Ethernet adapter Ethernet:
      
         Connection-specific DNS Suffix  . : contoso.com
         Link-local IPv6 Address . . . . . : fe80::1967:6598:124:cfa3%4
         IPv4 Address. . . . . . . . . . . : 172.29.245.43
         Subnet Mask . . . . . . . . . . . : 255.255.240.0
         Default Gateway . . . . . . . . . : 172.29.240.1
      
  • Kopieren Sie die IPv4-Adresse des Containers (z.B. 172.29.245.43), und fügen Sie sie in die Adressleiste des Browsers ein, um die App zu testen.Copy the container IPv4 address (for example, 172.29.245.43) and paste into the browser address bar to test the app.

Manuelles Erstellen und BereitstellenBuild and deploy manually

In einigen Szenarien möchten Sie eine App möglicherweise in einem Container bereitstellen, indem Sie die zur Laufzeit benötigten Anwendungsdateien in diesen kopieren.In some scenarios, you might want to deploy an app to a container by copying to it the application files that are needed at run time. In diesem Abschnitt wird gezeigt, wie Sie die Bereitstellung manuell ausführen.This section shows how to deploy manually.

  • Navigieren Sie zum Projektordner unter dotnet-docker/samples/aspnetapp/aspnetapp.Navigate to the project folder at dotnet-docker/samples/aspnetapp/aspnetapp.

  • Führen Sie den Befehl dotnet publish aus:Run the dotnet publish command:

    dotnet publish -c Release -o published
    

    Argumente des Befehls:The command arguments:

    • Erstellen Sie die Anwendung im Releasemodus (der Standardwert ist der Debugmodus).Build the application in release mode (the default is debug mode).
    • Erstellen Sie die Dateien im Ordner published.Create the files in the published folder.
  • Führen Sie die Anwendung aus.Run the application.

    • Windows:Windows:

      dotnet published\aspnetapp.dll
      
    • Linux:Linux:

      dotnet published/aspnetapp.dll
      
  • Navigieren Sie zu http://localhost:5000, um die Startseite anzuzeigen.Browse to http://localhost:5000 to see the home page.

Erstellen Sie eine neue Dockerfile-Datei, und verwenden Sie den docker build .-Befehl zum Erstellen des Containers, um die manuell veröffentlichte Anwendung innerhalb eines Docker-Containers zu verwenden.To use the manually published application within a Docker container, create a new Dockerfile and use the docker build . command to build the container.

FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS runtime
WORKDIR /app
COPY published/aspnetapp.dll ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

Die Dockerfile-DateiThe Dockerfile

Dies ist die Dockerfile-Datei, die vom zuvor ausgeführten Befehl docker build verwendet wurde.Here's the Dockerfile used by the docker build command you ran earlier. Dabei wird dotnet publish auf die gleiche Weise wie in diesem Abschnitt zum Erstellen und Bereitstellen verwendet.It uses dotnet publish the same way you did in this section to build and deploy.

FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build
WORKDIR /app

# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore

# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /app/aspnetapp
RUN dotnet publish -c Release -o out

FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS runtime
WORKDIR /app
COPY --from=build /app/aspnetapp/out ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime
WORKDIR /app
COPY published/aspnetapp.dll ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

Die Dockerfile-DateiThe Dockerfile

Dies ist die Dockerfile-Datei, die vom zuvor ausgeführten Befehl docker build verwendet wurde.Here's the Dockerfile used by the docker build command you ran earlier. Dabei wird dotnet publish auf die gleiche Weise wie in diesem Abschnitt zum Erstellen und Bereitstellen verwendet.It uses dotnet publish the same way you did in this section to build and deploy.

FROM mcr.microsoft.com/dotnet/core/sdk:3.0 AS build
WORKDIR /app

# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore

# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /app/aspnetapp
RUN dotnet publish -c Release -o out

FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime
WORKDIR /app
COPY --from=build /app/aspnetapp/out ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

Wie bereits in der vorherigen Dockerfile-Datei erwähnt, werden *.csproj-Dateien kopiert und als unterschiedliche Ebenen wiederhergestellt.As noted in the preceding Dockerfile, the *.csproj files are copied and restored as distinct layers. Wenn der Befehl docker build ein Image erstellt, wird ein integrierter Cache verwendet.When the docker build command builds an image, it uses a built-in cache. Wenn sich die *.csproj-Dateien seit der letzten Ausführung des Befehls docker build nicht geändert haben, muss der dotnet restore-Befehl nicht noch mal ausgeführt werden.If the *.csproj files haven't changed since the docker build command last ran, the dotnet restore command doesn't need to run again. Stattdessen wird der integrierte Cache für die entsprechende dotnet restore-Ebene verwendet.Instead, the built-in cache for the corresponding dotnet restore layer is reused. Weitere Informationen finden Sie unter Best Practices für Dockerfiles.For more information, see Best practices for writing Dockerfiles.

Zusätzliche RessourcenAdditional resources

Nächste SchritteNext steps

Im Git-Repository, das die Beispiel-App enthält, finden Sie auch die Dokumentation.The Git repository that contains the sample app also includes documentation. Eine Übersicht über die im Repository verfügbaren Ressourcen finden Sie in der Infodatei.For an overview of the resources available in the repository, see the README file. Insbesondere erfahren Sie, wie Sie HTTPS implementieren:In particular, learn how to implement HTTPS: