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.

概要Overview

Docker を使って作成したイメージから、ソース コードをビルドするコンテナーを作成できます。Using Docker you create an image from which you can create containers that build your source code. この例の Dockerfile では、最新の Visual Studio Build Tools 2017 と、ソース コードのビルドによく使われる他の便利なプログラムをインストールします。The example Dockerfile installs the latest Visual Studio Build Tools 2017 and some other helpful programs often used for building source code. 独自の Dockerfile をさらに変更して、テストの実行やビルド出力の発行などのための他のツールやスクリプトを組み込むことができます。You can further modify your own Dockerfile to include other tools and scripts to run tests, publish build output, and more.

Docker for Windows を既にインストールしてある場合は、手順 3 に進んでかまいません。If you have already installed Docker for Windows, you can skip to step 3.

手順 1.Step 1. Hyper-V を有効にするEnable Hyper-V

Hyper-V は既定では有効になっていません。Hyper-V is not enabled by default. 現在、Windows 10 では Hyper-V による分離のみがサポートされているので、Docker for Windows を開始するには Hyper-V を有効にする必要があります。It must be enabled to start Docker for Windows, since currently only Hyper-V isolation is supported for Windows 10.

Note

お使いのコンピューターで仮想化を有効にする必要があります。Virtualization must be enabled on your machine. 通常は既定で有効になっていますが、Hyper-V のインストールが失敗する場合は、システムのドキュメントで仮想化を有効にする方法を参照してください。It is typically enabled by default; however, if Hyper-V install fails, refer to your system documentation for how to enable virtualization.

手順 2.Step 2. Docker for Windows をインストールするInstall Docker for Windows

Windows 10 を使っている場合は、Docker Community Edition for Windows をダウンロードしてインストールできます。If using Windows 10, you can download and install Docker Community Edition. Windows Server 2016 を使用している場合は、Docker Enterprise Edition をインストールする手順に従ってください。If using Windows Server 2016, follow instructions to install Docker Enterprise Edition.

手順 3.Step 3. Windows コンテナーに切り替えるSwitch to Windows Containers

Windows には Build Tools 2017 のみをインストールでき、そのためには Windows コンテナーに切り替える必要があります。You can only install Build Tools 2017 on Windows, which requires you switch to Windows containers. Windows 10 の Windows コンテナーは Hyper-V による分離のみをサポートしていますが、Windows Server 2016 の Windows コンテナーは Hyper-V による分離とプロセス分離の両方をサポートしています。Windows containers on Windows 10 support only Hyper-V isolation, while Windows containers on Windows Server 2016 support both Hyper-V and process isolation.

手順 4.Step 4. コンテナーのディスクの最大サイズを増やすExpand maximum container disk size

Visual Studio Build Tools さらには Visual Studio 全体では、すべてのツールをインストールするために多くのディスク容量が必要です。Visual Studio Build Tools - and to a greater extent, Visual Studio - require lots of disk space for all the tools that get installed. この例の Dockerfile ではパッケージ キャッシュを無効にしていますが、それでも必要な容量を確保するためにコンテナー イメージのディスク サイズを増やす必要があります。Even though the example Dockerfile disables the package cache, the disk size of container images must be increased to accommodate the space required. 現在 Windows では、Docker 構成を変更することによってのみ、ディスク サイズを増やすことができます。Currently on Windows, you can only increase disk size by changing the Docker configuration.

Windows 10 の場合:On Windows 10:

  1. システム トレイの Docker for Windows アイコンを右クリックして、[設定...] をクリックします。Rick-click on the Docker for Windows icon in the system tray and click Settings....
  2. [Daemon](デーモン) セクションをクリックします。Click on the Daemon section.
  3. [Basic](基本) ボタンを [Advanced](詳細) に切り替えます。Toggle the Basic button to Advanced.
  4. 次の JSON 配列プロパティを追加して、ディスク容量を 120 GB に増やします(Build Tools の拡大を見込んで十分に余裕がある量)。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"
      ]
    }
    

    このプロパティは、既にあるプロパティに追加されます。This property is added to anything you already have. たとえば、既定のデーモン構成ファイルにこれらの変更を適用すると次のようになります。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. [適用] をクリックします。Click Apply.

Windows Server 2016 の場合:On Windows Server 2016:

  1. "docker" サービスを停止します。Stop the "docker" service:

    sc.exe stop docker
    
  2. 管理者特権でのコマンド プロンプトで、"%ProgramData%\Docker\config\daemon.json" (または dockerd --config-file に対して指定したファイル) を編集します。From an elevated command prompt, edit "%ProgramData%\Docker\config\daemon.json" (or whatever you specified to dockerd --config-file).

  3. 次の JSON 配列プロパティを追加して、ディスク容量を 120 GB に増やします(Build Tools の拡大を見込んで十分に余裕がある量)。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"
      ]
    }
    

    このプロパティは、既にあるプロパティに追加されます。This property is added to anything you already have.

  4. ファイルを保存して閉じます。Save and close the file.
  5. "docker" サービスを開始します。Start the "docker" service:

    sc.exe start docker
    

手順 5.Step 5. 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.

Note

この例の Dockerfile では、コンテナーにインストールできない古い Windows SDK のみを除外します。This example Dockerfile only excludes older Windows SDKs that cannot be installed into containers. 古いリリースはビルド コマンドが失敗する原因になります。Older 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.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

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

  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 may 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.

手順 6.Step 6. ビルドされたイメージを使う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
    

このイメージを 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 only need to pull it.

サポートを受けるGet support

ときには、問題が発生してしまうことがあります。Sometimes, things can go wrong. Visual Studio のインストールが失敗した場合は、「Visual Studio 2017 のインストールとアップグレードの問題のトラブルシューティング」のステップ バイ ステップ ガイドをご覧ください。If your Visual Studio installation fails, see Troubleshooting Visual Studio 2017 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