Conteneur d’une application .NET CoreContainerize a .NET Core App

Cette rubrique explique comment empaqueter un exemple d’application .NET existant pour le déploiement en tant que conteneur Windows, après avoir configuré votre environnement, comme décrit dans prise en main : préparer Windows pour les conteneurset exécuter votre premier conteneur comme décrit dans exécuter votre premier conteneur Windows.This topic describes how to package an existing sample .NET app for deployment as a Windows container, after setting up your environment as described in Get started: Prep Windows for containers, and running your first container as described in Run your first Windows container.

Le système de contrôle de code source git doit également être installé sur votre ordinateur.You'll also need the Git source control system installed on your computer. Pour l’installer, visitez git.To install it, visit Git.

Cloner l’exemple de code à partir de GitHubClone the sample code from GitHub

Tous les exemples de code source de conteneur sont conservés dans le référentiel git de documentation de virtualisation (connu de manière informelle en tant que référentiel) dans un dossier appelé windows-container-samples.All container sample source code is kept under the Virtualization-Documentation git repository (known informally as a repo) in a folder called windows-container-samples.

  1. Ouvrez une session PowerShell et accédez au dossier dans lequel vous souhaitez stocker ce dépôt.Open a PowerShell session and change directories to the folder in which you want to store this repository. (Les autres types de fenêtre d’invite de commandes fonctionnent également, mais nos exemples de commandes utilisent PowerShell.)(Other command prompt window types work as well, but our example commands use PowerShell.)

  2. Clonez le référentiel dans votre répertoire de travail actuel :Clone the repo to your current working directory:

    git clone https://github.com/MicrosoftDocs/Virtualization-Documentation.git
    
  3. Accédez à l’exemple de répertoire situé sous Virtualization-Documentation\windows-container-samples\asp-net-getting-started et créez un fichier dockerfile à l’aide des commandes suivantes.Navigate to the sample directory found under Virtualization-Documentation\windows-container-samples\asp-net-getting-started and create a Dockerfile, using the following commands.

    Un fichier dockerfile est comme un Makefile : il s’agit d’une liste d’instructions qui indiquent au moteur de conteneur comment créer l’image de conteneur.A Dockerfile is like a makefile—it's a list of instructions that tell the container engine how to build the container image.

    # Navigate into the sample directory
    Set-Location -Path Virtualization-Documentation\windows-container-samples\asp-net-getting-started
    
    # Create the Dockerfile for our project
    New-Item -Name Dockerfile -ItemType file
    

Écrire le fichier dockerfileWrite the Dockerfile

Ouvrez le fichier dockerfile que vous venez de créer avec l’éditeur de texte de votre choix, puis ajoutez le contenu suivant :Open the Dockerfile you just created with whichever text editor you like and then add the following content:

FROM mcr.microsoft.com/dotnet/core/sdk:2.1 AS build-env
WORKDIR /app

COPY *.csproj ./
RUN dotnet restore

COPY . ./
RUN dotnet publish -c Release -o out

FROM mcr.microsoft.com/dotnet/core/aspnet:2.1
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "asp-net-getting-started.dll"]

Divisez-le en ligne par ligne et expliquez ce que fait chaque instruction.Let's break it down line-by-line and explain what each instructions does.

FROM mcr.microsoft.com/dotnet/core/sdk:2.1 AS build-env
WORKDIR /app

Le premier groupe de lignes déclare à partir de quelle image de base nous allons créer le conteneur.The first group of lines declares from which base image we will use to build our container on top of. Si cette image ne se trouve pas sur le système local, Docker essaie automatiquement de la récupérer.If the local system does not have this image already, then docker will automatically try and fetch it. Le mcr.microsoft.com/dotnet/core/sdk:2.1 est fourni avec le kit de développement logiciel (SDK) .NET Core 2,1 installé. il s’agit donc de la tâche de création de projets ASP .NET Core ciblant la version 2,1.The mcr.microsoft.com/dotnet/core/sdk:2.1 comes comes packaged with the .NET core 2.1 SDK installed, so it's up to the task of building ASP .NET core projects targeting version 2.1. L’instruction suivante modifie le répertoire de travail dans notre conteneur pour qu’il soit /app, donc toutes les commandes qui suivent celle-ci s’exécutent dans ce contexte.The next instruction changes the working directory in our container to be /app, so all commands following this one execute under this context.

COPY *.csproj ./
RUN dotnet restore

Ensuite, ces instructions copient les fichiers. csproj dans le répertoire de /app du conteneur build-env.Next, these instructions copy over the .csproj files into the build-env container's /app directory. Une fois ce fichier copié, .NET le lit, puis récupère toutes les dépendances et tous les outils nécessaires à notre projet.After copying this file, .NET will read from it and then to go out and fetch all the dependencies and tools needed by our project.

COPY . ./
RUN dotnet publish -c Release -o out

Une fois que .NET a extrait toutes les dépendances dans le conteneur build-env, l’instruction suivante copie tous les fichiers sources du projet dans le conteneur.Once .NET has pulled all the dependencies into the build-env container, the next instruction copies all project source files into the container. Nous indiquons ensuite à .NET de publier notre application avec une configuration Release et de spécifier le chemin de sortie dans le.We then tell .NET to publish our application with a release configuration and specify the output path in the .

La compilation doit être effectuée correctement.The compilation should succeed. Nous devons à présent créer l’image finale.Now we must build the final image.

Conseil

Ce guide de démarrage rapide crée un projet .NET Core à partir de la source.This quickstart builds a .NET core project from source. Lors de la génération d’images de conteneur, il est conseillé d’inclure uniquement la charge utile de production et ses dépendances dans l’image de conteneur.When building container images, it's good practice to include only the production payload and its dependencies in the container image. Nous ne voulons pas que le kit de développement logiciel (SDK) .NET Core soit inclus dans notre image finale, car nous avons uniquement besoin du Runtime .NET Core, donc le fichier dockerfile est écrit pour utiliser un conteneur temporaire qui est empaqueté avec le kit de développement logiciel (SDK) appelé build-env pour créer l’application.We don't want the .NET core SDK included in our final image because we only need the .NET core runtime, so the dockerfile is written to use a temporary container that is packaged with the SDK called build-env to build the app.

FROM mcr.microsoft.com/dotnet/core/aspnet:2.1
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "asp-net-getting-started.dll"]

Étant donné que notre application est ASP.NET, nous spécifions une image avec ce Runtime inclus.Since our application is ASP.NET, we specify an image with this runtime included. Ensuite, nous copions tous les fichiers du répertoire de sortie de notre conteneur temporaire dans notre conteneur final.We then copy over all files from the output directory of our temporary container into our final container. Nous configurons notre conteneur pour qu’il s’exécute avec notre nouvelle application comme son point d’entrée au démarrage du conteneur.We configure our container to run with our new app as its entrypoint when the container starts

Nous avons écrit le fichier dockerfile pour effectuer une génération en plusieurs étapes.We have written the dockerfile to perform a multi-stage build. Lorsque le fichier dockerfile est exécuté, il utilise le conteneur temporaire, build-env, avec le kit de développement logiciel (SDK) .NET Core 2,1 pour générer l’exemple d’application, puis copier les fichiers binaires générés dans un autre conteneur contenant uniquement le Runtime .NET Core 2,1, afin de réduire la taille du conteneur final.When the dockerfile is executed, it will use the temporary container, build-env, with the .NET core 2.1 SDK to build the sample app and then copy the outputted binaries into another container containing only the .NET core 2.1 runtime so that we minimized the size of the final container.

Générer et exécuter l’applicationBuild and run the app

Une fois l’fichier dockerfile écrit, nous pouvons pointer le Dockeur sur notre fichier dockerfile et lui demander de générer et d’exécuter l’image :With the Dockerfile written, we can point Docker at our Dockerfile and tell it to build and then run our image:

  1. Dans une fenêtre d’invite de commandes, accédez au répertoire où se trouve le fichier dockerfile, puis exécutez la commande dockr Build pour générer le conteneur à partir du fichier dockerfile.In a command prompt window, navigate to the directory where the dockerfile resides and then run the docker build command to build the container from the Dockerfile.

    docker build -t my-asp-app .
    
  2. Pour exécuter le conteneur qui vient d’être créé, exécutez la commande dockr Run .To run the newly built container, run the docker run command.

    docker run -d -p 5000:80 --name myapp my-asp-app
    

    Étudier en détail cette commande :Let's dissect this command:

    • -d indique à Dockr exécutez d’exécuter le conteneur’détaché', ce qui signifie qu’aucune console n’est raccordée à la console à l’intérieur du conteneur.-d tells Docker tun run the container 'detached', meaning no console is hooked up to the console inside the container. Le conteneur s’exécute en arrière-plan.The container runs in the background.
    • -p 5000:80 indique à l’arrimeur de mapper le port 5000 sur l’hôte au port 80 dans le conteneur.-p 5000:80 tells Docker to map port 5000 on the host to port 80 in the container. Chaque conteneur obtient sa propre adresse IP.Each container gets its own IP address. ASP .NET écoute par défaut sur le port 80.ASP .NET listens by default on port 80. Le mappage de port nous permet d’accéder à l’adresse IP de l’hôte au niveau du port mappé et l’arrimeur transmet tout le trafic vers le port de destination à l’intérieur du conteneur.Port mapping allows us to go to the host's IP address at the mapped port and Docker will forward all traffic to the destination port inside the container.
    • --name myapp indique à Dockr d’attribuer à ce conteneur un nom pratique à interroger (au lieu d’avoir à Rechercher l’ID contaienr assigné au moment de l’exécution par docker).--name myapp tells Docker to give this container a convenient name to query by (instead of having to look up the contaienr ID assigned at runtime by Docker).
    • my-asp-app est l’image que l’Assistant de connexion doit exécuter.my-asp-app is the image we want Docker to run. Il s’agit de l’image de conteneur produite comme l’aboutissement du processus de docker build.This is the container image produced as the culmination of the docker build process.
  3. Ouvrez un navigateur Web de navigateur Web et accédez à http://localhost:5000 pour voir votre application en conteneur, comme illustré dans cette capture d’écran :Open a web browser web browser and navigate to http://localhost:5000 to be see your containerized application, as shown in this screenshot:

    ASP.NET Core page Web, exécution à partir de localhost dans un conteneur

Étapes suivantesNext steps

  1. L’étape suivante consiste à publier votre application Web ASP.NET en conteneur dans un registre privé à l’aide de Azure Container Registry.The next step is to publish your containerized ASP.NET web app to a private registry using Azure Container Registry. Cela vous permet de le déployer dans votre organisation.This allows you to deploy it in your org.

    Lorsque vous accédez à la section où vous envoyez votre image conteneur vers le registre, spécifiez le nom de l’application ASP.net que vous venez de empaqueter (my-asp-app) avec votre registre de conteneurs (par exemple : contoso-container-registry) :When you get to the section where you push your container image to the registry, specify the name of the ASP.NET app you just packaged (my-asp-app) along with your container registry (for example: contoso-container-registry):

    docker tag my-asp-app contoso-container-registry.azurecr.io/my-asp-app:v1
    

    Pour voir d’autres exemples d’applications et les fichiers dockerfile associés, consultez exemples de conteneurs supplémentaires.To see more app samples and their associated dockerfiles, see additional container samples.

  2. Une fois que vous avez publié votre application dans le registre de conteneurs, l’étape suivante consiste à déployer l’application sur un cluster Kubernetes que vous créez avec le service Azure Kubernetes.Once you've published your app to the container registry, the next step would be to deploy the app to a Kubernetes cluster that you create with Azure Kubernetes Service.