Instalar Ferramentas de Build em um contêinerInstall Build Tools into a container

É possível instalar as Ferramentas de Build do Visual Studio em um contêiner do Windows para oferecer suporte a fluxos de trabalho de CI e CD (integração contínua e entrega contínua).You can install Visual Studio Build Tools into a Windows container to support continuous integration and continuous delivery (CI/CD) workflows. Este artigo orienta sobre quais alterações de configuração do Docker são necessárias, bem como quais cargas de trabalho e componentes podem ser instalados em um contêiner.This article guides you through what Docker configuration changes are required as well as what workloads and components you can install in a container.

Os contêineres são uma ótima maneira de empacotar um sistema de build consistente e podem ser usados não somente em um ambiente de servidor CI/CD, mas também em ambientes de desenvolvimento.Containers are a great way to package a consistent build system you can use not only in a CI/CD server environment but for development environments as well. Por exemplo, é possível pode montar o código-fonte em um contêiner a ser criado por um ambiente personalizado e, ao mesmo tempo, continuar a usar o Visual Studio ou outras ferramentas para escrever o código.For example, you can mount your source code into a container to be built by a customized environment while you continue to use Visual Studio or other tools to write your code. Caso o fluxo de trabalho CI/CD use a mesma imagem de contêiner, fique tranquilo, o código será compilado de forma consistente.If your CI/CD workflow uses the same container image, you can rest assured that your code builds consistently. Também é possível usar os contêineres para obter consistência em tempo de execução, o que é comum em microsserviços que usam vários contêineres com um sistema de orquestração, mas está fora do escopo deste artigo.You can use containers for runtime consistency as well, which is common for micro-services using multiple containers with an orchestration system; however, is beyond the scope of this article.

Se as Ferramentas de Build do Visual Studio não têm o que você precisa para compilar o código-fonte, estas etapas podem ser usadas em outros produtos do Visual Studio.If Visual Studio Build Tools does not have what you require to build your source code, these same steps can be used for other Visual Studio products. Vale ressaltar, no entanto, que os contêineres do Windows não têm suporte para uma interface do usuário interativo, então, todos os comandos devem ser automatizados.Do note, however, that Windows containers do not support an interactive user interface so all commands must be automated.

Visão geralOverview

Por meio do Docker, é possível criar uma imagem da qual pode-se criar contêineres que compilam o código-fonte.Using Docker you create an image from which you can create containers that build your source code. O Dockerfile de exemplo instala as Ferramentas de Build do Visual Studio 2017 mais recentes e outros programas úteis, geralmente utilizados para compilar código-fonte.The example Dockerfile installs the latest Visual Studio Build Tools 2017 and some other helpful programs often used for building source code. É possível modificar ainda mais o Dockerfile para incluir outras ferramentas e scripts para executar testes, publicar saída de build e muito mais.You can further modify your own Dockerfile to include other tools and scripts to run tests, publish build output, and more.

Se o Docker para Windows já estiver instalado, pule para a etapa 3.If you have already installed Docker for Windows, you can skip to step 3.

Etapa 1.Step 1. Habilitar o Hyper-VEnable Hyper-V

O Hyper-V não está habilitado por padrão.Hyper-V is not enabled by default. Ele deve ser habilitado para inicializar o Docker para Windows, pois, atualmente, apenas o isolamento de Hyper-V tem suporte no Windows 10.It must be enabled to start Docker for Windows, since currently only Hyper-V isolation is supported for Windows 10.

Note

A virtualização deve ser habilitada no computador.Virtualization must be enabled on your machine. Normalmente, ela está habilitada por padrão; no entanto, se a instalação do Hyper-V falhar, consulte a documentação do sistema para saber como habilitar a virtualização.It is typically enabled by default; however, if Hyper-V install fails, refer to your system documentation for how to enable virtualization.

Etapa 2.Step 2. Instalar o Docker para WindowsInstall Docker for Windows

Caso você use o Windows 10, é possível baixar e instalar a Docker Community Edition.If using Windows 10, you can download and install Docker Community Edition. Se usar o Windows Server 2016, siga as instruções para instalar o Docker Enterprise Edition.If using Windows Server 2016, follow instructions to install Docker Enterprise Edition.

Etapa 3.Step 3. Alternar para os contêineres do WindowsSwitch to Windows Containers

Só é possível instalar as Ferramentas de Build 2017 no Windows, o que requer alternar para os contêineres do Windows.You can only install Build Tools 2017 on Windows, which requires you switch to Windows containers. Os contêineres do Windows no Windows 10 têm suporte somente para o isolamento do Hyper-V, enquanto os contêineres do Windows no Windows Server 2016 oferecem suporte para Hyper-V e isolamento de processo.Windows containers on Windows 10 support only Hyper-V isolation, while Windows containers on Windows Server 2016 support both Hyper-V and process isolation.

Etapa 4.Step 4. Expandir o tamanho de disco máximo do contêinerExpand maximum container disk size

As Ferramentas de Build do Visual Studio e, em grande medida, o Visual Studio, exigem muito espaço em disco para todas as ferramentas que são instaladas.Visual Studio Build Tools - and to a greater extent, Visual Studio - require lots of disk space for all the tools that get installed. Embora o Dockerfile de exemplo desabilite o cache do pacote, o tamanho do disco das imagens de contêiner deve ser aumentado para acomodar o espaço necessário.Even though the example Dockerfile disables the package cache, the disk size of container images must be increased to accommodate the space required. No Windows, atualmente, é possível aumentar o tamanho do disco somente alterando a configuração do Docker.Currently on Windows, you can only increase disk size by changing the Docker configuration.

No Windows 10:On Windows 10:

  1. Clique com o botão direito do mouse no ícone do Docker para Windows na bandeja do sistema e clique em Configurações....Rick-click on the Docker for Windows icon in the system tray and click Settings....
  2. Clique na seção Daemon.Click on the Daemon section.
  3. Alterne o botão de Básico para Avançado.Toggle the Basic button to Advanced.
  4. Adicione a seguinte propriedade de matriz JSON para aumentar o espaço em disco para 120 GB, mais que o suficiente para Ferramentas de Build com espaço para expansão.Add the following JSON array property to increase disk space to 120 GB (more than enough for Build Tools with room to grow).

    {
      "storage-opts": [
        "size=120GB"
      ]
    }
    

    Essa propriedade é adicionada a qualquer coisa que você já tiver.This property is added to anything you already have. Por exemplo, com essas alterações aplicadas ao arquivo de configuração daemon padrão, agora você verá:For example, with these changes applied to the default daemon configuration file, you should now see:

    {
      "registry-mirrors": [],
      "insecure-registries": [],
      "debug": true,
      "experimental": true,
      "storage-opts": [
        "size=120GB"
      ]
    }
    
  5. Clique em Aplicar.Click Apply.

No Windows Server 2016:On Windows Server 2016:

  1. Interrompa o serviço de "docker":Stop the "docker" service:

    sc.exe stop docker
    
  2. Em um prompt de comandos com privilégios elevados, edite "%ProgramData%\Docker\config\daemon.json" ou o que você especificou para dockerd --config-file.From an elevated command prompt, edit "%ProgramData%\Docker\config\daemon.json" (or whatever you specified to dockerd --config-file).

  3. Adicione a seguinte propriedade de matriz JSON para aumentar o espaço em disco para 120 GB, mais que o suficiente para Ferramentas de Build com espaço para expansão.Add the following JSON array property to increase disk space to 120 GB (more than enough for Build Tools with room to grow).

    {
      "storage-opts": [
        "size=120GB"
      ]
    }
    

    Essa propriedade é adicionada a qualquer coisa que você já tiver.This property is added to anything you already have.

  4. Salve e feche o arquivo.Save and close the file.
  5. Inicie o serviço de "docker":Start the "docker" service:

    sc.exe start docker
    

Etapa 5.Step 5. Criar e compilar o DockerfileCreate and build the Dockerfile

Salve o Dockerfile de exemplo a seguir em um novo arquivo no disco.Save the following example Dockerfile to a new file on your disk. Se o nome do arquivo é simplesmente "Dockerfile", ele será reconhecido por padrão.If the file is named simply "Dockerfile", it is recognized by default.

Note

Este Dockerfile de exemplo apenas exclui SDKs do Windows mais antigas que não podem ser instaladas nos contêineres.This example Dockerfile only excludes older Windows SDKs that cannot be installed into containers. Versões mais antigas fazem com que o comando de build falhe.Older releases cause the build command to fail.

  1. Abra um prompt de comando.Open a command prompt.
  2. Crie um novo diretório (recomendado):Create a new directory (recommended):

    mkdir C:\BuildTools
    
  3. Altere os diretórios para este novo diretório:Change directories to this new directory:

    cd C:\BuildTools
    
  4. Salve o conteúdo a seguir em C:\BuildTools\Dockerfile.Save the following content to C:\BuildTools\Dockerfile.

    # escape=`
    
    # Use the latest Windows Server Core image with .NET Framework 4.7.1.
    FROM microsoft/dotnet-framework:4.7.1
    
    # Restore the default Windows shell for correct batch processing below.
    SHELL ["cmd", "/S", "/C"]
    
    # Download the Build Tools bootstrapper.
    ADD https://aka.ms/vs/15/release/vs_buildtools.exe C:\TEMP\vs_buildtools.exe
    
    # Install Build Tools excluding workloads and components with known issues.
    RUN C:\TEMP\vs_buildtools.exe --quiet --wait --norestart --nocache `
        --installPath C:\BuildTools `
        --all `
        --remove Microsoft.VisualStudio.Component.Windows10SDK.10240 `
        --remove Microsoft.VisualStudio.Component.Windows10SDK.10586 `
        --remove Microsoft.VisualStudio.Component.Windows10SDK.14393 `
        --remove Microsoft.VisualStudio.Component.Windows81SDK `
     || IF "%ERRORLEVEL%"=="3010" EXIT 0
    
    # Start developer command prompt with any other commands specified.
    ENTRYPOINT C:\BuildTools\Common7\Tools\VsDevCmd.bat &&
    
    # Default to PowerShell if no other command specified.
    CMD ["powershell.exe", "-NoLogo", "-ExecutionPolicy", "Bypass"]
    

    Note

    Se você basear sua imagem diretamente no microsoft/windowsservercore, o .NET Framework poderá não ser instalado corretamente e nenhum erro de instalação será indicado.If you base your image directly on microsoft/windowsservercore, the .NET Framework may not install properly and no install error is indicated. Código gerenciado não poderá ser executado depois que a instalação for concluída.Managed code may not run after the install is complete. Em vez disso, baseie sua imagem no microsoft/dotnet-framework:4.7.1 ou mais recente.Instead, base your image on microsoft/dotnet-framework:4.7.1 or newer. Observe também que imagens mais recentes podem usar o PowerShell como o SHELL padrão, o que causará uma falha nas instruções RUN e ENTRYPOINT.Also note that newer images may use PowerShell as the default SHELL which will cause the RUN and ENTRYPOINT instructions to fail.

  5. Execute o seguinte comando nesse diretório.Run the following command within that directory.

    docker build -t buildtools2017:latest -m 2GB .
    

    Este comando cria o Dockerfile no diretório atual usando 2 GB de memória.This command builds the Dockerfile in the current directory using 2 GB of memory. O 1 GB padrão não é suficiente quando algumas cargas de trabalho são instaladas. No entanto, é possível criar com apenas 1 GB de memória, de acordo com os requisitos de build.The default 1 GB is not sufficient when some workloads are installed; however, you may be able to build with only 1 GB of memory depending on your build requirements.

    A imagem final contém uma marca "buildtools2017:latest", então, é possível executá-la facilmente em um contêiner como "buildtools2017", visto que a marca "mais recente" é o padrão se nenhuma marca for especificada.The final image is tagged "buildtools2017:latest" so you can easily run it in a container as "buildtools2017" since the "latest" tag is the default if no tag is specified. Caso queira utilizar uma versão específica das Ferramentas de Build do Visual Studio 2017 em um cenário mais avançado, em vez disso, é possível marcar o contêiner com um número de build específico do Visual Studio, assim como "mais recente", para que os contêineres usem uma versão específica constantemente.If you want to use a specific version of Visual Studio Build Tools 2017 in a more advanced scenario, you might instead tag the container with a specific Visual Studio build number as well as "latest" so containers can use a specific version consistently.

Etapa 6.Step 6. Usar a imagem criadaUsing the built image

Agora que a imagem foi criada, é possível executá-la em um contêiner para fazer builds interativos e automatizados.Now that you have created an image, you can run it in a container to do both interactive and automated builds. O exemplo usa o Prompt de Comando do Desenvolvedor, assim, PATH e outras variáveis de ambiente já estão configuradas.The example uses the Developer Command Prompt, so your PATH and other environment variables are already configured.

  1. Abra um prompt de comando.Open a command prompt.
  2. Execute o contêiner para iniciar um ambiente do PowerShell com as variáveis de ambiente de desenvolvedor configuradas:Run the container to start a PowerShell environment with all developer environment variables set:

    docker run -it buildtools2017
    

Para usar essa imagem no fluxo de trabalho CI/CD, publique-a no seu próprio Registro de Contêiner do Azure ou em outro registro Docker interno, assim, os servidores só precisarão efetuar pull.To use this image for your CI/CD workflow, you can publish it to your own Azure Container Registry or other internal Docker registry so servers only need to pull it.

Obter suporteGet support

Às vezes, as coisas podem dar errado.Sometimes, things can go wrong. Se a instalação do Visual Studio falhar, confira a página Solução de problemas de instalação e atualização do Visual Studio 2017 para obter orientações passo a passo.If your Visual Studio installation fails, see Troubleshooting Visual Studio 2017 installation and upgrade issues for step-by-step guidance.

Também oferecemos uma opção de suporte via chat ao vivo (somente em inglês) para problemas relacionados à instalação.We also offer a live chat (English only) support option for installation-related issues.

Aqui estão algumas outras opções de suporte:Here are a few more support options:

Consulte tambémSee also