Partager via


Ajouter la prise en charge des conteneurs

Vous pouvez ajouter la prise en charge des conteneurs Docker dans les types de projets Visual Studio pris en charge, tels que ASP.NET projets web et d’autres. Consultez la vue d’ensemble pour plus d’informations sur les types de projets pris en charge dans votre version de Visual Studio.

Vous pouvez ajouter la prise en charge des conteneurs Docker ou Podman dans les types de projets Visual Studio pris en charge, tels que ASP.NET projets web et d’autres. Consultez la vue d’ensemble pour plus d’informations sur les types de projets pris en charge dans votre version de Visual Studio.

Prerequisites

  • Docker Desktop
  • Visual Studio avec la charge de travail de développement ASP.NET et web, la charge de travail de développement Azure et/ou la charge de travail de développement de bureau .NET installée.
  • Pour publier sur Azure Container Registry, un abonnement Azure. Inscrivez-vous à un essai gratuit.

Prerequisites

Ajouter la prise en charge des conteneurs lorsque vous créez un projet

Vous pouvez activer la prise en charge des conteneurs lors de la création du projet en sélectionnant Activer la prise en charge des conteneurs lorsque vous créez un projet, comme illustré dans la capture d’écran suivante :

Capture d’écran montrant comment activer la prise en charge des conteneurs pour les nouvelles applications web ASP.NET Core dans Visual Studio.

Note

Pour les projets .NET Framework (pas .NET Core), seuls les conteneurs Windows sont disponibles.

Note

Si vous utilisez le modèle de projet de console .NET Framework complet, l’option prise en charge est Ajouter la prise en charge de Container Orchestrator après la création du projet, avec des options permettant d’utiliser Service Fabric ou Docker Compose. L’ajout de la prise en charge lors de la création du projet et l’ajout de la prise en charge de Docker pour un seul projet sans orchestration ne sont pas des options disponibles.

Note

La prise en charge des conteneurs .NET Framework est interrompue dans la version actuelle de Visual Studio. Les conteneurs .NET Framework ont été pris en charge jusqu’à Visual Studio 2022 17.14.

Ajouter la prise en charge du conteneur à un projet existant

Vous pouvez ajouter la prise en charge de Docker à un projet existant en sélectionnant Ajouter> uneprise en charge du conteneur dans l’Explorateur de solutions. Les commandes Add > Container Support et Add > Container Orchestrator Support se trouvent dans le menu contextuel du nœud de projet pour un projet ASP.NET Core dans l’Explorateur de Solutions, comme illustré dans la capture d’écran suivante :

Capture d’écran montrant l’option Ajouter le support du conteneur dans Visual Studio.

Choisir le type de build de conteneur et d’autres options

Lorsque vous ajoutez ou activez la prise en charge du conteneur dans un projet .NET 7 ou ultérieur, Visual Studio affiche la boîte de dialogue Options de génération de modèles de conteneur, qui vous donne le choix du système d’exploitation (Linux ou Windows), mais également la possibilité de choisir le type de build de conteneur, Dockerfile ou .NET SDK.

Vous pouvez également spécifier la distribution d’images conteneur et le contexte de génération de conteneur.

Capture d’écran montrant la boîte de dialogue Options d'échafaudage pour conteneur pour ajouter la prise en charge du conteneur.

La distribution d’images conteneur spécifie l’image de système d’exploitation que vos conteneurs utilisent comme image de base. Cette liste change si vous basculez entre Linux et Windows comme type de conteneur.

Les images suivantes sont disponibles :

Windows :

  • Windows Nano Server (recommandé, disponible uniquement pour les versions 8.0 et ultérieures, non prédéfini pour les projets de déploiement natif à l'avance (AOT))
  • Windows Server Core (disponible uniquement 8.0 et versions ultérieures)

Linux :

  • Par défaut (Debian, mais la balise correspond à votre version .NET cible)
  • Debian
  • Ubuntu
  • Ubuntu ciselé
  • Alpin

Note

Les conteneurs basés sur l’image Chiseled Ubuntu et qui utilisent le déploiement natif anticipé (AOT) ne peuvent être débogués qu’en Mode rapide. Consultez Personnaliser des conteneurs Docker dans Visual Studio.

Le contexte de génération de conteneur spécifie le dossier utilisé pour docker build (ou podman build). Consultez le contexte de build Docker ou la build Podman. Le dossier de solution est la valeur par défaut recommandée. Tous les fichiers nécessaires pour une build doivent se trouver sous ce dossier, ce qui n’est pas le cas si vous choisissez le dossier du projet ou un autre dossier.

Type de build du conteneur Dockerfile

Si vous choisissez le type de build du conteneur Dockerfile , Visual Studio ajoute les éléments suivants au projet :

  • un fichier Dockerfile
  • un .dockerignore fichier
  • référence de package NuGet à Microsoft.VisualStudio.Azure.Containers.Tools.Targets

Le fichier Dockerfile que vous ajoutez ressemble au code suivant. Dans cet exemple, le projet a été nommé WebApplication-Dockeret vous avez choisi des conteneurs Linux :

# 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.

# This stage is used when running from VS in fast mode (Default for Debug configuration)
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
USER $APP_UID
WORKDIR /app
EXPOSE 8080
EXPOSE 8081


# This stage is used to build the service project
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["WebApplication15-AddContainerSupport/WebApplication15-AddContainerSupport.csproj", "WebApplication15-AddContainerSupport/"]
RUN dotnet restore "./WebApplication15-AddContainerSupport/WebApplication15-AddContainerSupport.csproj"
COPY . .
WORKDIR "/src/WebApplication15-AddContainerSupport"
RUN dotnet build "./WebApplication15-AddContainerSupport.csproj" -c $BUILD_CONFIGURATION -o /app/build

# This stage is used to publish the service project to be copied to the final stage
FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./WebApplication15-AddContainerSupport.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false

# This stage is used in production or when running from VS in regular mode (Default when not using the Debug configuration)
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApplication15-AddContainerSupport.dll"]

Type de build du conteneur du Kit de développement logiciel (SDK) .NET

Vous pouvez utiliser la prise en charge intégrée du Kit de développement logiciel (SDK) .NET pour les builds de conteneurs, ce qui signifie que vous n’avez pas besoin d’un fichier Dockerfile ; consultez Containerize a .NET app with dotnet publish. Au lieu de cela, vous configurez vos conteneurs à l’aide de propriétés MSBuild dans le fichier projet, et les paramètres de lancement des conteneurs avec Visual Studio sont encodés dans un .json fichier de configuration, launchSettings.json.

Capture d’écran montrant la boîte de dialogue Options de génération de modèles de conteneur pour l’ajout de la prise en charge de Docker avec le Kit de développement logiciel (SDK) .NET sélectionné comme type de build de conteneur.

Ici, choisissez le Kit de développement logiciel (SDK) .NET comme type de build de conteneur pour utiliser la gestion des conteneurs du Kit de développement logiciel (SDK) .NET au lieu d’un fichier Dockerfile.

La distribution d’images conteneur spécifie l’image de système d’exploitation que vos conteneurs utilisent comme image de base. Cette liste change si vous basculez entre Linux et Windows en tant que conteneur. Consultez la section précédente pour obtenir la liste des images disponibles.

L’entrée de build du conteneur du Kit de développement logiciel (SDK) .NET dans launchSettings.json ressemble au code suivant :

"Container (.NET SDK)": {
  "commandName": "SdkContainer",
  "launchBrowser": true,
  "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}",
  "environmentVariables": {
    "ASPNETCORE_HTTPS_PORTS": "8081",
    "ASPNETCORE_HTTP_PORTS": "8080"
  },
  "publishAllPorts": true,
  "useSSL": true
}

Le Kit de développement logiciel (SDK) .NET gère certains des paramètres qui auraient été encodés dans un fichier Dockerfile, tel que l’image de base de conteneur et les variables d’environnement à définir. Les paramètres disponibles dans le fichier projet pour la configuration du conteneur sont répertoriés lors de la personnalisation de votre conteneur. Par exemple, la distribution des images de conteneur est enregistrée dans le fichier projet en tant que propriété ContainerBaseImage. Vous pouvez le modifier ultérieurement en modifiant le fichier projet.

<PropertyGroup>
    <ContainerBaseImage>mcr.microsoft.com/dotnet/runtime:8.0-alpine-amd64</ContainerBaseImage>
</PropertyGroup>

Choisir le type de build de conteneur et d’autres options

Lorsque vous ajoutez ou activez la prise en charge de Docker dans un projet .NET 7 ou version ultérieure, Visual Studio affiche la boîte de dialogue Options de génération de modèles de conteneur , qui vous donne le choix du système d’exploitation (Linux ou Windows), mais également la possibilité de choisir le type de build de conteneur, Dockerfile ou .NET SDK. Cette boîte de dialogue n’apparaît pas dans les projets .NET Framework.

Dans la version 17.11 et ultérieures, vous pouvez également spécifier la distribution d’images conteneur et le contexte de build Docker.

Capture d’écran qui montre la boîte de dialogue

La distribution d’images conteneur spécifie l’image de système d’exploitation que vos conteneurs utilisent comme image de base. Cette liste change si vous basculez entre Linux et Windows comme type de conteneur.

Les images suivantes sont disponibles :

Windows :

  • Windows Nano Server (recommandé, disponible uniquement pour les versions 8.0 et ultérieures, non prédéfini pour les projets de déploiement natif à l'avance (AOT))
  • Windows Server Core (disponible uniquement 8.0 et versions ultérieures)

Linux :

  • Par défaut (Debian, mais la balise est « 8.0 »)
  • Debian
  • Ubuntu
  • Ubuntu ciselé
  • Alpin

Note

Les conteneurs basés sur l’image Chiseled Ubuntu et qui utilisent le déploiement natif anticipé (AOT) ne peuvent être débogués qu’en Mode rapide. Consultez Personnaliser des conteneurs Docker dans Visual Studio.

Le contexte de build Docker spécifie le dossier utilisé pour la build Docker. Consultez le contexte de build Docker. Le dossier de solution est la valeur par défaut recommandée. Tous les fichiers nécessaires pour une build doivent se trouver sous ce dossier, ce qui n’est pas le cas si vous choisissez le dossier du projet ou un autre dossier.

Type de build du conteneur Dockerfile

Si vous choisissez le type de build du conteneur Dockerfile , Visual Studio ajoute les éléments suivants au projet :

  • un fichier Dockerfile
  • un .dockerignore fichier
  • référence de package NuGet à Microsoft.VisualStudio.Azure.Containers.Tools.Targets

Le fichier Dockerfile que vous ajoutez ressemble au code suivant. Dans cet exemple, le projet a été nommé WebApplication-Dockeret vous avez choisi des conteneurs Linux :

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

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

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

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

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

Type de build du conteneur du Kit de développement logiciel (SDK) .NET

Avec Visual Studio 2022 17.9 et versions ultérieures avec le Kit de développement logiciel (SDK) .NET 7 installé, dans les projets ASP.NET Core qui ciblent .NET 6 ou version ultérieure, vous avez la possibilité d’utiliser la prise en charge intégrée du Kit de développement logiciel (SDK) .NET pour les builds de conteneur, ce qui signifie que vous n’avez pas besoin d’un fichier Dockerfile ; consultez Containerize a .NET app with dotnet publish. Au lieu de cela, vous configurez vos conteneurs à l’aide de propriétés MSBuild dans le fichier projet, et les paramètres de lancement des conteneurs avec Visual Studio sont encodés dans un .json fichier de configuration, launchSettings.json.

Capture d’écran montrant la boîte de dialogue Options de génération de modèles de conteneur pour l’ajout de la prise en charge de Docker avec le Kit de développement logiciel (SDK) .NET sélectionné comme type de build de conteneur.

Ici, choisissez le Kit de développement logiciel (SDK) .NET comme type de build de conteneur pour utiliser la gestion des conteneurs du Kit de développement logiciel (SDK) .NET au lieu d’un fichier Dockerfile.

La distribution d’images conteneur spécifie l’image de système d’exploitation que vos conteneurs utilisent comme image de base. Cette liste change si vous basculez entre Linux et Windows en tant que conteneur. Consultez la section précédente pour obtenir la liste des images disponibles.

L’entrée de build du conteneur du Kit de développement logiciel (SDK) .NET dans launchSettings.json ressemble au code suivant :

"Container (.NET SDK)": {
  "commandName": "SdkContainer",
  "launchBrowser": true,
  "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}",
  "environmentVariables": {
    "ASPNETCORE_HTTPS_PORTS": "8081",
    "ASPNETCORE_HTTP_PORTS": "8080"
  },
  "publishAllPorts": true,
  "useSSL": true
}

Le Kit de développement logiciel (SDK) .NET gère certains des paramètres qui auraient été encodés dans un fichier Dockerfile, tel que l’image de base de conteneur et les variables d’environnement à définir. Les paramètres disponibles dans le fichier projet pour la configuration du conteneur sont répertoriés lors de la personnalisation de votre conteneur. Par exemple, la distribution des images de conteneur est enregistrée dans le fichier projet en tant que propriété ContainerBaseImage. Vous pouvez le modifier ultérieurement en modifiant le fichier projet.

<PropertyGroup>
    <ContainerBaseImage>mcr.microsoft.com/dotnet/runtime:8.0-alpine-amd64</ContainerBaseImage>
</PropertyGroup>

Étapes suivantes

Pour plus d’informations sur l’implémentation des services et l’utilisation des outils Visual Studio pour l’utilisation des conteneurs, lisez les articles suivants :

Docker dans Visual Studio

Débogage d’applications dans un conteneur local

Déployer un conteneur ASP.NET dans un registre de conteneurs à l’aide de Visual Studio

Déployer vers Azure App Service

Déployer sur Azure Container Apps à l’aide de Visual Studio