Instalar Build Tools en un contenedorInstall Build Tools into a container

Puede instalar Visual Studio Build Tools en un contenedor de Windows para admitir los flujos de trabajo de integración continua y entrega continua (CI/CD).You can install Visual Studio Build Tools into a Windows container to support continuous integration and continuous delivery (CI/CD) workflows. Este artículo le guía a través de los cambios de configuración de Docker necesarios, así como de las cargas de trabajo y componentes que puede instalar en un contenedor.This article guides you through what Docker configuration changes are required as well as what workloads and components you can install in a container.

Los contenedores son una excelente manera de empaquetar un sistema de compilación coherente que se puede usar no solo en un entorno de servidor de CI/CD sino también para entornos de desarrollo.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 ejemplo, puede montar el código fuente en un contenedor para que se compile en un entorno personalizado mientras continúa usando Visual Studio u otras herramientas para escribir el 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. Si en el flujo de trabajo de CI/CD se usa la misma imagen de contenedor, puede estar seguro de que el código se compila de forma coherente.If your CI/CD workflow uses the same container image, you can rest assured that your code builds consistently. También puede usar contenedores por motivos de coherencia del tiempo de ejecución, lo que es común para microservicios que usan varios contenedores con un sistema de orquestación, pero queda fuera del ámbito de este artículo.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.

Si Visual Studio Build Tools no tiene lo que necesita para compilar el código fuente, estos mismos pasos se pueden usar para otros productos de 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. Pero tenga en cuenta que los contenedores de Windows no admiten una interfaz de usuario interactiva, por lo que todos los comandos se deben automatizar.Do note, however, that Windows containers do not support an interactive user interface so all commands must be automated.

Información generalOverview

Con Docker se crea una imagen desde la que se pueden crear contenedores para compilar el código fuente.Using Docker you create an image from which you can create containers that build your source code. El Dockerfile de ejemplo instala la versión más reciente de Visual Studio Build Tools 2017 y otros programas útiles que se usan a menudo para la compilación de código fuente.The example Dockerfile installs the latest Visual Studio Build Tools 2017 and some other helpful programs often used for building source code. Puede modificar aún más su propio Dockerfile para incluir otras herramientas y scripts para ejecutar pruebas, publicar la salida de la compilación y mucho más.You can further modify your own Dockerfile to include other tools and scripts to run tests, publish build output, and more.

Si ya ha instalado Docker para Windows, puede ir al paso 3.If you have already installed Docker for Windows, you can skip to step 3.

Paso 1.Step 1. Habilitar Hyper-VEnable Hyper-V

De forma predeterminada, Hyper-V no está habilitado.Hyper-V is not enabled by default. Debe estar habilitado para iniciar Docker para Windows, porque actualmente solo se admite el aislamiento de Hyper-V para Windows 10.It must be enabled to start Docker for Windows, since currently only Hyper-V isolation is supported for Windows 10.

Nota

La virtualización debe estar habilitada en el equipo.Virtualization must be enabled on your machine. Normalmente está habilitada de forma predeterminada; pero si se produce un error de instalación de Hyper-V, vea la documentación del sistema para obtener información sobre cómo habilitar la virtualización.It is typically enabled by default; however, if Hyper-V install fails, refer to your system documentation for how to enable virtualization.

Paso 2.Step 2. Instalar Docker para WindowsInstall Docker for Windows

Si usa Windows 10, puede descargar e instalar Docker Community Edition.If using Windows 10, you can download and install Docker Community Edition. Si usa Windows Server 2016, siga las instrucciones para instalar Docker Enterprise Edition.If using Windows Server 2016, follow instructions to install Docker Enterprise Edition.

Paso 3.Step 3. Cambiar a contenedores de WindowsSwitch to Windows Containers

Solo se puede instalar Build Tools 2017 en Windows, lo que requiere cambiar a contenedores de Windows.You can only install Build Tools 2017 on Windows, which requires you switch to Windows containers. Los contenedores de Windows en Windows 10 solo admiten el aislamiento de Hyper-V, mientras que los contenedores de Windows en Windows Server 2016 admiten el aislamiento de Hyper-V y de procesos.Windows containers on Windows 10 support only Hyper-V isolation, while Windows containers on Windows Server 2016 support both Hyper-V and process isolation.

Paso 4.Step 4. Expandir el tamaño máximo de disco del contenedorExpand maximum container disk size

Visual Studio Build Tools y, en mayor medida, Visual Studio, requieren una gran cantidad de espacio en disco para todas las herramientas que se instalan.Visual Studio Build Tools - and to a greater extent, Visual Studio - require lots of disk space for all the tools that get installed. Aunque en el Dockerfile de ejemplo se deshabilita la caché del paquete, el tamaño de disco de las imágenes de contenedor debe aumentarse para alojar el espacio necesario.Even though the example Dockerfile disables the package cache, the disk size of container images must be increased to accommodate the space required. Actualmente, en Windows solamente se puede aumentar el tamaño de disco cambiando la configuración de Docker.Currently on Windows, you can only increase disk size by changing the Docker configuration.

En Windows 10:On Windows 10:

  1. Haga clic con el botón derecho en el icono de Docker para Windows en la bandeja del sistema y haga clic en Configuración....Rick-click on the Docker for Windows icon in the system tray and click Settings....
  2. Haga clic en la sección Demonio.Click on the Daemon section.
  3. Alterne el botón Básico a Avanzado.Toggle the Basic button to Advanced.
  4. Agregue la siguiente propiedad de matriz JSON para aumentar el espacio en disco a 120 GB (más que suficiente para Build Tools con espacio para que aumente).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"
      ]
    }
    

    Esta propiedad se agrega a todo lo que ya tenga.This property is added to anything you already have. Por ejemplo, con estos cambios aplicados al archivo de configuración del demonio predeterminado, ahora verá lo siguiente: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. Haga clic en Aplicar.Click Apply.

En Windows Server 2016:On Windows Server 2016:

  1. Detenga el servicio "docker":Stop the "docker" service:

    sc.exe stop docker
    
  2. Desde un símbolo del sistema con privilegios elevados, modifique "%ProgramData%\Docker\config\daemon.json" (o lo que especificó para dockerd --config-file).From an elevated command prompt, edit "%ProgramData%\Docker\config\daemon.json" (or whatever you specified to dockerd --config-file).

  3. Agregue la siguiente propiedad de matriz JSON para aumentar el espacio en disco a 120 GB (más que suficiente para Build Tools con espacio para que aumente).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"
      ]
    }
    

    Esta propiedad se agrega a todo lo que ya tenga.This property is added to anything you already have.

  4. Guarde y cierre el archivo.Save and close the file.
  5. Inicie el servicio "docker":Start the "docker" service:

    sc.exe start docker
    

Paso 5.Step 5. Crear y compilar el DockerfileCreate and build the Dockerfile

Guarde el Dockerfile de ejemplo siguiente en un archivo nuevo en el disco.Save the following example Dockerfile to a new file on your disk. Si el archivo se denomina simplemente "Dockerfile", se reconoce de forma predeterminada.If the file is named simply "Dockerfile", it is recognized by default.

Nota

En este Dockerfile de ejemplo solo se excluyen los SDK de Windows antiguos que no se pueden instalar en contenedores.This example Dockerfile only excludes older Windows SDKs that cannot be installed into containers. Las versiones anteriores hacen que el comando genere un error.Older releases cause the build command to fail.

  1. Abra un símbolo del sistema.Open a command prompt.
  2. Cree un directorio (recomendado):Create a new directory (recommended):

    mkdir C:\BuildTools
    
  3. Cambie los directorios a este nuevo directorio:Change directories to this new directory:

    cd C:\BuildTools
    
  4. Guarde el contenido siguiente en 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"]
    

    Nota

    Si basa la imagen directamente en microsoft/windowsservercore, puede que .NET Framework no se instale correctamente y no se indique ningún error de instalación.If you base your image directly on microsoft/windowsservercore, the .NET Framework may not install properly and no install error is indicated. El código administrado podría no ejecutarse una vez completada la instalación.Managed code may not run after the install is complete. En su lugar, base la imagen en microsoft/dotnet-framework:4.7.1 o en otra versión más reciente.Instead, base your image on microsoft/dotnet-framework:4.7.1 or newer. Tenga en cuenta también que puede ser que las nuevas imágenes usen PowerShell como valor SHELL predeterminado, lo que hará que las instrucciones RUN y ENTRYPOINT produzcan un error.Also note that newer images may use PowerShell as the default SHELL which will cause the RUN and ENTRYPOINT instructions to fail.

  5. Ejecute el comando siguiente desde ese directorio.Run the following command within that directory.

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

    Este comando compila el archivo Dockerfile en el directorio actual con 2 GB de memoria.This command builds the Dockerfile in the current directory using 2 GB of memory. El valor predeterminado de 1 GB no es suficiente cuando se instalan algunas cargas de trabajo; pero es posible que pueda compilar con solo 1 GB de memoria en función de los requisitos de compilación.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.

    La imagen final se etiqueta con "buildtools2017:latest" para que se pueda ejecutar fácilmente en un contenedor como "buildtools2017" ya que la etiqueta "latest" es el valor predeterminado si no se especifica ninguna etiqueta.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. Si quiere usar una versión específica de Visual Studio Build Tools 2017 en un escenario más avanzado, en su lugar se podría etiquetar el contenedor con un número de compilación de Visual Studio específico además de "latest", para que los contenedores puedan usar una versión determinada de forma coherente.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.

Paso 6.Step 6. Uso de la imagen compiladaUsing the built image

Ahora que se ha creado una imagen, también se puede ejecutar en un contenedor para realizar compilaciones interactivas y automatizadas.Now that you have created an image, you can run it in a container to do both interactive and automated builds. En el ejemplo se usa el símbolo del sistema para desarrolladores, por lo que PATH y otras variables de entorno ya están configuradas.The example uses the Developer Command Prompt, so your PATH and other environment variables are already configured.

  1. Abra un símbolo del sistema.Open a command prompt.
  2. Ejecute el contenedor para iniciar un entorno de PowerShell con todas las variables de entorno del desarrollador establecidas:Run the container to start a PowerShell environment with all developer environment variables set:

    docker run -it buildtools2017
    

Para usar esta imagen para el flujo de trabajo de CI/CD, puede publicarla en su propio Azure Container Registry o en otro registro de Docker interno para que los servidores solo tengan que extraerla.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.

Obtener soporte técnicoGet support

En ocasiones, algo no sale según lo previsto.Sometimes, things can go wrong. Si se produce un error en la instalación de Visual Studio, consulte la página Troubleshooting Visual Studio 2017 installation and upgrade issues (Solucionar problemas de errores de instalación y actualización de Visual Studio 2017).If your Visual Studio installation fails, see the Troubleshooting Visual Studio 2017 installation and upgrade issues page. Si ninguno de los pasos de solución de problemas ayuda, puede ponerse en contacto con nosotros por chat para obtener asistencia para la instalación (solo en inglés).If none of the troubleshooting steps help, you can contact us by live chat for installation assistance (English only). Para más información, consulte la página de soporte técnico de Visual Studio.For details, see the Visual Studio support page.

Aquí tiene algunas opciones de soporte técnico más:Here are a few more support options:

Vea tambiénSee also