Build Tools をコンテナーにインストールするInstall Build Tools into a container

Visual Studio Build Tools を Windows コンテナーにインストールして、継続的インテグレーションと継続的デリバリー (CI/CD) のワークフローをサポートできます。You can install Visual Studio Build Tools into a Windows container to support continuous integration and continuous delivery (CI/CD) workflows. この記事では、必要な Docker 構成の変更と、コンテナーにインストールできるワークロードとコンポーネントについて説明します。This article guides you through what Docker configuration changes are required as well as what workloads and components you can install in a container.

コンテナーは一貫性のあるビルド システムをパッケージ化する優れた手段であり、CI/CD サーバー環境でだけでなく、開発環境でも使うことができます。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. たとえば、カスタマイズされた環境でビルドされるようにコンテナーにソース コードをマウントしながら、Visual Studio や他のツールを使って引き続きコードを記述することができます。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. お使いの CI/CD ワークフローが同じコンテナー イメージを使っている場合、コードのビルドの一貫性を心配する必要はありません。If your CI/CD workflow uses the same container image, you can rest assured that your code builds consistently. 実行時の一貫性を保つためにコンテナーを使うこともでき、これはオーケストレーション システムで複数のコンテナーを使っているマイクロサービスでは一般的なことですが、この記事ではそれについては説明しません。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.

ご自分のソース コードのビルドに必要な機能が Visual Studio Build Tools にない場合は、他の 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. ただし、Windows コンテナーは対話型のユーザー インターフェイスをサポートしていないため、すべてのコマンドを自動化する必要があることに注意してください。Do note, however, that Windows containers do not support an interactive user interface so all commands must be automated.

始める前にBefore you begin

以下では、Docker に関するある程度の知識をお持ちであることが想定されています。Some familiarity with Docker is assumed below. Windows 上での Docker の実行にまだ慣れていない場合は、Windows 上での Docker エンジンのインストールと構成方法をご確認ください。If you're not already familiar with running Docker on Windows, read about how to install and configure the Docker engine on Windows.

以下の基本イメージはサンプルであり、お客様のシステムでは機能しない場合があります。The base image below is a sample and may not work for your system. ご自身の環境に対してどの基本イメージを使うべきか判断するには、「Windows コンテナーバージョンの互換性」をご覧ください。Read Windows container version compatibility to determine which base image you should use for your environment.

Dockerfile を作成してビルドするCreate and build the Dockerfile

次の Dockerfile の例を新しいファイルとしてディスクに保存します。Save the following example Dockerfile to a new file on your disk. ファイル名を単に "Dockerfile" にすると、既定で認識されます。If the file is named simply "Dockerfile", it is recognized by default.

Warning

この例の Dockerfile では、コンテナーにインストールできない以前の Windows SDK のみを除外します。This example Dockerfile excludes only earlier Windows SDKs that cannot be installed into containers. 以前のリリースはビルド コマンドが失敗する原因になります。Earlier releases cause the build command to fail.

  1. コマンド プロンプトを開きます。Open a command prompt.

  2. 新しいディレクトリを作成します (推奨)。Create a new directory (recommended):

    mkdir C:\BuildTools
    
  3. この新しいディレクトリに移動します。Change directories to this new directory:

    cd C:\BuildTools
    
  4. 次の内容を C:\BuildTools\Dockerfile に保存します。Save the following content to C:\BuildTools\Dockerfile.

    # escape=`
    
    # Use the latest Windows Server Core image with .NET Framework 4.7.2.
    FROM mcr.microsoft.com/dotnet/framework/sdk:4.7.2-windowsservercore-ltsc2019
    
    # Restore the default Windows shell for correct batch processing.
    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"]
    

    Warning

    自分のイメージを microsoft/windowsservercore または mcr.microsoft.com/windows/servercore に直接基づくようにする場合 (Microsoft によるコンテナー カタログのシンジケートに関するページを参照)、.NET Framework が正しくインストールされない可能性があり、インストール エラーは示されません。If you base your image directly on microsoft/windowsservercore or mcr.microsoft.com/windows/servercore (see Microsoft syndicates container catalog), the .NET Framework might not install properly and no install error is indicated. インストールが完了した後、マネージド コードが実行されない可能性があります。Managed code might not run after the install is complete. 代わりに、イメージを microsoft/dotnet-framework:4.7.2 以降に基づくようにします。Instead, base your image on microsoft/dotnet-framework:4.7.2 or later. また、バージョン 4.7.2 以降のタグが付いたイメージでは、既定の SHELL として PowerShell が使用されている可能性があり、その場合 RUN および ENTRYPOINT 命令は失敗することに注意してください。Also note that images that are tagged version 4.7.2 or later might use PowerShell as the default SHELL, which will cause the RUN and ENTRYPOINT instructions to fail.

    Visual Studio 2017 バージョン 15.8 以前 (すべての製品) は、mcr.microsoft.com/windows/servercore:1809 以降には適切にインストールされません。Visual Studio 2017 version 15.8 or earlier (any product) will not properly install on mcr.microsoft.com/windows/servercore:1809 or later. エラーは表示されません。No error is displayed.

    どのコンテナー OS バージョンがどのホスト OS バージョン上でサポートされているかについては「Windows コンテナーのバージョンの互換性」を、既知の問題については「コンテナーの既知の問題」をご覧ください。See Windows container version compatibility to see which container OS versions are supported on which host OS versions, and Known issues for containers for known issues.

    # escape=`
    
    # Use the latest Windows Server Core image with .NET Framework 4.8.
    FROM mcr.microsoft.com/dotnet/framework/sdk:4.8-windowsservercore-ltsc2019
    
    # Restore the default Windows shell for correct batch processing.
    SHELL ["cmd", "/S", "/C"]
    
    # Download the Build Tools bootstrapper.
    ADD https://aka.ms/vs/16/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"]
    

    Warning

    microsoft/windowsservercore に直接基づくイメージの場合は、.NET Framework が正しくインストールされない可能性があり、インストール エラーは示されていません。If you base your image directly on microsoft/windowsservercore, the .NET Framework might not install properly and no install error is indicated. インストールが完了した後、マネージド コードが実行されない可能性があります。Managed code might not run after the install is complete. 代わりに、イメージを microsoft/dotnet-framework:4.8 以降に基づくようにします。Instead, base your image on microsoft/dotnet-framework:4.8 or later. また、バージョン 4.8 以降のタグが付いたイメージでは、既定の SHELL として PowerShell が使用されている可能性があり、その場合 RUN および ENTRYPOINT 命令は失敗することに注意してください。Also note that images that are tagged version 4.8 or later might use PowerShell as the default SHELL, which will cause the RUN and ENTRYPOINT instructions to fail.

    どのコンテナー OS バージョンがどのホスト OS バージョン上でサポートされているかについては「Windows コンテナーのバージョンの互換性」を、既知の問題については「コンテナーの既知の問題」をご覧ください。See Windows container version compatibility to see which container OS versions are supported on which host OS versions, and Known issues for containers for known issues.

  5. そのディレクトリで次のコマンドを実行します。Run the following command within that directory.

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

    このコマンドは、2 GB のメモリを使って現在のディレクトリに Dockerfile をビルドします。This command builds the Dockerfile in the current directory using 2 GB of memory. ワークロードを何かインストールするときは、既定の 1 GB では不十分です。ただし、ビルドの要件によっては、1 GB のメモリだけでもビルドできる場合があります。The default 1 GB is not sufficient when some workloads are installed; however, you might be able to build with only 1 GB of memory depending on your build requirements.

    最後のイメージには "buildtools2017:latest" というタグが付きます。"latest" タグはタグが指定されていない場合の既定値なので、コンテナー内では "buildtools2017" として簡単に実行できます。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. さらに高度なシナリオで特定のバージョンの Visual Studio Build Tools 2017 を使いたい場合は、"latest" 意外にも特定の Visual Studio ビルド番号でコンテナーにタグを付けて、コンテナーが特定のバージョンを一貫して使用できるようにします。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.

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

    このコマンドは、2 GB のメモリを使って現在のディレクトリに Dockerfile をビルドします。This command builds the Dockerfile in the current directory using 2 GB of memory. ワークロードを何かインストールするときは、既定の 1 GB では不十分です。ただし、ビルドの要件によっては、1 GB のメモリだけでもビルドできる場合があります。The default 1 GB is not sufficient when some workloads are installed; however, you might be able to build with only 1 GB of memory depending on your build requirements.

    最後のイメージには "buildtools2019:latest" というタグが付きます。"latest" タグはタグが指定されていない場合の既定値なので、コンテナー内では "buildtools2019" として簡単に実行できます。The final image is tagged "buildtools2019:latest" so you can easily run it in a container as "buildtools2019" since the "latest" tag is the default if no tag is specified. さらに高度なシナリオで特定のバージョンの Visual Studio Build Tools 2019 を使いたい場合は、"latest" 意外にも特定の Visual Studio ビルド番号でコンテナーにタグを付けて、コンテナーが特定のバージョンを一貫して使用できるようにできます。If you want to use a specific version of Visual Studio Build Tools 2019 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.

ビルドされたイメージを使うUsing the built image

イメージができたので、それをコンテナーで実行して対話型と自動の両方のビルドを行うことができます。Now that you have created an image, you can run it in a container to do both interactive and automated builds. この例では開発者コマンド プロンプトを使うので、PATH および他の環境変数は既に構成されています。The example uses the Developer Command Prompt, so your PATH and other environment variables are already configured.

  1. コマンド プロンプトを開きます。Open a command prompt.

  2. コンテナーを実行し、すべての開発者環境変数が設定された状態で PowerShell 環境を開始します。Run the container to start a PowerShell environment with all developer environment variables set:

    docker run -it buildtools2017
    
    docker run -it buildtools2019
    

このイメージを CI/CD ワークフローで使うには、独自の Azure Container Registry または他の内部 Docker レジストリに発行して、サーバーがそれを取得するだけで済むようにします。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 need only to pull it.

サポートを受けるGet support

ときには、問題が発生してしまうことがあります。Sometimes, things can go wrong. Visual Studio のインストールが失敗した場合は、「Visual Studio のインストールとアップグレードの問題のトラブルシューティング」に記載されているステップ バイ ステップ ガイドをご覧ください。If your Visual Studio installation fails, see Troubleshoot Visual Studio installation and upgrade issues for step-by-step guidance.

インストール関連の問題については、ライブ チャット (英語のみ) のサポート オプションも用意されています。We also offer a live chat (English only) support option for installation-related issues.

他のいくつかのサポート オプションを次に示します。Here are a few more support options:

関連項目See also