Propriedades de build do Docker Compose

Além das propriedades que controlam projetos individuais do Docker, descritas em Propriedades de build das Ferramentas de Contêiner, você também pode personalizar como o Visual Studio compila seus projetos do Docker Compose definindo as propriedades do Docker Compose que o MSBuild usa para compilar a solução. Você também pode controlar como o depurador do Visual Studio executa aplicativos Docker Compose definindo rótulos de arquivo nos arquivos de configuração do Docker Compose.

Como definir as propriedades do MSBuild

Para definir o valor de uma propriedade, edite o arquivo de projeto. Para propriedades do Docker Compose, esse arquivo de projeto é o que tem a extensão .dcproj, a menos que indicado de outra forma na tabela na próxima seção. Por exemplo, suponha que você queira especificar que o navegador seja iniciado ao iniciar a depuração. Você pode definir a propriedade DockerLaunchAction no arquivo de projeto .dcproj conforme indicado a seguir.

<PropertyGroup>
   <DockerLaunchAction>LaunchBrowser</DockerLaunchAction>
</PropertyGroup>

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

Propriedades do Docker Compose no MSBuild

A tabela a seguir mostra as propriedades do MSBuild disponíveis para projetos do Docker Compose.

Nome da propriedade Location Descrição Valor padrão
AdditionalComposeFilePaths dcproj Especifica arquivos de composição adicionais em uma lista delimitada por ponto e vírgula a serem enviados a docker-compose.exe para todos os comandos. Caminhos relativos do arquivo de projeto do Docker Compose (dcproj) são permitidos. -
DockerComposeBaseFilePath dcproj Especifica a primeira parte dos nomes de arquivo dos arquivos do Docker Compose, sem a .yml extensão. Por exemplo:
1. DockerComposeBaseFilePath = null/undefined: use o caminho docker-composedo arquivo base e os arquivos serão nomeados docker-compose.yml e docker-compose.override.yml.
2. DockerComposeBaseFilePath = mydockercompose: os arquivos serão nomeados mydockercompose.yml e mydockercompose.override.yml.
3. DockerComposeBaseFilePath = ..\mydockercompose: os arquivos estarão um nível acima.
docker-compose
DockerComposeBuildArguments dcproj Especifica os parâmetros extra a serem passados para o comando docker-compose build. Por exemplo, --parallel --pull.
DockerComposeDownArguments dcproj Especifica os parâmetros extra a serem passados para o comando docker-compose down. Por exemplo, --timeout 500. -
DockerComposeEnvFilePath dcproj O caminho relativo para um arquivo .env que será passado para comandos docker compose por meio de --env-file. Consulte Substituir por um arquivo .env. Vazio
DockerComposeProjectName dcproj Se especificado, substitui o nome do projeto para um projeto Docker Compose. "dockercompose" + hash gerado automaticamente
DockerComposeProjectPath csproj ou vbproj O caminho relativo para o arquivo de projeto do Docker Compose (dcproj). Defina essa propriedade ao publicar o projeto de serviço para localizar as configurações do build de imagem associadas armazenadas no arquivo docker-compose.yml. -
DockerComposeProjectsToIgnore dcproj Especifica projetos a serem ignorados pelas ferramentas de Composição do Docker durante a depuração. Essa propriedade pode ser usada para qualquer projeto. Caminhos de arquivo podem ser especificados de duas maneiras:
1. Relativos a dcproj. Por exemplo, <DockerComposeProjectsToIgnore>path\to\AngularProject1.csproj</DockerComposeProjectsToIgnore>.
2. Caminhos absolutos.
Observação: os caminhos devem ser separados pelo caractere delimitador ;.
-
DockerComposeUpArguments dcproj Especifica os parâmetros extra a serem passados para o comando docker-compose up. Por exemplo, --timeout 500. -
DockerDevelopmentMode dcproj Controla se o projeto do usuário é compilado no contêiner. Os valores permitidos Rápido ou Regular controlam quais estágios são compilados em um Dockerfile. A configuração de Depuração é o modo Rápido por padrão e, caso contrário, o modo Regular. Rápido
DockerLaunchAction dcproj Especifica a ação de inicialização a ser executada ao pressionar F5 ou Ctrl+F5. Os valores permitidos são None, LaunchBrowser e LaunchWCFTestClient. Nenhum
DockerLaunchBrowser dcproj Indica se o navegador deve ser iniciado. Ignorado se DockerLaunchAction for especificado. Falso
DockerServiceName dcproj Se DockerLaunchAction ou DockerLaunchBrowser forem especificados, DockerServiceName especificará qual serviço referenciado docker-compose no arquivo será iniciado. -
DockerServiceUrl dcproj A URL a ser usada ao iniciar o navegador. Os tokens de substituição válidos são "{ServiceIPAddress}", "{ServicePort}" e "{Scheme}". Por exemplo: {Scheme}://{ServiceIPAddress}:{ServicePort} -
DockerTargetOS dcproj O sistema operacional de destino usado ao compilar a imagem do Docker. -

Exemplo

Se você alterar o docker-compose local dos arquivos, definindo DockerComposeBaseFilePath como um caminho relativo, também precisará certificar-se de que o contexto de compilação seja alterado para que ele faça referência à pasta de solução. Por exemplo, se o docker-compose arquivo for uma pasta chamada DockerComposeFiles, o arquivo Docker Compose deverá definir o contexto de compilação como ".." ou ".. /..", dependendo de onde ele está em relação à pasta da solução.

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" Sdk="Microsoft.Docker.Sdk">
  <PropertyGroup Label="Globals">
    <ProjectVersion>2.1</ProjectVersion>
    <DockerTargetOS>Windows</DockerTargetOS>
    <ProjectGuid>154022c1-8014-4e9d-bd78-6ff46670ffa4</ProjectGuid>
    <DockerLaunchAction>LaunchBrowser</DockerLaunchAction>
    <DockerServiceUrl>{Scheme}://{ServiceIPAddress}{ServicePort}</DockerServiceUrl>
    <DockerServiceName>webapplication1</DockerServiceName>
    <DockerComposeBaseFilePath>DockerComposeFiles\mydockercompose</DockerComposeBaseFilePath>
    <AdditionalComposeFilePaths>AdditionalComposeFiles\myadditionalcompose.yml</AdditionalComposeFilePaths>
  </PropertyGroup>
  <ItemGroup>
    <None Include="DockerComposeFiles\mydockercompose.override.yml">
      <DependentUpon>DockerComposeFiles\mydockercompose.yml</DependentUpon>
    </None>
    <None Include="DockerComposeFiles\mydockercompose.yml" />
    <None Include=".dockerignore" />
  </ItemGroup>
</Project>

O arquivo mydockercompose.yml deve ter esta aparência, com o contexto de build definido como o caminho relativo da pasta da solução (nesse caso, ..).

version: '3.4'

services:
  webapplication1:
    image: ${DOCKER_REGISTRY-}webapplication1
    build:
      context: ..
      dockerfile: WebApplication1\Dockerfile

Observação

DockerComposeBuildArguments, DockerComposeDownArguments e DockerComposeUpArguments são novos no Visual Studio 2019 versão 16.3.

Substituindo a configuração do Docker Compose do Visual Studio

Normalmente, docker-compose.override.yml é usado para substituir determinadas configurações em docker-compose.yml. Além disso, o Visual Studio gera arquivos de substituição docker-compose.vs.debug.g.yml (para o modo rápido ) e arquivos docker-compose.vs.release.g.yml (para o modo regular ) com configurações específicas para executar o aplicativo dentro do Visual Studio. Você pode substituir essas configurações do Visual Studio colocando um arquivo chamado docker-compose.vs.debug.yml (para o modo Rápido) ou docker-compose.vs.release.yml (para o modo Regular) no mesmo diretório que o arquivo docker-compose.yml. Clique com o botão direito do mouse no projeto Docker Compose e selecione Abrir pasta no Explorador de Arquivos e, em seguida, use Adicionar>item existente para adicionar o arquivo ao seu projeto Docker Compose.

Dica

Para descobrir os valores padrão de qualquer uma das configurações do Visual Studio, examine o diretório de saída intermediário (por exemplo, obj/Docker) para docker-compose.vs.debug.g.yml ou docker-compose.vs.release.g.yml. Esses arquivos são gerados pelo Visual Studio e não devem ser modificados.

Rótulos de arquivo do Docker Compose

Em docker-compose.vs.debug.yml ou docker-compose.vs.release.yml, você pode definir rótulos específicos de substituição da seguinte maneira:

services:
  webapplication1:
    labels:
      com.microsoft.visualstudio.debuggee.workingdirectory: "C:\\my_app_folder"

Use aspas duplas em torno dos valores, como no exemplo anterior, e use a barra invertida como um caractere de escape para barras invertidas em caminhos.

Nome do rótulo Descrição
com.microsoft.visualstudio.debuggee.program O programa iniciado ao iniciar a depuração. Para aplicativos .NET Core, essa configuração normalmente é dotnet.
com.microsoft.visualstudio.debuggee.arguments Os argumentos passados ao programa ao iniciar a depuração. Para aplicativos .NET Core, esses argumentos normalmente são caminhos de pesquisa adicionais para pacotes NuGet seguidos pelo caminho para o assembly de saída do projeto.
com.microsoft.visualstudio.debuggee.workingdirectory O diretório usado como diretório inicial ao iniciar a depuração. Essa configuração normalmente é /app para contêineres do Linux ou C:\app para contêineres do Windows.
com.microsoft.visualstudio.debuggee.killprogram Esse comando é usado para interromper o programa depurador em execução dentro do contêiner (quando necessário).
Nome do rótulo Descrição
com.microsoft.visualstudio.debuggee.program O programa iniciado ao iniciar a depuração. Para aplicativos .NET Core, essa configuração normalmente é dotnet.
com.microsoft.visualstudio.debuggee.arguments Os argumentos passados ao programa ao iniciar a depuração. Para aplicativos .NET Core, esses argumentos normalmente são caminhos de pesquisa adicionais para pacotes NuGet seguidos pelo caminho para o assembly de saída do projeto.
com.microsoft.visualstudio.debuggee.workingdirectory O diretório usado como diretório inicial ao iniciar a depuração. Essa configuração normalmente é /app para contêineres do Linux ou C:\app para contêineres do Windows.
com.microsoft.visualstudio.debuggee.killprogram Esse comando é usado para interromper o programa depurador em execução dentro do contêiner (quando necessário).
com.microsoft.visualstudio.debuggee.noattach.program O programa iniciado quando você usa Iniciar sem depurar (Ctrl+F5) em um projeto do Azure Functions executado em um processo isolado. Normalmente, F5 e Ctrl+F5 usam o mesmo programa, mas se qualquer tipo de projeto como o Azure Functions em um processo isolado exigir um programa diferente de F5, ele será usado.
com.microsoft.visualstudio.debuggee.noattach.arguments Os argumentos passados para o programa quando você usa Iniciar sem depurar (Ctrl+F5) em um projeto do Azure Functions executado em um processo isolado.

Personalizar o processo de build do Docker

Você pode declarar qual estágio compilar no Dockerfile usando a configuração target na propriedade build. Essa substituição pode ser usada apenas em docker-compose.vs.debug.yml ou docker-compose.vs.release.yml

services:
  webapplication1:
    build:
      target: customStage
    labels:
      ...

Personalizar o processo de inicialização do aplicativo

Você pode executar um comando ou script personalizado antes de iniciar o aplicativo usando a configuração entrypoint e tornando-a dependente do DockerDevelopmentMode. Por exemplo, se você precisar configurar um certificado somente no modo Rápido executando update-ca-certificates, mas não no modo Regular, poderá adicionar o seguinte código somente em docker-compose.vs.debug.yml:

services:
  webapplication1:
    entrypoint: "sh -c 'update-ca-certificates && tail -f /dev/null'"
    labels:
      ...

Próximas etapas

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

Confira também

Propriedades de build das Ferramentas de Contêiner

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

Gerenciar perfis de inicialização do Docker Compose no Visual Studio

Propriedades reservadas e conhecidas do MSBuild