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, MSBuild, dotnet buildou dotnet publish pour 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; Utilisez plutôt MSBuild, dotnet build ou dotnet publish pour générer sur la ligne de commande.

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). 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. Pour les projets .NET Framework, le contexte de build par défaut est le dossier du projet, et non le dossier solution.

docker build -f Dockerfile ..

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>

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.

Utiliser MSBuild

Remarque

Cette section explique comment personnaliser vos conteneurs Docker 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.