Compartilhar via


Propriedades de build das Ferramentas de Contêiner

Você pode personalizar como o Visual Studio compila seus projetos de contêiner definindo as propriedades que o MSBuild usa para compilar 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 propriedade DockerfileFile no arquivo de projeto conforme indicado a seguir.

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

Adicione a configuração da propriedade a um elemento PropertyGroup existente ou, se não houver um, crie um elemento PropertyGroup.

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, EnableSdkContainerDebugging, no arquivo de projeto que é necessário para projetos em contêineres do SDK do .NET. Ela deve ser definido como True para projetos do SDK do .NET a fim de 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 Descrição 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 .NET Framework do ASP.NET 1.7.8 ou mais recente
DockerDebuggeeProgram Ao depurar, o depurador é instruído a iniciar esse executável. Para projetos do .NET Core e do .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 encerrar o processo em execução em um contêiner. Não aplicável a projetos .NET Framework do 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 Docker build. 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 para o Dockerfile. Definido pelo Visual Studio quando o suporte ao Docker é adicionado a um projeto. Em projetos .NET Framework, defina como "." (a pasta do projeto) e, em projetos do .NET Core e .NET 5 e posterior, ela é definida 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 que será usado para compilar/executar o contêiner do projeto. Esse valor pode ser um caminho. Dockerfile 1.0.1872750 ou mais recente
DockerfileRunArguments Argumentos adicionais passados para o comando Docker run. 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 ":dev" é acrescentado à marca. Nome do assembly após a remoção de caracteres não alfanuméricos com as seguintes regras:
Se a marca resultante for toda numérica, "image" será inserido como um prefixo (por exemplo, image2314)
Se a marca resultante for uma cadeia de caracteres vazia, "image" será usado como a marca.
1.0.1872750 ou mais recente

Exemplo

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>
    <!-- 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, que você pode definir fornecendo um valor para DockerfileContext, geralmente é diferente no Visual Studio para projetos direcionados ao .NET Core (incluindo o .NET 5 e posterior) do que docker build usa quando você o executa na linha de comando. A mudança de comportamento de 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 esteja na raiz do contexto, mas você pode usar o sinalizador -f para especificar um local alternativo. Por exemplo, você pode compilar com docker build -f Dockerfile .. no diretório do projeto ou docker build -f ProjectName/Dockerfile . no diretório da solução.

Próximas etapas

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

Confira também

Propriedades do build de Docker Compose

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

Propriedades reservadas e conhecidas do MSBuild