Démarrage rapide : Docker dans Visual Studio

Avec Visual Studio, vous pouvez facilement générer, déboguer et exécuter des applications .NET, ASP.NET et ASP.NET Core conteneurisées et les publier sur Azure Container Registry, Docker Hub, Azure App Service ou votre propre registre de conteneurs. Dans cet article, nous publierons une application ASP.NET Core dans Azure Container Registry.

Prérequis

Installation et configuration

Pour l’installation Docker, commencez par passer en revue les informations contenues dans Docker Desktop for Windows: What to know before you install. Installez ensuite Docker Desktop.

Ajouter un projet à un conteneur Docker

  1. Créez un nouveau projet à l’aide du modèle ASP.NET Core Web App ou si vous souhaitez utiliser le .NET Framework au lieu de .NET Core, choisissez ASP.NET application web (.NET Framework).

  2. Sur l’écran Créer une nouvelle application web, vérifiez que la case Activer la prise en charge de Docker est cochée.

    Capture d’écran de la case Activer la prise en charge de Docker.

    La capture d’écran montre .NET Core ; si vous utilisez .NET Framework, il semble un peu différent.

  3. Sélectionnez le type de conteneur souhaité (Windows ou Linux) et cliquez sur Créer.

Vue d’ensemble du fichier Dockerfile

Un fichier Docker, la recette permettant de créer une image Docker finale, est créé dans le projet. Consultez les Informations de référence sur Dockerfile pour comprendre les commandes qu’il contient.

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /src
COPY ["WebApplication1/WebApplication1.csproj", "WebApplication1/"]
RUN dotnet restore "WebApplication1/WebApplication1.csproj"
COPY . .
WORKDIR "/src/WebApplication1"
RUN dotnet build "WebApplication1.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "WebApplication1.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApplication1.dll"]

Le Dockerfile précédent est basé sur l’image microsoft/aspnetcore. Il comprend des instructions pour modifier l’image de base en générant votre projet et en l’ajoutant au conteneur. Si vous utilisez le .NET Framework, l’image de base sera différente.

Quand la case Configurer pour HTTPS de la boîte de dialogue du nouveau projet est cochée, le fichier Dockerfile expose deux ports. Un port est utilisé pour le trafic HTTP tandis que l’autre est utilisé pour HTTPS. Si la case n’est pas cochée, un seul port (80) est exposé pour le trafic HTTP.

Déboguer

Sélectionnez Docker dans la liste déroulante de débogage dans la barre d’outils et démarrez le débogage de l’application. Vous pouvez être amené à voir s’afficher un message vous invitant à approuver un certificat. Choisissez d’approuver le certificat pour continuer.

L’option Outil conteneur dans la fenêtre Sortie indique les actions en cours. La première fois, le téléchargement de l’image de base peut prendre un certain temps, mais il est beaucoup plus rapide lors des exécutions suivantes.

Notes

Si vous devez modifier les ports pour le débogage, vous pouvez le faire dans le fichier launchSettings.json. Consultez les paramètres de lancement de conteneur.

Fenêtre Conteneurs

Si vous disposez de Visual Studio 2019 version 16.4 ou ultérieure, vous pouvez utiliser la fenêtre Conteneurs pour afficher les conteneurs en cours d’exécution sur votre ordinateur, ainsi que les images disponibles.

Ouvrez la fenêtre Conteneurs à l’aide de la zone de recherche dans l’IDE (appuyez sur Ctrl+Q pour l’utiliser), tapez container, puis choisissez la fenêtre Conteneurs dans la liste.

Vous pouvez monter la fenêtre Conteneurs dans un endroit pratique, tel que sous l’éditeur, en la déplaçant et en suivant les repères de placement de fenêtre.

Dans la fenêtre, recherchez votre conteneur et parcourez chaque onglet pour afficher les variables d’environnement, les mappages de ports, les journaux et le système de fichiers.

Capture d’écran de la fenêtre Conteneurs.

Pour plus d’informations, consultez la fenêtre Utiliser les conteneurs.

Publier des images Docker

Une fois le cycle de développement et de débogage de l’application effectué, vous pouvez créer une image de production de l’application.

  1. Changez la liste déroulante de configuration en Libérer et générez l’application.

  2. Cliquez avec le bouton droit sur votre projet dans l’Explorateur de solutions et choisissez Publier.

  3. Dans la boîte de dialogue Publier, sélectionnez l’onglet Registre de conteneurs Docker.

    Capture d’écran de la boîte de dialogue Publier - choisissez Docker Container Registry.

  4. Choisissez Créer un nouveau Azure Container Registry.

    Capture d’écran de la boîte de dialogue Publier - choisissez Créer un registre de conteneurs Azure.

  5. Renseignez les valeurs souhaitées dans Créer un registre de conteneurs Azure.

    Paramètre Valeur suggérée Description
    Préfixe DNS Nom globalement unique Nom qui identifie uniquement votre registre de conteneurs.
    Abonnement Choisir votre abonnement Sélectionnez l’abonnement Azure à utiliser.
    Groupe de ressources myResourceGroup Nom du groupe de ressources où créer votre registre de conteneurs. Choisissez Nouveau pour créer un groupe de ressources.
    Référence SKU Standard Niveau de service du registre de conteneurs
    Emplacement du registre Un emplacement proche de vous Choisissez un emplacement dans une région près de chez vous ou près d’autres services que votre registre de conteneurs va utiliser.

    Capture d’écran de la boîte de dialogue Visual Studio Créer un registre de conteneurs Azure

  6. Cliquez sur Créer. La boîte de dialogue Publier affiche maintenant le Registre créé.

    Capture d’écran de la boîte de dialogue Publier montrant Azure Container Registry créé.

  7. Choisissez Terminer pour terminer le processus de publication de votre image conteneur dans le registre nouvellement créé dans Azure.

    Capture d’écran de la publication réussie

Étapes suivantes

Vous pouvez désormais extraire le conteneur à partir du registre sur tout hôte en mesure d’exécuter des images Docker, par exemple Azure Container Instances.

Avec Visual Studio, vous pouvez facilement générer, déboguer et exécuter des applications .NET, ASP.NET et ASP.NET Core conteneurisées et les publier sur Azure Container Registry, Docker Hub, Azure App Service ou votre propre registre de conteneurs. Dans cet article, vous publiez une application ASP.NET Core dans Azure Container Registry.

Prérequis

Installation et configuration

Pour l’installation Docker, commencez par passer en revue les informations contenues dans Docker Desktop for Windows: What to know before you install. Installez ensuite Docker Desktop.

Ajouter un projet à un conteneur Docker

  1. Avant de créer le projet Visual Studio, vérifiez que Docker Desktop exécute le type de conteneurs (Windows ou Linux) que vous envisagez d’utiliser dans votre projet Visual Studio.

    Pour modifier le type de conteneur utilisé par Docker Desktop, cliquez avec le bouton droit sur l’icône Docker (baleine) dans la barre des tâches, puis choisissez Basculer vers des conteneurs Linux ou Basculer vers des conteneurs Windows.

    Avertissement

    Si vous changez le type de conteneur après avoir créé le projet Visual Studio, les fichiers image Docker risquent de ne pas être chargés.

  2. Créez un nouveau projet à l’aide du modèle ASP.NET Core Web App ou si vous souhaitez utiliser le .NET Framework au lieu de .NET Core, choisissez ASP.NET application web (.NET Framework).

  3. Sur l’écran Créer une nouvelle application web, vérifiez que la case Activer la prise en charge de Docker est cochée.

    Capture d’écran de la case Activer la prise en charge de Docker.

    La capture d’écran montre la dernière version avec .NET 8.0. Si vous utilisez .NET Framework, la boîte de dialogue semble un peu différente.

  4. Sélectionnez le type de conteneur souhaité (Windows ou Linux), puis sélectionnez Créer.

Vue d’ensemble du fichier Dockerfile

Visual Studio crée un Dockerfile dans votre projet, qui fournit la recette permettant de créer une image Docker finale. Pour plus d’informations, consultez la référence Dockerfile pour plus d’informations sur les commandes utilisées dans le Dockerfile.

#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.

#Depending on the operating system of the host machines(s) that will build or run the containers, the image specified in the FROM statement may need to be changed.
#For more information, please see https://aka.ms/containercompat

FROM mcr.microsoft.com/dotnet/aspnet:8.0-nanoserver-1809 AS base
WORKDIR /app
EXPOSE 8080
EXPOSE 8081

FROM mcr.microsoft.com/dotnet/sdk:8.0-nanoserver-1809 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["MyWepApp/MyWebApp.csproj", "MyWebApp/"]
RUN dotnet restore "./MyWebApp/./MyWebApp.csproj"
COPY . .
WORKDIR "/src/MyWebApp"
RUN dotnet build "./MyWebApp.csproj" -c %BUILD_CONFIGURATION% -o /app/build

FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./MyWebApp.csproj" -c %BUILD_CONFIGURATION% -o /app/publish /p:UseAppHost=false

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MyWebApp.dll"]

Le Dockerfile précédent est basé sur l’image .NET 8 de Microsoft Container Registry (MCR). Il comprend des instructions pour modifier l’image de base en générant votre projet nommé MyWebApp et en l’ajoutant au conteneur. Si vous utilisez .NET Framework, l’image de base sera différente.

Quand la case Configurer pour HTTPS de la boîte de dialogue du nouveau projet est cochée, le fichier Dockerfile expose deux ports. Un port est utilisé pour le trafic HTTP tandis que l’autre est utilisé pour HTTPS. Si la case n’est pas cochée, un seul port (80) est exposé pour le trafic HTTP.

Avec Visual Studio 2022 version 17.7 ou ultérieure, vous pouvez cibler .NET 8. Dans ce cas, vous avez l’avantage de pouvoir exécuter votre application de manière plus sécurisée, en tant qu’utilisateur normal, plutôt qu’avec des autorisations élevées. Le fichier Dockerfile par défaut généré par les projets Visual Studio pour .NET 8 est configuré pour s’exécuter en tant qu’utilisateur normal. Pour activer ce comportement sur un projet existant, ajoutez la ligne USER app au Dockerfile dans l’image de base. En outre, étant donné que le port 80 est limité aux utilisateurs normaux, exposez les ports 8080 et 8081 au lieu de 80 et 443. Le port 8080 est utilisé pour le trafic HTTP et le port 8081 pour HTTPS. Pour s’exécuter en tant qu’utilisateur normal, le conteneur doit utiliser une image de base .NET 8 et l’application doit s’exécuter en tant qu’application .NET 8. Une fois correctement configuré, votre fichier Dockerfile doit contenir du code comme dans l’exemple suivant :

FROM mcr.microsoft.com/dotnet/aspnet:8.0-preview AS base
USER app
WORKDIR /app
EXPOSE 8080
EXPOSE 8081

Débogage

Sélectionnez Docker dans la liste déroulante de débogage dans la barre d’outils et démarrez le débogage de l’application. Vous pouvez être amené à voir s’afficher un message vous invitant à approuver un certificat. Choisissez d’approuver le certificat pour continuer.

L’option Outil conteneur dans la fenêtre Sortie indique les actions en cours. La première fois, le téléchargement de l’image de base peut prendre un certain temps, mais il est plus rapide lors des exécutions suivantes.

Une fois la build terminée, le navigateur s’ouvre et affiche la page d’accueil de votre application. Dans la barre d’adresses du navigateur, vous pouvez voir l’URL localhost et le numéro de port pour le débogage.

Remarque

Si vous devez modifier les ports pour le débogage, vous pouvez le faire dans le fichier launchSettings.json. Consultez les paramètres de lancement de conteneur.

Fenêtre Conteneurs

Vous pouvez utiliser la fenêtre Conteneurs pour afficher les conteneurs en cours d’exécution sur votre ordinateur, ainsi que les images disponibles.

Ouvrez la fenêtre Conteneurs à l’aide de la zone de recherche dans l’IDE (appuyez sur Ctrl+Q pour l’utiliser), tapez container, puis choisissez la fenêtre Conteneurs dans la liste.

Vous pouvez monter la fenêtre Conteneurs dans un endroit pratique, tel que sous l’éditeur, en la déplaçant et en suivant les repères de placement de fenêtre.

Dans la fenêtre, recherchez votre conteneur et parcourez chaque onglet pour afficher les variables d’environnement, les mappages de ports, les journaux et le système de fichiers.

Capture d’écran de la fenêtre Conteneurs.

Pour plus d’informations, consultez la fenêtre Utiliser les conteneurs.

Publier des images Docker

Une fois le cycle de développement et de débogage de l’application effectué, vous pouvez créer une image de production de l’application.

  1. Changez la liste déroulante de configuration en Libérer et générez l’application.

  2. Cliquez avec le bouton droit sur votre projet dans l’Explorateur de solutions et choisissez Publier.

  3. Dans la boîte de dialogue Publier, sélectionnez l’onglet Registre de conteneurs Docker.

    Capture d’écran de la boîte de dialogue Publier - choisissez Docker Container Registry.

  4. Choisissez Créer un nouveau Azure Container Registry.

    Capture d’écran de la boîte de dialogue Publier - choisissez Créer un registre de conteneurs Azure.

  5. Renseignez les valeurs souhaitées dans Créer un registre de conteneurs Azure.

    Paramètre Valeur suggérée Description
    Préfixe DNS Nom globalement unique Nom qui identifie uniquement votre registre de conteneurs.
    Abonnement Choisir votre abonnement Sélectionnez l’abonnement Azure à utiliser.
    Groupe de ressources myResourceGroup Nom du groupe de ressources où créer votre registre de conteneurs. Choisissez Nouveau pour créer un groupe de ressources.
    Référence SKU Standard Niveau de service du registre de conteneurs
    Emplacement du registre Un emplacement proche de vous Choisissez un emplacement dans une région près de chez vous ou près d’autres services qui peuvent utiliser votre registre de conteneurs.

    Capture d’écran de la boîte de dialogue Visual Studio Créer un registre de conteneurs Azure

  6. Sélectionnez Créer. La boîte de dialogue Publier affiche maintenant le Registre créé.

    Capture d’écran de la boîte de dialogue Publier montrant Azure Container Registry créé.

  7. Choisissez Terminer pour terminer le processus de publication de votre image conteneur dans le registre nouvellement créé dans Azure.

    Capture d’écran de la publication réussie

Étapes suivantes

Vous pouvez désormais extraire le conteneur à partir du registre sur tout hôte en mesure d’exécuter des images Docker, par exemple Azure Container Instances.

Ressources supplémentaires