Compartilhar via


Propriedades de build das Ferramentas de Contêiner

Você pode personalizar como o Visual Studio cria seus projetos de contêiner definindo as propriedades que o MSBuild usa para criar seu projeto. Por exemplo, você pode alterar o nome do Dockerfile, especificar marcas e rótulos para suas imagens, fornecer argumentos adicionais passados para comandos do Docker e controlar se o Visual Studio faz determinadas otimizações de desempenho, como a criação fora do ambiente de contêiner. Você também pode definir propriedades de depuração, como o nome do executável a ser iniciado e os argumentos de linha de comando a serem fornecidos.

Para definir o valor de uma propriedade, edite o arquivo de projeto. Por exemplo, suponha que seu Dockerfile se chama MyDockerfile. Você pode definir a DockerfilePath propriedade no arquivo de projeto da seguinte maneira.

<PropertyGroup>
   <DockerfilePath>MyDockerfile</DockerfilePath>
</PropertyGroup>

Observação

A propriedade DockerfilePath substitui a propriedade DockerfileFilepreterida, que ainda tem suporte na versão atual do Visual Studio.

Para definir o valor de uma propriedade, edite o arquivo de projeto. Por exemplo, suponha que seu Dockerfile se chama MyDockerfile. Você pode definir a DockerfileFile propriedade no arquivo de projeto da seguinte maneira.

<PropertyGroup>
   <DockerfileFile>MyDockerfile</DockerfileFile>
</PropertyGroup>

Você pode adicionar a configuração de propriedade a um elemento existente PropertyGroup ou, se não houver um, criar um novo PropertyGroup elemento.

Propriedades para projetos do SDK do .NET

Esta seção descreve as propriedades do MSBuild que se aplicam quando você escolhe o tipo de build de contêiner do SDK do .NET.

Há apenas uma propriedade, EnableSdkContainerDebuggingno arquivo de projeto que é necessário para projetos em contêineres do SDK do .NET. Ele deve ser definido True para projetos do SDK do .NET para habilitar a depuração.

<PropertyGroup>
   <EnableSdkContainerDebugging>True</EnableSdkContainerDebugging>
</PropertyGroup>

Propriedades para projetos do Dockerfile

Esta seção descreve as propriedades do MSBuild que se aplicam quando você escolhe o tipo de build de contêiner do Dockerfile.

A tabela a seguir mostra as propriedades do MSBuild disponíveis para projetos do Dockerfile. A versão do pacote NuGet se aplica a Microsoft.VisualStudio.Azure.Containers.Tools.Targets.

Nome da propriedade Description Valor padrão Versão do pacote NuGet
ContainerDevelopmentMode Controla se a otimização "build-on-host" (depuração do "Modo Rápido") está habilitada. Os valores permitidos são Rápido e Regular. Rápido 1.0.1872750 ou mais recente
ContainerVsDbgPath O caminho para o depurador VSDBG. %USERPROFILE%\vsdbg\vs2017u5 1.0.1985401 ou mais recente
DockerDebuggeeArguments Ao depurar, o depurador é instruído a passar esses argumentos para o executável iniciado. Não aplicável a projetos do .NET Framework ASP.NET 1.7.8 ou mais recente
DockerDebuggeeProgram Ao depurar, o depurador é instruído a iniciar esse executável. Para projetos .NET Core e .NET 5 e posteriores: dotnet, ASP.NET projetos do .NET Framework: Não aplicável (O IIS (Serviços de Informações da Internet) é sempre usado) 1.7.8 ou mais recente
DockerDebuggeeKillProgram Esse comando é usado para eliminar o processo em execução em um contêiner. Não aplicável a projetos do .NET Framework ASP.NET 1.7.8 ou mais recente
DockerDebuggeeWorkingDirectory Ao depurar, o depurador é instruído a usar esse caminho como o diretório de trabalho. C:\app (Windows) ou /app (Linux) 1.7.8 ou mais recente
DockerDefaultTargetOS O sistema operacional de destino padrão usado ao compilar a imagem do Docker. Definido pelo Visual Studio. 1.0.1985401 ou mais recente
DockerImageLabels O conjunto padrão de rótulos aplicado à imagem do Docker. com.microsoft.created-by=visual-studio; com.microsoft.visual-studio.project-name=$(MSBuildProjectName) 1.5.4 ou mais recente
DockerFastModeProjectMountDirectory No Modo Rápido, essa propriedade controla onde o diretório de saída do projeto é montado em volume no contêiner em execução. C:\app (Windows) ou /app (Linux) 1.9.2 ou mais recente
DockerfileBuildArguments Argumentos adicionais passados para o comando de build do Docker . Não aplicável. 1.0.1872750 ou mais recente
DockerfileContext O contexto padrão usado ao criar a imagem do Docker, como um caminho relativo ao Dockerfile. Definido pelo Visual Studio quando o suporte do Docker é adicionado a um projeto. Em projetos do .NET Framework, defina como "". (a pasta do projeto) e em projetos .NET Core e .NET 5 e posteriores, ele é definido como o caminho relativo para a pasta da solução (geralmente ".."). 1.0.1872750 ou mais recente
DockerfileFastModeStage O estágio do Dockerfile (ou seja, destino) a ser usado ao compilar a imagem no modo de depuração. Primeiro estágio encontrado no Dockerfile (geralmente base) -
DockerfileFile Descreve o Dockerfile padrão a ser usado para compilar/executar o contêiner para o projeto. Esse valor pode ser um caminho. Dockerfile 1.0.1872750 ou mais recente
DockerfileRunArguments Argumentos adicionais passados para o comando de execução do Docker . Não aplicável. 1.0.1872750 ou mais recente
DockerfileRunEnvironmentFiles Lista delimitada por ponto-e-vírgula de arquivos de ambiente aplicados durante a execução do Docker. Não aplicável. 1.0.1872750 ou mais recente
DockerfileTag A marca a ser usada ao compilar a imagem do Docker. Na depuração, um ":d ev" é acrescentado à marca. Nome do assembly após a remoção de caracteres não numéricos com as seguintes regras:
Se a marca resultante for toda numérica, a "imagem" será inserida como um prefixo (por exemplo, image2314)
Se a marca resultante for uma cadeia de caracteres vazia, a "imagem" será usada como a marca.
1.0.1872750 ou mais recente

A tabela a seguir mostra as propriedades do MSBuild disponíveis para projetos do Dockerfile. A versão do pacote NuGet se aplica a Microsoft.VisualStudio.Azure.Containers.Tools.Targets.

Algumas das propriedades e listas de itens na tabela a seguir são substituições equivalentes para propriedades obsoletas. Nesse caso, a propriedade obsoleta que ela substitui também é nomeada. Recomendamos atualizar projetos para usar as propriedades com suporte no momento. O suporte para propriedades obsoletas pode ser removido em uma atualização futura do Visual Studio.

Algumas propriedades listadas como obsoletas são substituídas por valores equivalentes em launchsettings.jsone uma é substituída pela lista de itens do MSBuild.

Nome da propriedade Description Valor padrão Versão mínima do pacote NuGet
ContainerDevelopmentMode Controla se a otimização "build-on-host" (depuração do "Modo Rápido") está habilitada. Os valores permitidos são Rápido e Regular. Rápido 1.0.1872750
ContainerVsDbgPath O caminho para o depurador VSDBG. %USERPROFILE%\vsdbg\vs2017u5 1.0.1985401
ContainerLabel

(substitui DockerImageLabels)
O conjunto padrão de rótulos aplicado à imagem do Docker.

ContainerLabel é uma lista de itens do MSBuild, não uma propriedade.
com.microsoft.created-by=visual-studio;com.microsoft.visual-studio.project-name=$(MSBuildProjectName) 1.23.0 para ContainerLabel

1.5.4 para DockerImageLabels
ContainerFastModeProjectMountDirectory

(substitui DockerFastModeProjectMountDirectory)
No Modo Rápido, essa propriedade controla onde o diretório de saída do projeto é montado em volume no contêiner em execução. C:\app (Windows) ou /app (Linux) 1.23.0 para ContainerFastModeProjectMountDirectory

1.9.2 para DockerFastModeProjectMountDirectory
ContainerBuildArguments

(substitui DockerfileBuildArguments)
Argumentos adicionais passados para o comando de build de contêiner. Consulte o build do Docker ou o build do podman. Não aplicável. 1.23.0 para ContainerBuildArguements

1.0.1872750 para DockerfileBuildArguments
ContainerBuildContext

(substitui DockerfileContext)
O contexto padrão usado ao criar a imagem do Docker, como um caminho relativo ao Dockerfile. Definido pelo Visual Studio quando o suporte do Docker é adicionado a um projeto. Ele é definido como o caminho relativo para a pasta da solução (geralmente ".."). 1.23.0 para ContainerBuildContext

1.0.1872750 para DockerfileContext
ContainerFastModeStage

(substitui DockerfileFastModeStage)
O estágio do Dockerfile (ou seja, destino) a ser usado ao compilar a imagem no modo de depuração. Primeiro estágio encontrado no Dockerfile (geralmente base) -
ContainerIncludeDefaultImageLabels (substitui: DockerIncludeDefaultImageLabels) Se definido como false, não inclui marcas com.microsoft.created-by=visual-studio de imagem padrão e com.microsoft.visual-studio.project-name=$(MSBuildProjectName). Verdade 1.23.0 para ContainerIncludeDefaultImageLabels
ContainerLabelBuiltImages (substitui DockerLabelBuiltImages) Inclua rótulos em imagens criadas. Se for falso, nenhum rótulo será adicionado, incluindo rótulos definidos pelo usuário. Verdade 1.23.0 para ContainerLabelBuiltImages
DockerfilePath

(substitui DockerfileFile)
Descreve o Dockerfile padrão a ser usado para compilar/executar o contêiner para o projeto. Dockerfile 1.23.0 para DockerfilePath

1.0.1872750 para DockerfileFile
ContainerRepository

(substitui DockerRepository)
O repositório a ser usado no rótulo, por exemplo webapplication1 , no rótulo webapplication1:dev. O nome do assembly. 1.23.0 para ContainerRepository
ContainerImageTag ou ContainerImageTags

(substitui DockerfileTag)
A marca a ser usada ao compilar a imagem. Na depuração, um ":d ev" é acrescentado à marca. Nome do assembly após a remoção de caracteres não numéricos com as seguintes regras:
Se a marca resultante for toda numérica, a "imagem" será inserida como um prefixo (por exemplo, image2314)
Se a marca resultante for uma cadeia de caracteres vazia, a "imagem" será usada como a marca.
1.23.0 para ContainerImageTag, ContainerImageTags

1.0.1872750 para DockerfileTag.
DockerDebuggeeArguments

(obsoleto, use commandLineArgs em launchsettings.json)
Ao depurar, o depurador é instruído a passar esses argumentos para o executável iniciado. - 1.7.8
DockerDebuggeeProgram

(obsoleto, use executablePath em launchsettings.json)
Ao depurar, o depurador é instruído a iniciar esse executável. - 1.7.8
DockerDebuggeeKillProgram Esse comando é usado para eliminar o processo em execução em um contêiner. - 1.7.8
DockerDebuggeeWorkingDirectory

(obsoleto; use workingDirectory em launchsettings.json)
Ao depurar, o depurador é instruído a usar esse caminho como o diretório de trabalho. C:\app (Windows) ou /app (Linux) 1.7.8
DockerDefaultTargetOS O sistema operacional de destino padrão usado ao compilar a imagem do Docker. Definido pelo Visual Studio. 1.0.1985401
DockerfileRunArguments

(obsoleto, use containerRunArguments em launchsettings.json)
Argumentos adicionais passados para o comando de execução do Docker . Não aplicável. 1.0.1872750
DockerfileRunEnvironmentFiles

(obsoleto, use containerRunEnvironmentFiles em launchsettings.json)
Lista delimitada por ponto-e-vírgula de arquivos de ambiente aplicados durante a execução do Docker. Não aplicável. 1.0.1872750

ContainerRepository e ContainerImageTag (ou ContainerImageTags) fornecem a capacidade de especificar as duas partes de um rótulo de imagem, o repositório e uma ou mais marcas (por exemplo, webapp1:alpha). Nas versões anteriores do Visual Studio, você poderia usar a DockerfileTag propriedade para especificar o repositório e uma única marca, mas isso tinha limitações, por exemplo, que não havia capacidade de especificar várias marcas. A propriedade DockerfileTag está obsoleta; os projetos agora devem ser usados ContainerRepository e ContainerImageTag, e a versão atual também dá suporte a várias ContainerImageTags marcas.

Nas versões anteriores do Visual Studio, a sintaxe era <DockerfileTag>webapp1:alpha</DockerfileTag>. O equivalente atual é <ContainerRepository>webapp1</ContainerRespository> e <ContainerImageTag>alpha</ContainerImageTag>ou <ContainerImageTags>alpha;latest</ContainerImageTags> se você quiser várias marcas.

Example

O arquivo de projeto a seguir mostra exemplos de algumas dessas configurações.

 <Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
    <UserSecretsId>8c7ab9a5-d578-4c40-8b6d-54d174002229</UserSecretsId>
    <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
    <!-- By default, Visual Studio uses the folder above the Dockerfile.
         The path is relative to the Dockerfile, so here the context is
         set to the same folder as the Dockerfile. -->
    <ContainerBuildContext>.</ContainerBuildContext>
    <!-- Set `docker run` arguments to mount a volume -->
    <DockerfileRunArguments>-v $(MSBuildProjectDirectory)/host-folder:/container-folder:ro</DockerfileRunArguments>
    <!-- Set `docker build` arguments to add a custom tag -->
    <ContainerBuildArguments>-t contoso/front-end:v2.0</ContainerBuildArguments>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.20.1" />
  </ItemGroup>

</Project>

Observação

O contexto de build, que você pode definir fornecendo um valor para ContainerBuildContext (ou DockerfileContext), geralmente é diferente no Visual Studio para projetos do que docker build (ou podman build) usa quando você o executa na linha de comando. A saída do comportamento da linha de comando de build é necessária para garantir que os artefatos de build no nível da solução possam ser incluídos.

Quando você chama docker build (ou podman build), você sempre especifica um contexto de build e, opcionalmente, pode especificar um caminho para o Dockerfile. O padrão é que o Dockerfile está na raiz do contexto, mas você pode usar o -f sinalizador para especificar um local alternativo. Por exemplo, você pode criar com docker build -f Dockerfile .. o diretório do projeto ou docker build -f ProjectName/Dockerfile . com o diretório da solução.

 <Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
    <UserSecretsId>8c7ab9a5-d578-4c40-8b6d-54d174002229</UserSecretsId>
    <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
    <!-- In CI/CD scenarios, you might need to change the context. By default, Visual Studio uses the
         folder above the Dockerfile. The path is relative to the Dockerfile, so here the context is
         set to the same folder as the Dockerfile. -->
    <DockerfileContext>.</DockerfileContext>
    <!-- Set `docker run` arguments to mount a volume -->
    <DockerfileRunArguments>-v $(MSBuildProjectDirectory)/host-folder:/container-folder:ro</DockerfileRunArguments>
    <!-- Set `docker build` arguments to add a custom tag -->
    <DockerfileBuildArguments>-t contoso/front-end:v2.0</DockerfileBuildArguments>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.20.1" />
  </ItemGroup>

</Project>

Observação

O contexto do Docker, para o qual você pode definir fornecendo um valor DockerfileContext, geralmente é diferente no Visual Studio para projetos direcionados ao .NET Core (incluindo .NET 5 e posterior) do que docker build usa quando você o executa na linha de comando. A saída do comportamento é docker build necessária para garantir que os artefatos de build no nível da solução possam ser incluídos.

Ao chamar docker build, você sempre especifica um contexto de build e, opcionalmente, pode especificar um caminho para o Dockerfile. O padrão é que o Dockerfile está na raiz do contexto, mas você pode usar o -f sinalizador para especificar um local alternativo. Por exemplo, você pode criar com docker build -f Dockerfile .. o diretório do projeto ou docker build -f ProjectName/Dockerfile . com o diretório da solução.

Próximas etapas

Para obter informações sobre as propriedades do MSBuild em geral, consulte Propriedades do MSBuild.

Consulte também

Propriedades de build do Docker Compose

Configurações de inicialização das Ferramentas de Contêiner

Propriedades reservadas e conhecidas do MSBuild