Docker Compose のビルド プロパティ

コンテナー ツールのビルド プロパティ」で説明している、個々の Docker プロジェクトを制御するプロパティに加え、ソリューション構築のために MSBuild で使用される Docker Compose プロパティを設定することで、Visual Studio による Docker Compose プロジェクトのビルド方法をカスタマイズすることもできます。 Docker Compose 構成ファイルでファイル ラベルを設定することで、Visual Studio デバッガーによる Docker Compose アプリの実行方法を制御することもできます。

MSBuild プロパティの設定方法

プロパティの値を設定するには、プロジェクト ファイルを編集します。 Docker Compose プロパティの場合、このプロジェクト ファイルは、次のセクションの表で特に示されていない限り、 .dcproj 拡張子を持つファイルです。 たとえば、デバッグを開始するときにブラウザーを起動するように指定するとします。 .dcproj プロジェクト ファイルの DockerLaunchAction プロパティは、次のように設定できます。

<PropertyGroup>
   <DockerLaunchAction>LaunchBrowser</DockerLaunchAction>
</PropertyGroup>

プロパティ設定を、既存の PropertyGroup 要素に追加できます。存在しない場合は、新しい PropertyGroup 要素を作成できます。

Docker Compose MSBuild のプロパティ

次の表は、Docker Compose プロジェクトで使用できる MSBuild プロパティを示しています。

プロパティ名 場所 説明 既定値
AdditionalComposeFilePaths dcproj すべてのコマンドで docker-compose.exe に追加の Compose ファイルがセミコロンで区切られたリストで送信されるように指定します。 Docker Compose プロジェクト ファイル (dcproj) からの相対パスが許可されます。 -
DockerComposeBaseFilePath dcproj .yml拡張子を付けずに、Docker Compose ファイルのファイル名の最初の部分を指定します。 例:
1. DockerComposeBaseFilePath = null/undefined: 基本ファイル パス docker-composeを使用し、ファイルは docker-compose.yml および docker-compose.override.ymlという名前になります。
2. DockerComposeBaseFilePath = mydockercompose: ファイル名は mydockercompose.ymlmydockercompose.override.yml になります。
3. DockerComposeBaseFilePath = ..\mydockercompose: ファイルは 1 レベル上になります。
docker-compose
DockerComposeBuildArguments dcproj docker-compose build コマンドに渡す追加のパラメーターを指定します。 たとえば、--parallel --pull のようにします。
DockerComposeDownArguments dcproj docker-compose down コマンドに渡す追加のパラメーターを指定します。 たとえば、--timeout 500 のようにします。 -
DockerComposeEnvFilePath dcproj --env-fileを介してdocker composeコマンドに渡される .env ファイルへの相対パス。 env_file属性の使用を参照してください。
DockerComposeProjectName dcproj 指定した場合は、Docker Compose プロジェクトのプロジェクト名をオーバーライドします。 "dockercompose" + 自動生成されたハッシュ
DockerComposeProjectPath csproj または vbproj Docker Compose プロジェクト (dcproj) ファイルへの相対パス。 docker-compose.yml ファイルに格納されている関連イメージ ビルド設定を見つける目的で、サービス プロジェクトの公開時にこのプロパティを設定します。 -
DockerComposeProjectsToIgnore dcproj デバッグ中に Docker Compose ツールによって無視されるプロジェクトを指定します。 このプロパティは、任意のプロジェクトに使用できます。 ファイル パスは、次の 2 つの方法のどちらかで指定できます。
1. dcproj を基準として。 たとえば、<DockerComposeProjectsToIgnore>path\to\AngularProject1.csproj</DockerComposeProjectsToIgnore> のようにします。
2. 絶対パス。
: これらのパスは、区切り文字 ; で区切る必要があります。
-
DockerComposeUpArguments dcproj docker-compose up コマンドに渡す追加のパラメーターを指定します。 たとえば、--timeout 500 のようにします。 -
DockerDevelopmentMode dcproj ユーザー プロジェクトをコンテナーにビルドするかどうかを制御します。 Fast または Regular の許可される値によって、Dockerfile でどのステージがビルドされるかが制御されます。 デバッグ構成は、既定では Fast モードであり、それ以外の場合は Regular モードです。 Fast
DockerLaunchAction dcproj F5 または Ctrl + F5 キーで実行する起動アクションを指定します。 指定できる値には、None、LaunchBrowser、LaunchWCFTestClient があります。 None
DockerLaunchBrowser dcproj ブラウザーを起動するかどうかを示します。 DockerLaunchAction が指定されている場合は無視されます。 False
DockerServiceName dcproj DockerLaunchAction または DockerLaunchBrowser が指定されている場合、DockerServiceName は、 docker-compose ファイルで参照されるサービスが起動されるように指定します。 -
DockerServiceUrl dcproj ブラウザーを起動するときに使用される URL。 有効な置換トークンには、"{ServiceIPAddress}"、"{ServicePort}"、"{Scheme}" があります。 例: {Scheme}://{ServiceIPAddress}:{ServicePort} -
DockerTargetOS dcproj Docker イメージをビルドするときに使用されるターゲット OS。 -

DockerComposeBaseFilePathを相対パスに設定して、docker-compose ファイルの場所を変更する場合は、ソリューション フォルダーを参照するようにビルド コンテキストが変更されていることを確認する必要もあります。 たとえば、 docker-compose ファイルが DockerComposeFiles という名前のフォルダーである場合、Docker Compose ファイルはビルド コンテキストを ".." または ".に設定する必要があります。/.."。ソリューション フォルダーに対する相対位置に応じて異なります。

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" Sdk="Microsoft.Docker.Sdk">
  <PropertyGroup Label="Globals">
    <ProjectVersion>2.1</ProjectVersion>
    <DockerTargetOS>Windows</DockerTargetOS>
    <ProjectGuid>154022c1-8014-4e9d-bd78-6ff46670ffa4</ProjectGuid>
    <DockerLaunchAction>LaunchBrowser</DockerLaunchAction>
    <DockerServiceUrl>{Scheme}://{ServiceIPAddress}{ServicePort}</DockerServiceUrl>
    <DockerServiceName>webapplication1</DockerServiceName>
    <DockerComposeBaseFilePath>DockerComposeFiles\mydockercompose</DockerComposeBaseFilePath>
    <AdditionalComposeFilePaths>AdditionalComposeFiles\myadditionalcompose.yml</AdditionalComposeFilePaths>
  </PropertyGroup>
  <ItemGroup>
    <None Include="DockerComposeFiles\mydockercompose.override.yml">
      <DependentUpon>DockerComposeFiles\mydockercompose.yml</DependentUpon>
    </None>
    <None Include="DockerComposeFiles\mydockercompose.yml" />
    <None Include=".dockerignore" />
  </ItemGroup>
</Project>

ビルド コンテキストがソリューション フォルダーの相対パスに設定された状態 (この場合は ..) では、mydockercompose ファイルは次のようになります。

version: '3.4'

services:
  webapplication1:
    image: ${DOCKER_REGISTRY-}webapplication1
    build:
      context: ..
      dockerfile: WebApplication1\Dockerfile

メモ

Visual Studio 2019 バージョン 16.3 では、DockerComposeBuildArguments、DockerComposeDownArguments、DockerComposeUpArguments が新しく追加されています。

Visual Studio の Docker Compose 構成のオーバーライド

通常、docker-compose.override.ymldocker-compose.yml の特定の設定をオーバーライドするために使用されます。 さらに、Visual Studio では、(Fast モードの場合) docker-compose.vs.debug.g.ymlオーバーライド ファイルとdocker-compose.vs.release.g.yml (Regular モードの場合) ファイルが生成され、Visual Studio 内でのアプリケーションの実行に固有の設定が含まれます。 docker-compose.yml ファイルと同じディレクトリ内に docker-compose.vs.debug.yml (Fast モードの場合) または docker-compose.vs.release.yml (Regular モードの場合) という名前のファイルを置くことによって、このような Visual Studio の設定をオーバーライドできます。 Docker Compose プロジェクトを右クリックし、エクスプローラーで [フォルダーを開く] 選択し、Add>Existing Item を使用してファイルを Docker Compose プロジェクトに追加します。

ヒント

任意の Visual Studio 設定の既定値を確認するには、docker-compose.vs.debug.g.yml または docker-compose.vs.release.g.yml の中間出力ディレクトリを調べます (例: obj/Docker)。 これらのファイルは Visual Studio によって生成されるため、変更しないでください。

Docker Compose ファイル ラベル

docker-compose.vs.debug.yml または docker-compose.vs.release.yml で、オーバーライド固有のラベルを次のように定義できます。

services:
  webapplication1:
    labels:
      com.microsoft.visualstudio.debuggee.workingdirectory: "C:\\my_app_folder"

前の例のように値を二重引用符で囲み、パスでバックスラッシュのエスケープ文字としてバックスラッシュを使用します。

ラベル名 説明
com.microsoft.visualstudio.debuggee.program デバッグの開始時に起動するプログラム。 .NET Core アプリの場合、この設定は通常、dotnet です。
com.microsoft.visualstudio.debuggee.arguments デバッグの開始時にプログラムに渡される引数。 .NET Core アプリの場合、通常、これらの引数は NuGet パッケージの追加検索パスであり、これにプロジェクトの出力アセンブリのパスが続きます。
com.microsoft.visualstudio.debuggee.workingdirectory デバッグの開始時に開始ディレクトリとして使用されるディレクトリ。 この設定は通常、Linux コンテナーの場合は /app、Windows コンテナーの場合は C:\app になります。
com.microsoft.visualstudio.debuggee.killprogram このコマンドは、(必要なときに) コンテナー内で実行されているデバッグ対象プログラムを停止する目的で使用されます。
ラベル名 説明
com.microsoft.visualstudio.debuggee.program デバッグの開始時に起動するプログラム。 .NET Core アプリの場合、この設定は通常、dotnet です。
com.microsoft.visualstudio.debuggee.arguments デバッグの開始時にプログラムに渡される引数。 .NET Core アプリの場合、通常、これらの引数は NuGet パッケージの追加検索パスであり、これにプロジェクトの出力アセンブリのパスが続きます。
com.microsoft.visualstudio.debuggee.workingdirectory デバッグの開始時に開始ディレクトリとして使用されるディレクトリ。 この設定は通常、Linux コンテナーの場合は /app、Windows コンテナーの場合は C:\app になります。
com.microsoft.visualstudio.debuggee.killprogram このコマンドは、(必要なときに) コンテナー内で実行されているデバッグ対象プログラムを停止する目的で使用されます。
com.microsoft.visualstudio.debuggee.noattach.program デバッグせずに Start (Ctrl+F5) を使用すると、 isolated プロセスで実行されるプログラムが起動。 通常、F5 キーと Ctrl + F5 キーの両方で同じプログラムが使用されますが、分離プロセスの Azure Functions のようなプロジェクトの種類で F5 キーとは異なるプログラムが必要な場合は、これが使用されます。
com.microsoft.visualstudio.debuggee.noattach.arguments 分離されたプロセスで実行される Azure Functions プロジェクトで Start without debugging (Ctrl+F5) を使用するときにプログラムに渡される引数。
com.microsoft.visual-studio.project-name プロジェクトの名前。プロジェクトが Dockerfile と同じフォルダーにない場合に Visual Studio でプロジェクトを見つけるのに役立ちます。

Docker ビルド プロセスをカスタマイズする

build プロパティの target 設定を使用して、Dockerfile でどのステージをビルドするかを宣言できます。 このオーバーライドは、docker-compose.vs.debug.yml または docker-compose.vs.release.yml でのみ使用できます。

services:
  webapplication1:
    build:
      target: customStage
    labels:
      ...

アプリのスタートアップ プロセスをカスタマイズする

entrypoint 設定を使用し、それを DockerDevelopmentMode に依存させることによって、アプリの起動前にコマンドまたはカスタム スクリプトを実行できます。 たとえば、update-ca-certificates を実行することによって (Regular モードではなく) Fast モードでのみ証明書を設定する必要がある場合は、次のコードをdocker-compose.vs.debug.ymlのみ追加することができます。

services:
  webapplication1:
    entrypoint: "sh -c 'update-ca-certificates && tail -f /dev/null'"
    labels:
      ...

詳細については、「 Container エントリ ポイント」を参照してください。

次のステップ

MSBuild プロパティの一般情報については、MSBuild プロパティを参照してください。

関連項目

コンテナー ツールのビルド プロパティ

コンテナー ツールの起動設定

Visual Studio で Docker Compose の起動プロファイルを管理する

MSBuild の予約済みおよび既知のプロパティ