Partager via


Générer un projet de conteneur à partir de la ligne de commande

Si vous souhaitez générer un projet de conteneur avec un fichier Dockerfile en dehors de Visual Studio, vous pouvez utiliser docker build (ou podman build) ou dotnet publish /t:PublishContainer générer à partir de la ligne de commande.

Si vous utilisez le type de build du Kit de développement logiciel (SDK) .NET, vous n’avez pas de fichier Dockerfile. Vous ne pouvez donc pas utiliser docker build ou podman build; à la place, utiliser dotnet publish /t:PublishContainer pour générer sur la ligne de commande.

Si vous souhaitez générer un projet de conteneur avec un fichier Dockerfile en dehors de Visual Studio, vous pouvez utiliser docker build ou dotnet publish /t:PublishContainer générer à partir de la ligne de commande.

Si vous utilisez le type de build du Kit de développement logiciel (SDK) .NET, vous n’avez pas de fichier Dockerfile. Vous ne pouvez donc pas utiliser docker build; à la place, utilisez dotnet publish /t:PublishContainer pour générer sur la ligne de commande.

Prerequisites

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.

Utiliser la build Docker

Pour générer une solution conteneurisée à partir de la ligne de commande, vous pouvez généralement utiliser la commande docker build <context> pour chaque projet de la solution. Vous fournissez l’argument de contexte de génération. Le contexte de génération pour un Dockerfile est le dossier de l'ordinateur local utilisé en tant que dossier de travail pour générer l'image. Par exemple, il s’agit du dossier à partir duquel vous copiez des fichiers lorsque vous copiez vers le conteneur. Dans les projets .NET Core, la valeur par défaut consiste à utiliser le dossier qui contient le fichier solution (.sln ou .slnx). Exprimé sous la forme d’un chemin relatif, cet argument est généralement « ». pour un fichier Dockerfile dans un dossier de projet et le fichier solution dans son dossier parent.

docker build -f Dockerfile ..

Pour les projets .NET Framework, le contexte de build par défaut est le dossier du projet, et non le dossier solution.

Vous pouvez définir le contexte de build dans le fichier projet en définissant la propriété DockerfileContext. Par exemple

<PropertyGroup>
   <DockerfileContext>contextfolder</DockerfileContext>
</PropertyGroup>

Utilisez Docker build ou Podman build

Pour générer une solution conteneurisée à partir de la ligne de commande, vous pouvez généralement utiliser la commande docker build <context> (ou podman build <context>) pour chaque projet de la solution. Vous fournissez l’argument de contexte de génération. Le contexte de génération pour un Dockerfile est le dossier de l'ordinateur local utilisé en tant que dossier de travail pour générer l'image. Par exemple, il s’agit du dossier à partir duquel vous copiez des fichiers lorsque vous copiez vers le conteneur. Dans les projets .NET Core, la valeur par défaut consiste à utiliser le dossier qui contient le fichier solution (.sln ou .slnx). Exprimé sous la forme d’un chemin relatif, cet argument est généralement « ». pour un fichier Dockerfile dans un dossier de projet et le fichier solution dans son dossier parent.

docker build -f Dockerfile ..
podman build -f Dockerfile ..

Vous pouvez définir le contexte de build dans le fichier projet en définissant la propriété ContainerBuildContext. Par exemple

<PropertyGroup>
   <ContainerBuildContext>contextfolder</ContainerBuildContext>
</PropertyGroup>

Les chemins relatifs dans le fichier Dockerfile sont relatifs au contexte de build. Par conséquent, si vous modifiez le contexte, veillez à mettre à jour les chemins relatifs en conséquence.

Avec Visual Studio 17.11 et versions ultérieures, lorsque vous ajoutez la prise en charge de Docker à un projet, vous pouvez spécifier un dossier pour le contexte de build. Si vous souhaitez modifier le contexte de build, vous pouvez supprimer le fichier Dockerfile (s’il n’a pas d’autres modifications que vous souhaitez conserver) et réexécuter Ajouter la prise en charge de Docker, cette fois en spécifiant le nouveau contexte de build. Le nouveau fichier Dockerfile aura des chemins relatifs mis à jour pour correspondre au nouveau contexte de build.

Lorsque vous ajoutez la prise en charge du conteneur à un projet, vous pouvez spécifier un dossier pour le contexte de génération. Si vous souhaitez modifier le contexte de build, vous pouvez supprimer le fichier Dockerfile (s’il n’a pas d’autres modifications que vous souhaitez conserver) et réexécuter rajouter le support pour conteneur, cette fois en spécifiant le nouveau contexte de build. Le nouveau fichier Dockerfile aura des chemins relatifs mis à jour pour correspondre au nouveau contexte de build.

Utiliser MSBuild

Remarque

Cette section explique comment personnaliser vos conteneurs lorsque vous choisissez le type de build du conteneur Dockerfile. Si vous utilisez le type de build du Kit de développement logiciel (SDK) .NET, les options de personnalisation sont différentes et les informations contenues dans cet article ne s’appliquent pas. Au lieu de ça, voir Mettre en conteneur une application .NET avec dotnet publish.

Les fichiers Dockerfiles créés par Visual Studio pour les projets .NET Framework (et pour les projets .NET Core créés avec des versions de Visual Studio antérieures à Visual Studio 2017 Update 4) ne sont pas des fichiers Dockerfiles multistage. Les étapes décrites dans ces fichiers Dockerfile ne compilent pas votre code. Au lieu de cela, lorsque Visual Studio génère un fichier Dockerfile .NET Framework, il compile d’abord votre projet à l’aide de MSBuild. Lorsque cela réussit, Visual Studio génère ensuite le fichier Dockerfile, qui copie simplement la sortie de build de MSBuild dans l’image Docker résultante. Étant donné que les étapes de compilation de votre code ne sont pas incluses dans le fichier Dockerfile, vous ne pouvez pas générer de fichiers Dockerfiles .NET Framework à l’aide de docker build à partir de la ligne de commande. Vous devez utiliser MSBuild pour générer ces projets.

Pour générer une image pour un seul projet de conteneur Docker, vous pouvez utiliser MSBuild avec l’option de commande /t:ContainerBuild. Cette commande indique à MSBuild de générer l'ContainerBuild cible plutôt que la cible par défaut Build. Par exemple:

MSBuild MyProject.csproj /t:ContainerBuild /p:Configuration=Release

Vous voyez une sortie similaire à ce que vous voyez dans la fenêtre Sortie lorsque vous générez votre solution à partir de l’IDE Visual Studio. Utilisez toujours /p:Configuration=Release, car dans les cas où Visual Studio utilise l’optimisation de build multistage, les résultats de la configuration de build Debug peuvent ne pas correspondre aux attentes. Voir Personnaliser des images de conteneurs pour le débogage.

Si vous utilisez un projet Docker Compose, utilisez cette commande pour générer des images :

msbuild /p:SolutionPath=<solution-name>.sln /p:Configuration=Release docker-compose.dcproj

Pour afficher les journaux MSBuild, consultez Obtention des journaux de compilation avec MSBuild.

Générer à partir de la ligne de commande

Visual Studio utilise le mode rapide (si activé) pour produire une image conteneur configurée pour fonctionner le mieux pour le développement et le débogage. Nous vous déconseillons donc de copier les commandes de build Docker à partir de la fenêtre Sortie après une génération en mode rapide. Pour générer une image standard sans optimisations non standard, vous pouvez cliquer avec le bouton droit sur le fichier Dockerfile et choisir l’option Générer l’image Docker .

Visual Studio utilise le mode rapide (si activé) pour produire une image conteneur optimisée pour le développement et le débogage. Nous vous déconseillons donc de copier les commandes docker build et podman build à partir de la fenêtre Sortie après une compilation en mode rapide. Pour générer une image standard sans optimisations non standard, vous pouvez cliquer avec le bouton droit sur le fichier Dockerfile et choisir l’option Générer une image .

Visual Studio utilise la dev balise pour désigner les images qu’il a spécialement préparées pour optimiser le temps de démarrage pendant le débogage. Toutefois, ces images ne doivent pas être utilisées en dehors du contexte de Visual Studio. Cette balise indique que les images ont des modifications et des personnalisations non standard, par exemple pour prendre en charge le débogage en mode rapide. Consultez Personnaliser des conteneurs Docker dans Visual Studio.