Erstellen von Docker-Images für .NET Core-AnwendungenBuilding Docker Images for .NET Core Applications

In diesem Lernprogramm liegt der Schwerpunkt auf wie .NET Core in Docker verwendet.In this tutorial, We focus on how to use .NET Core on Docker. Zunächst untersuchen wir die verschiedenen Docker-Images bereitgestellt und verwaltet von Microsoft und Anwendungsfälle.First, we explore the different Docker images offered and maintained by Microsoft, and use cases. Wir Informationen klicken Sie dann zum Erstellen und dockerize eine ASP.NET Core-app.We then learn how to build and dockerize an ASP.NET Core app.

Im Verlauf dieses Lernprogramms erfahren Sie:During the course of this tutorial, you learn:

  • Erfahren Sie mehr über Microsoft .NET Core Docker-imagesLearn about Microsoft .NET Core Docker images
  • Abrufen einer ASP.NET Core Beispiel-app zu DockerizeGet an ASP.NET Core sample app to Dockerize
  • Der ASP.NET-beispielanwendung lokal ausführenRun the ASP.NET sample app locally
  • Erstellen Sie und führen Sie das Beispiel für Linux-Containern mit DockerBuild and run the sample with Docker for Linux containers
  • Erstellen Sie und führen Sie das Beispiel mit Docker für Windows-ContainernBuild and run the sample with Docker for Windows containers

Docker-Image-OptimierungenDocker Image Optimizations

Beim Erstellen von Docker-Images für Entwickler standen drei wichtige Szenarios im Mittelpunkt:When building Docker images for developers, we focused on three main scenarios:

  • Images zum Entwickeln von .NET Core-AppsImages used to develop .NET Core apps
  • Images zum Erstellen von .NET Core-AppsImages used to build .NET Core apps
  • Images zum Ausführen von .NET Core-AppsImages used to run .NET Core apps

Warum drei Images?Why three images? Beim Entwickeln, erstellen und Ausführen von Sammelartikeleinheit, haben wir die unterschiedliche Prioritäten.When developing, building, and running containerized applications, we have different priorities.

  • Entwicklung: der Priorität konzentriert sich auf Änderungen und die Fähigkeit zum Debuggen der Änderungen schnell zu durchlaufen.Development: The priority focuses on quickly iterate changes, and the ability to debug the changes. Nicht die Größe des Bilds wird so wichtig ist, sondern können Sie Änderungen am Code vornehmen und schnell?The size of the image isn't as important, rather can you make changes to your code and see them quickly?

  • Build: dieses Image enthält alles, was zum Kompilieren der app, die der Compiler und alle anderen Abhängigkeiten zur Optimierung der Binärdateien umfasst benötigen.Build: This image contains everything needed to compile your app, which includes the compiler and any other dependencies to optimize the binaries. Sie verwenden das Build-Image, um Objekte zu erstellen, die Sie in einer Produktions-Bild platzieren.You use the build image to create the assets you place into a production image. Das Image Build würde für die fortlaufende Integration oder in einer Buildumgebung verwendet werden.The build image would be used for continuous integration, or in a build environment. Dieser Ansatz ermöglicht, einen Build-Agent zum Kompilieren und erstellen Sie die Anwendung (mit allen erforderlichen Abhängigkeiten) in einem Build bildinstanz.This approach allows a build agent to compile and build the application (with all the required dependencies) in a build image instance. Der Build-Agent muss nur wissen, wie dieses Docker-Image ausgeführt wird.Your build agent only needs to know how to run this Docker image.

  • Produktion: wie schnell Sie bereitstellen und starten Sie das Abbild?Production: How fast you can deploy and start your image? Dieses Image ist klein, damit die Leistung des Netzwerks aus der Docker-Registrierung für die Docker-Hosts optimiert ist.This image is small so network performance from your Docker Registry to your Docker hosts is optimized. Die Inhalte sind bereit zur Ausführung und ermöglichen in kürzester Zeit nach dem Dockerlauf das Verarbeiten von Ergebnissen.The contents are ready to run enabling the fastest time from Docker run to processing results. Dynamischen Codekompilierung ist nicht in der Docker-Modell erforderlich.Dynamic code compilation isn't needed in the Docker model. Die Inhalte, die Sie in diesem Image platzieren, sind auf die Binärdateien und Inhalte beschränkt, die zum Ausführen der Anwendung erforderlich sind.The content you place in this image would be limited to the binaries and content needed to run the application.

    Z. B. die dotnet publish Ausgabe enthält:For example, the dotnet publish output contains:

    • die kompilierten Binärdateienthe compiled binaries
    • js und CSS-Dateien.js and .css files

Der Grund für das Schließen der dotnet publish Ausgabe des Befehls in die Produktion Abbildung ist die Beibehaltung seiner "Größe auf ein Minimum.The reason to include the dotnet publish command output in your production image is to keep its' size to a minimum.

Einige .NET Core-Abbilder freigeben Ebenen zwischen verschiedenen Tags damit Herunterladen der neuesten Tags eine relativ einfache Prozess ist.Some .NET Core images share layers between different tags so downloading the latest tag is a relatively lightweight process. Wenn Sie bereits über eine ältere Version auf dem Computer verfügen, verringert diese Architektur des erforderlichen Speicherplatzes.If you already have an older version on your machine, this architecture decreases the needed disk space.

Wenn mehrere Anwendungen allgemeine Images auf dem gleichen Computer verwenden, ist die allgemeine Bilder Arbeitsspeicher freigegeben.When multiple applications use common images on the same machine, memory is shared between the common images. Die Bilder müssen die weiterzuleitenden identisch sein.The images must be the same to be shared.

Docker-Image-VariantenDocker image variations

Um die oben aufgeführten Ziele zu erreichen, bieten wir Image Varianten unter microsoft/dotnet .To achieve the goals above, we provide image variants under microsoft/dotnet.

  • microsoft/dotnet:<version>-sdk(microsoft/dotnet:2.0.0-sdk) Dieses Image enthält .NET Core SDK, das die .NET Core und über die Befehlszeile Tools (CLI) enthält.microsoft/dotnet:<version>-sdk(microsoft/dotnet:2.0.0-sdk) This image contains the .NET Core SDK, which includes the .NET Core and Command Line Tools (CLI). Dieses Image ist dem Entwicklungsszenario zugeordnet.This image maps to the development scenario. Verwenden Sie dieses Image für lokale Entwicklung, Debuggen und Komponententests.You use this image for local development, debugging, and unit testing. Dieses Image kann auch für Build-Szenarios verwendet werden.This image can also be used for your build scenarios. Mithilfe von microsoft/dotnet:sdk erhalten Sie immer die neueste Version.Using microsoft/dotnet:sdk always gives you the latest version.

Tipp

Wenn Sie über Ihren Anforderungen nicht sicher sind, möchten Sie verwenden die microsoft/dotnet:<version>-sdk Bild.If you are unsure about your needs, you want to use the microsoft/dotnet:<version>-sdk image. Als "de facto"-Image, es wurde entwickelt, als ein Throw verwendet werden soll beseitigen Container (Quellcode bereitgestellt, und starten Sie den Container aus, um die app zu starten), und als Basis-Image zum Erstellen von anderen Bildern aus.As the "de facto" image, it's designed to be used as a throw away container (mount your source code and start the container to start your app), and as the base image to build other images from.

  • microsoft/dotnet:<version>-runtime: Dieses Image enthält die .NET Core (Common Language Runtime und Bibliotheken) und ist optimiert für die Ausführung von .NET Core-apps in Produktion.microsoft/dotnet:<version>-runtime: This image contains the .NET Core (runtime and libraries) and is optimized for running .NET Core apps in production.

Alternative ImagesAlternative images

Zusätzliche Images zu den optimierten Szenarios für Entwicklung, Erstellung und Produktion:In addition to the optimized scenarios of development, build and production, we provide additional images:

  • microsoft/dotnet:<version>-runtime-deps: Der Runtime Einzahlgn Abbild enthält das Betriebssystem mit alle systemeigenen Abhängigkeiten von .NET Core benötigt werden.microsoft/dotnet:<version>-runtime-deps: The runtime-deps image contains the operating system with all of the native dependencies needed by .NET Core. Dieses Image ist für eigenständige Anwendungen.This image is for self-contained applications.

Aktuelle Versionen jeder Variante:Latest versions of each variant:

  • microsoft/dotnetoder microsoft/dotnet:latest (Alias für das SDK-Image)microsoft/dotnet or microsoft/dotnet:latest (alias for the SDK image)
  • microsoft/dotnet:sdk
  • microsoft/dotnet:runtime
  • microsoft/dotnet:runtime-deps

Beispiele zum DurchsuchenSamples to explore

Ihre erste ASP.NET Core Docker-appYour first ASP.NET Core Docker app

Für dieses Lernprogramm können eine ASP.NET Core Docker-beispielanwendung für die app verwenden wir dockerize möchten.For this tutorial, lets use an ASP.NET Core Docker sample application for the app we want to dockerize. Diese beispielanwendung für ASP.NET Core Docker veranschaulicht ein best Practice-Muster für die Erstellung von Docker-Abbilder für ASP.NET Core apps für die Produktion.This ASP.NET Core Docker sample application demonstrates a best practice pattern for building Docker images for ASP.NET Core apps for production. Das Beispiel funktioniert mit Linux und Windows-Containern.The sample works with both Linux and Windows containers.

Im Beispiel dockerfile-Datei wird ein ASP.NET Core Docker anwendungsimage basierend auf ASP.NET Core Runtime Docker-Basis-Image erstellt.The sample Dockerfile creates an ASP.NET Core application Docker image based off of the ASP.NET Core Runtime Docker base image.

Er verwendet die mehrstufiger Docker build Funktion an:It uses the Docker multi-stage build feature to:

  • Erstellen Sie das Beispiel in einem Container auf Grundlage der größere ASP.NET Core erstellen Docker-Basis-Imagebuild the sample in a container based on the larger ASP.NET Core Build Docker base image
  • kopiert das Ergebnis des letzten Builds in ein Docker Bild auf der Grundlage der kleinere ASP.NET Core Docker-Laufzeit-Basis-Imagecopies the final build result into a Docker image based on the smaller ASP.NET Core Docker Runtime base image

Hinweis

Der Build-Image enthält erforderlichen Tools zum Erstellen von Anwendungen, während der Laufzeit-Image nicht der Fall ist.The build image contains required tools to build applications while the runtime image does not.

Erforderliche KomponentenPrerequisites

Zum Erstellen und ausführen, installieren Sie die folgenden Elemente:To build and run, install the following items:

.NET core SDK 2.0.NET Core 2.0 SDK

  • Installieren Sie .NET Core SDK 2.0.Install .NET Core SDK 2.0.

  • Installieren Sie Ihre bevorzugten Code-Editor, sofern Sie noch nicht geschehen.Install your favorite code editor, if you haven't already.

Tipp

Zum Installieren von eines Code-Editors erforderlich?Need to install a code editor? Wiederholen Sie den Visual Studio!Try Visual Studio!

Installieren von Docker-ClientInstalling Docker Client

Installieren Sie Docker 17.06 oder höher des Docker-Clients.Install Docker 17.06 or later of the Docker client.

In kann der Docker-Client installiert werden:The Docker client can be installed in:

Installieren Git für die beispielrepositoryInstalling Git for sample repository

  • Installieren Sie Git Wenn Sie das Repository klonen möchten.Install git if you wish to clone the repository.

Abrufen der beispielanwendungGetting the sample application

Die einfachste Möglichkeit zum Abrufen des Beispiels wird durch das Klonen der beispielrepository mit Git, verwenden Sie die folgenden Anweisungen:The easiest way to get the sample is by cloning the samples repository with git, using the following instructions:

git clone https://github.com/dotnet/dotnet-docker-samples/

Sie können auch das Repository (er ist klein) herunterladen, als eine ZIP-Datei aus dem beispielrepository .NET Core Docker.You can also download the repository (it is small) as a zip from the .NET Core Docker samples repository.

Die ASP.NET app lokal ausführenRun the ASP.NET app locally

Als Bezugspunkt, bevor die Anwendung containerisiert wird, führen Sie die Anwendung zunächst lokal aus.For a reference point, before we containerize the application, first run the application locally.

Sie können erstellen und führen Sie die Anwendung lokal mit dem .NET Core 2.0 SDK mit den folgenden Befehlen (die Anweisungen gehen davon aus den Stamm des Repositorys):You can build and run the application locally with the .NET Core 2.0 SDK using the following commands (The instructions assume the root of the repository):

cd aspnetapp
dotnet run

Nachdem die Anwendung gestartet wird, besuchen Sie http://localhost: 5000 in Ihrem Webbrowser.After the application starts, visit http://localhost:5000 in your web browser.

Erstellen Sie und führen Sie das Beispiel für Linux-Containern mit DockerBuild and run the sample with Docker for Linux containers

Sie können erstellen und führen Sie das Beispiel in Docker mithilfe von Linux-Container mit den folgenden Befehlen (die Anweisungen gehen davon aus den Stamm des Repositorys):You can build and run the sample in Docker using Linux containers using the following commands (The instructions assume the root of the repository):

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

Hinweis

Die docker run "-p"-Argument Maps port 5000 auf dem lokalen Computer an Port 80 im Container (Port Zuordnung ist host:container).The docker run '-p' argument maps port 5000 on your local machine to port 80 in the container (the port mapping form is host:container). Weitere Informationen finden Sie unter der "Docker run" Verweis auf Befehlszeilenparameter.For more information, see the docker run reference on command-line parameters.

Nachdem die Anwendung gestartet wird, besuchen Sie http://localhost: 5000 in Ihrem Webbrowser.After the application starts, visit http://localhost:5000 in your web browser.

Erstellen Sie und führen Sie das Beispiel mit Docker für Windows-ContainernBuild and run the sample with Docker for Windows containers

Sie können erstellen und führen Sie das Beispiel in Docker mithilfe von Windows-Container mit den folgenden Befehlen (die Anweisungen gehen davon aus den Stamm des Repositorys):You can build and run the sample in Docker using Windows containers using the following commands (The instructions assume the root of the repository):

cd aspnetapp
docker build -t aspnetapp .
docker run -it --rm --name aspnetcore_sample aspnetapp

Wichtig

Sie müssen zu navigieren, die Container IP-Adresse (im Gegensatz zu http://localhost) in Ihrem Browser direkt bei Verwendung der Windows-Containern.You must navigate to the container IP address (as opposed to http://localhost) in your browser directly when using Windows containers. Sie erhalten die IP-Adresse des Containers mit den folgenden Schritten:You can get the IP address of your container with the following steps:

  • Öffnen Sie eine andere Befehlszeile.Open up another command prompt.
  • Führen Sie docker ps auf Ihre ausgeführten Container angezeigt.Run docker ps to see your running containers. Der Container "Aspnetcore_sample" sollte angezeigt werden.The "aspnetcore_sample" container should be there.
  • Führen Sie docker exec aspnetcore_sample ipconfig aus.Run docker exec aspnetcore_sample ipconfig.
  • Kopieren Sie die Container-IP-Adresse ein, und fügen Sie in Ihrem Browser (z. B. 172.29.245.43).Copy the container IP address and paste into your browser (for example, 172.29.245.43).

Hinweis

Docker Exec unterstützt identifizierende Container mit dem Namen "oder" Hash.Docker exec supports identifying containers with name or hash. In unserem Beispiel wird der Name (Aspnetcore_sample) verwendet.The name (aspnetcore_sample) is used in our example.

Sehen Sie im folgenden Beispiel des Abrufs der IP-Adresse von ausgeführten Windows-Container.See the following example of how to get the IP address of a running Windows container.

docker exec aspnetcore_sample ipconfig

Windows IP Configuration

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

Hinweis

Docker Exec führt einen neuen Befehl in einem ausgeführten Container.Docker exec runs a new command in a running container. Weitere Informationen finden Sie unter der Referenz zu Docker Exec auf Befehlszeilenparameter.For more information, see the docker exec reference on command-line parameters.

Sie können eine Anwendung, die bereit für die Bereitstellung bis hin zur Produktion, die lokal mithilfe von erzeugen die Dotnet veröffentlichen Befehl.You can produce an application that is ready to deploy to production locally using the dotnet publish command.

dotnet publish -c release -o published

Hinweis

Arguments - C Release wird die Anwendung im Releasemodus (der Standardwert ist Debug-Modus).The -c release argument builds the application in release mode (the default is debug mode). Weitere Informationen finden Sie unter der Dotnet Referenz run auf Befehlszeilenparameter.For more information, see the dotnet run reference on command-line parameters.

Führen Sie die Anwendung auf Windows mithilfe des folgenden Befehls.You can run the application on Windows using the following command.

dotnet published\aspnetapp.dll

Führen Sie die Anwendung auf Linux oder MacOS mithilfe des folgenden Befehls.You can run the application on Linux or macOS using the following command.

dotnet published/aspnetapp.dll

In diesem Beispiel verwendete Docker-ImagesDocker Images used in this sample

In diesem Beispiel werden die folgenden Docker-Images verwendet.The following Docker images are used in this sample

  • microsoft/aspnetcore-build:2.0
  • microsoft/aspnetcore:2.0

Herzlichen Glückwunsch!Congratulations! Sie haben soeben:you have just:

  • Microsoft .NET Core Docker Images gelerntLearned about Microsoft .NET Core Docker images
  • Erhalten eine ASP.NET Core Beispiel-app zu DockerizeGot an ASP.NET Core sample app to Dockerize
  • Wurde der ASP.NET-beispielanwendung lokal ausgeführtRan the ASP.NET sample app locally
  • Erstellt und die Ausführung des Beispiels mit Docker für Linux-ContainerBuilt and ran the sample with Docker for Linux containers
  • Erstellt und im Beispiel mit Docker für Windows-Container ausgeführt haben.Built and ran the sample with Docker for Windows containers

Nächste SchritteNext Steps

Hier sind die nächsten Schritte, die Sie ergreifen können:Here are some next steps you can take:

Hinweis

Wenn Sie nicht über ein Azure-Abonnement verfügen registrieren Sie sich noch heute für eine kostenlose 30-Tage-Konto verhindern und $200 Azure-Guthaben auf eine beliebige Kombination von Azure-Dienste zu testen.If you do not have an Azure subscription, sign up today for a free 30-day account and get $200 in Azure Credits to try out any combination of Azure services.