Partilhar via


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

Se você quiser compilar um projeto de contêiner com um Dockerfile fora do Visual Studio, pode usar docker build, MSBuild, dotnet build ou dotnet publish para compilar 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 MSBuild, dotnet build ou dotnet publish para compilar na linha de comando.

Usar o build do Docker

Para compilar uma solução conteinerizada 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 usada para copiar arquivos quando copia para o contêiner. Nos projetos .NET Core, o padrão é usar a pasta que contém o arquivo de solução (.sln). Expresso como um caminho relativo, esse argumento normalmente é ".." para um Dockerfile em uma pasta de projeto e o arquivo de solução na pasta pai. Para projetos do .NET Framework, o contexto de criação padrão é a pasta do projeto, não a pasta da solução.

docker build -f Dockerfile ..

Você pode definir o contexto de criação no arquivo de projeto definindo a propriedade DockerfileContext. Por exemplo,

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

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

Com o Visual Studio 17.11 e posterior, ao adicionar suporte ao Docker a um projeto, você pode especificar uma pasta para o contexto de criação. Se você quiser alterar o contexto de criação, 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 criação. O novo Dockerfile terá caminhos relativos atualizados para corresponder ao novo contexto de criação.

Usar o MSBuild

Observação

Esta seção descreve como você pode personalizar seus contêineres do Docker 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, consulte Colocar em contêiner um aplicativo .NET com dotnet publish.

Os Dockerfiles criados pelo Visual Studio para projetos do .NET Framework (e para projetos do .NET Core criados com versões do Visual Studio anteriores à Atualização 4 do Visual Studio 2017) não são Dockerfiles de várias fases. As etapas nesses Dockerfiles não compilam o seu código. Em vez disso, quando o Visual Studio compila um Dockerfile do .NET Framework, ele primeiro compila o projeto usando o MSBuild. Quando esse processo é bem-sucedido, o Visual Studio compila 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 compila os Dockerfiles do .NET Framework usando docker build a partir da linha de comando. Você deve usar o MSBuild para compilar 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ê verá uma saída semelhante à 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. Consulte Personalizar imagens de contêiner para depuração.

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

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

Para exibir os logs do MSBuild, consulte Obter criação de logs com o MSBuild.