Compartilhar via


Criar um projeto de contêiner a partir da linha de comando

Se você quiser criar um projeto de contêiner com um Dockerfile fora do Visual Studio, poderá usar docker build (ou podman build) ou dotnet publish /t:PublishContainer criar a partir da linha de comando.

Se você estiver usando o tipo de build do SDK do .NET, não terá um Dockerfile, portanto, não poderá usar docker build ou podman build, em vez disso, usar dotnet publish /t:PublishContainer para criar na linha de comando.

Se você quiser criar um projeto de contêiner com um Dockerfile fora do Visual Studio, poderá usar docker build ou dotnet publish /t:PublishContainer criar a partir da linha de comando.

Se você estiver usando o tipo de build do SDK do .NET, não terá um Dockerfile, portanto, não poderá usar docker build; em vez disso, use dotnet publish /t:PublishContainer para criar na linha de comando.

Pré-requisitos

Pré-requisitos

  • Área de Trabalho do Docker.
  • Visual Studio com o ASP.NET e desenvolvimento na Web, carga de trabalho de desenvolvimento do Azure e/ou carga de trabalho de desenvolvimento da área de trabalho do .NET instalada.

Usar o build do Docker

Para criar uma solução em contêineres a partir da linha de comando, você geralmente pode usar o comando docker build <context> para cada projeto na solução. Você fornece o argumento de contexto de build. O contexto de build para um Dockerfile é a pasta no computador local que é usada como a pasta de trabalho para gerar a imagem. Por exemplo, é a pasta da qual você copia arquivos quando copia para o contêiner. Em projetos do .NET Core, o padrão é usar a pasta que contém o arquivo de solução (.sln ou .slnx). Expresso como um caminho relativo, esse argumento normalmente é ".." para um Dockerfile na pasta de um projeto e para o arquivo de solução na pasta-mãe.

docker build -f Dockerfile ..

Para projetos do .NET Framework, o contexto de build padrão é a pasta do projeto, não a pasta da solução.

Você pode definir o contexto de build no arquivo de projeto definindo a propriedade DockerfileContext. Por exemplo

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

Use a construção do Docker ou do Podman

Para criar uma solução em contêineres a partir da linha de comando, você geralmente pode usar o comando docker build <context> (ou podman build <context>) para cada projeto na solução. Você fornece o argumento de contexto de build. O contexto de build para um Dockerfile é a pasta no computador local que é usada como a pasta de trabalho para gerar a imagem. Por exemplo, é a pasta da qual você copia arquivos quando copia para o contêiner. Em projetos do .NET Core, o padrão é usar a pasta que contém o arquivo de solução (.sln ou .slnx). Expresso como um caminho relativo, esse argumento normalmente é ".." para um Dockerfile na pasta de um projeto e para o arquivo de solução na pasta-mãe.

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

Você pode definir o contexto de build no arquivo de projeto definindo a propriedade ContainerBuildContext. Por exemplo

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

Os caminhos relativos no Dockerfile são relativos ao contexto de build, portanto, se você alterar o contexto, certifique-se de atualizar os caminhos relativos adequadamente.

Com o Visual Studio 17.11 e posterior, quando você adiciona suporte ao Docker a um projeto, você pode especificar uma pasta para o contexto de build. Se você quiser alterar o contexto de build, poderá excluir o Dockerfile (se ele não tiver outras alterações que você deseja manter) e executar novamente Adicionar suporte ao Docker, desta vez especificando o novo contexto de build. O novo Dockerfile terá caminhos relativos atualizados para corresponder ao novo contexto de build.

Ao adicionar suporte de contêiner a um projeto, você pode especificar uma pasta para o contexto de build. Se você quiser alterar o contexto de build, poderá excluir o Dockerfile (se ele não tiver outras alterações que você deseja manter) e executar novamente Adicionar Suporte ao Contêiner, desta vez especificando o novo contexto de build. O novo Dockerfile terá caminhos relativos atualizados para corresponder ao novo contexto de build.

Usar o MSBuild

Nota

Esta seção descreve como você pode personalizar seus contêineres ao escolher o tipo de build de contêiner do Dockerfile. Se você estiver usando o tipo de build do SDK do .NET, as opções de personalização serão diferentes e as informações neste artigo não serão aplicáveis. Em vez disso, confira Colocar em contêiner um aplicativo .NET com dotnet publish.

Dockerfiles criados pelo Visual Studio para projetos do .NET Framework (e para projetos do .NET Core criados com versões do Visual Studio antes do Visual Studio 2017 Atualização 4) não são dockerfiles multiestáquios. As etapas nesses Dockerfiles não compilam seu código. Em vez disso, quando o Visual Studio cria um Dockerfile do .NET Framework, ele primeiro compila seu projeto usando o MSBuild. Quando isso for bem-sucedido, o Visual Studio criará o Dockerfile, que simplesmente copia a saída de build do MSBuild para a imagem resultante do Docker. Como as etapas para compilar seu código não estão incluídas no Dockerfile, você não pode criar Dockerfiles do .NET Framework usando docker build da linha de comando. Você deve usar o MSBuild para criar esses projetos.

Para criar uma imagem para um único projeto de contêiner do Docker, você pode usar o MSBuild com a opção de comando /t:ContainerBuild. Isso diz ao MSBuild para compilar o ContainerBuild de destino, em vez do Build de destino padrão. Por exemplo:

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

Você vê uma saída semelhante àquela que você vê na janela Saída ao compilar sua solução a partir do IDE do Visual Studio. Sempre use /p:Configuration=Release, já que, nos casos em que o Visual Studio usa a otimização de build de várias fases, os resultados ao compilar a configuração de Depuração podem não ser os esperados. Confira Personalize imagens de contêiner para depuração.

Se você estiver usando um projeto do Docker Compose, use este comando para criar imagens:

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

Para exibir os registros do MSBuild, consulte Obtenção de registros de compilação com o MSBuild.

Compilar a partir da linha de comando

O Visual Studio usa o Modo Rápido (se habilitado) para produzir uma imagem de contêiner configurada para funcionar melhor para desenvolvimento e depuração, portanto, não recomendamos copiar os comandos de build do Docker da janela de Saída após um build do Modo Rápido. Para criar uma imagem padrão sem otimizações não padrão, clique com o botão direito do mouse no Dockerfile e escolha a opção Criar imagem do Docker .

O Visual Studio usa o Modo Rápido (se habilitado) para produzir uma imagem de contêiner configurada para funcionar melhor para desenvolvimento e depuração, portanto, não recomendamos copiar os comandos docker build ou podman build da janela de saída após uma compilação em Modo Rápido. Para criar uma imagem padrão sem otimizações não padrão, clique com o botão direito do mouse no Dockerfile e escolha a opção Criar Imagem .

O Visual Studio usa a dev marca para designar imagens que ele preparou especialmente para otimizar o tempo de inicialização durante a depuração. No entanto, essas imagens não devem ser usadas fora do contexto do Visual Studio. Essa etiqueta é uma indicação que as imagens possuem modificações e personalizações fora do padrão, por exemplo, para dar suporte à depuração do Modo Rápido. Consulte Personalizar contêineres do Docker no Visual Studio.