Conteneuriser une application .NET Core
S’applique à : Windows Server 2025, Windows Server 2022, Windows Server 2019, Windows Server 2016
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éparation de Windows pour conteneurset exécution de votre premier conteneur comme décrit dans Exécuter votre premier conteneur Windows.
Vous aurez également besoin du système de contrôle de code source Git installé sur votre ordinateur. Pour l’installer, visitez Git.
Cloner l’exemple de code à partir de GitHub
Tous les exemples de code source de conteneur sont conservés sous le dépôt git virtualization-documentation dans un dossier appelé windows-container-samples
.
Ouvrez une session PowerShell et modifiez les répertoires dans le dossier dans lequel vous souhaitez stocker ce référentiel. (D’autres types de fenêtres d’invite de commandes fonctionnent également, mais nos exemples de commandes utilisent PowerShell.)
Clonez le dépôt dans votre répertoire de travail actuel :
git clone https://github.com/MicrosoftDocs/Virtualization-Documentation.git
Accédez à l’exemple de répertoire trouvé sous
Virtualization-Documentation\windows-container-samples\asp-net-getting-started
et créez un fichier Dockerfile à l’aide des commandes suivantes.Un Dockerfile est semblable à un makefile : il s’agit d’une liste d’instructions qui indiquent au moteur de conteneur comment générer l’image conteneur.
# 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 Dockerfile
Ouvrez le fichier Dockerfile que vous venez de créer avec l’éditeur de texte de votre choix, puis ajoutez le contenu suivant :
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"]
Nous allons la décomposer en ligne par ligne et expliquer ce que font chaque instruction.
FROM mcr.microsoft.com/dotnet/core/sdk:2.1 AS build-env
WORKDIR /app
Le premier groupe de lignes indique l'image de base que nous utiliserons pour construire notre conteneur. Si le système local n’a pas encore cette image, docker essaiera automatiquement de l’extraire. Le mcr.microsoft.com/dotnet/core/sdk:2.1
est livré avec le Kit de Développement Logiciel (SDK) .NET Core 2.1 installé, et il est donc capable de créer des projets ASP .NET Core ciblant la version 2.1. L’instruction suivante modifie le répertoire de travail de notre conteneur pour qu’il soit /app
, de sorte que toutes les commandes suivantes s’exécutent dans ce contexte.
COPY *.csproj ./
RUN dotnet restore
Ensuite, ces instructions copient les fichiers .csproj dans le répertoire /app
du conteneur build-env
. Après avoir copié ce fichier, .NET le lira, puis ira chercher toutes les dépendances et outils nécessaires à notre projet.
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. Nous allons ensuite indiquer à .NET de publier notre application avec une configuration de mise en production et de spécifier le chemin de sortie.
La compilation doit réussir. Maintenant, nous devons générer l’image finale.
Conseil
Ce guide de démarrage rapide génère un projet .NET Core à partir de la source. Lors de la création d’images de conteneur, il est recommandé d’inclure uniquement la charge utile de production et ses dépendances dans l’image de conteneur. 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. Par conséquent, le dockerfile est écrit pour utiliser un conteneur temporaire contenant le Kit de développement logiciel (SDK) appelé build-env
pour compiler l'application.
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. Nous copieons ensuite tous les fichiers à partir du répertoire de sortie de notre conteneur temporaire dans notre conteneur final. Nous configurons notre conteneur pour qu’il s’exécute avec notre nouvelle application en tant que point d’entrée au démarrage du conteneur
Nous avons écrit le fichier dockerfile pour effectuer un build en plusieurs phases. Lorsque le fichier dockerfile est exécuté, il utilise le conteneur temporaire, build-env
, avec le 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.
Générer et exécuter l’application
Avec le fichier Dockerfile écrit, nous pouvons pointer Docker sur notre fichier Dockerfile et lui indiquer de générer, puis exécuter notre image :
Dans une fenêtre d’invite de commandes, accédez au répertoire où réside le fichier dockerfile, puis exécutez la commande docker build pour générer le conteneur à partir du fichier Dockerfile.
docker build -t my-asp-app .
Pour exécuter le conteneur nouvellement construit, lancez la commande docker run .
docker run -d -p 5000:80 --name myapp my-asp-app
Nous allons dissecter cette commande :
-d
indique à Docker d’exécuter le conteneur « détaché », ce qui signifie qu’aucune console n’est connectée à la console à l’intérieur du conteneur. Le conteneur s’exécute en arrière-plan.-p 5000:80
indique à Docker de mapper le port 5000 sur l’hôte au port 80 dans le conteneur. Chaque conteneur obtient sa propre adresse IP. ASP .NET écoute par défaut sur le port 80. Le mappage de ports nous permet d’accéder à l’adresse IP de l’hôte au niveau du port mappé et Docker transfère tout le trafic vers le port de destination à l’intérieur du conteneur.--name myapp
indique à Docker de donner à ce conteneur un nom pratique à interroger (au lieu de devoir rechercher l’ID de conteneur affecté au moment de l’exécution par Docker).my-asp-app
est l’image à exécuter par Docker. Il s'agit de l'image conteneur produite à l'issue du processus dedocker build
.
Ouvrez un navigateur web et accédez à
http://localhost:5000
pour afficher votre application conteneurisée.
Étapes suivantes
L’étape suivante consiste à publier votre application web ASP.NET conteneurisée dans un registre privé à l’aide d’Azure Container Registry. Cela vous permet de le déployer dans votre organisation.
Lorsque vous accédez à la section dans laquelle vous poussez (push) votre image conteneur vers le registre, spécifiez le nom de l’application ASP.NET que vous venez d'intégrer (
my-asp-app
) ainsi que votre registre de conteneurs (par exemple :contoso-container-registry
) :docker tag my-asp-app contoso-container-registry.azurecr.io/my-asp-app:v1
Pour afficher d’autres exemples d’applications et leurs fichiers dockerfiles associés, consultez exemples de conteneurs supplémentaires.
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 Azure Kubernetes Service.