「コンテナー ツールのビルド プロパティ」で説明している、個々の Docker プロジェクトを制御するプロパティに加え、ソリューション構築のために MSBuild で使用される Docker Compose プロパティを設定することで、Visual Studio による Docker Compose プロジェクトのビルド方法をカスタマイズすることもできます。 Docker Compose 構成ファイルでファイル ラベルを設定することで、Visual Studio デバッガーによる Docker Compose アプリの実行方法を制御することもできます。
手記
これらのビルド プロパティは、Visual Studio で Podman Compose を Compose ランタイムとして使用する場合にも適用されます。
MSBuild プロパティの設定方法
プロパティの値を設定するには、プロジェクト ファイルを編集します。 Docker Compose プロパティの場合、このプロジェクト ファイルは、次のセクションの表で特に示されていない限り、 .dcproj 拡張子を持つファイルです。 たとえば、デバッグを開始するときにブラウザーを起動するように指定するとします。
DockerLaunchAction プロジェクト ファイルの .dcproj プロパティは、次のように設定できます。
<PropertyGroup>
<DockerLaunchAction>LaunchBrowser</DockerLaunchAction>
</PropertyGroup>
プロパティ設定を、既存の PropertyGroup 要素に追加できます。存在しない場合は、新しい PropertyGroup 要素を作成できます。
Docker Compose MSBuild プロパティ
次の表は、Docker Compose プロジェクト (.dcproj ファイル) で使用できる MSBuild プロパティを示しています。
| プロパティ名 | 説明 |
|---|---|
| AdditionalComposeFilePaths | すべてのコマンドで docker-compose.exe に追加の Compose ファイルがセミコロンで区切られたリストで送信されるように指定します。 Docker Compose プロジェクト ファイル (dcproj) からの相対パスが許可されます。 |
| DependencyAwareStart | サービスの起動順序と正常性チェックを制御する、depends_on と healthcheckの Docker Compose プロパティをサポートするアプリを起動する別の方法を有効にします。Visual Studio 17.13 以降が必要です。 既定値: False |
| DockerComposeBaseFilePath |
.yml拡張子を付けずに、Docker Compose ファイルのファイル名の最初の部分を指定します。 例えば:1. DockerComposeBaseFilePath = null/undefined: 基本ファイル パス docker-composeを使用し、ファイルは docker-compose.yml および docker-compose.override.ymlという名前になります。2. DockerComposeBaseFilePath = mydockercompose: ファイル名は mydockercompose.yml と mydockercompose.override.yml になります。 3. DockerComposeBaseFilePath = ..\mydockercompose: ファイルは 1 レベル上になります。 既定値: docker-compose |
| DockerComposeBuildArguments |
docker-compose build コマンドに渡す追加のパラメーターを指定します。 たとえば、--parallel --pullします。 |
| DockerComposeDownArguments |
docker-compose down コマンドに渡す追加のパラメーターを指定します。 たとえば、--timeout 500します。 |
| DockerComposeEnvFilePath |
docker composeを介して--env-fileコマンドに渡される .env ファイルへの相対パス。 env_file属性の使用を参照してください。既定値: 空 |
| DockerComposeProjectName | 指定した場合は、Docker Compose プロジェクトのプロジェクト名をオーバーライドします。 既定値: "dockercompose" + 自動生成されたハッシュ |
| DockerComposeProjectsToIgnore | デバッグ中に Docker Compose ツールによって無視されるプロジェクトを指定します。 このプロパティは、任意のプロジェクトに使用できます。 ファイル パスは、次の 2 つの方法のどちらかで指定できます。 1. dcproj を基準として。 たとえば、 <DockerComposeProjectsToIgnore> path\to\AngularProject1.csproj </DockerComposeProjectsToIgnore>します。 2. 絶対パス。 注: これらのパスは、区切り文字 ; で区切る必要があります。 |
| DockerComposeUpArguments |
docker-compose up コマンドに渡す追加のパラメーターを指定します。 たとえば、--timeout 500します。 |
| DockerDevelopmentMode | ユーザー プロジェクトをコンテナーにビルドするかどうかを制御します。
Fast または Regular の許可される値によって、Dockerfile でどのステージがビルドされるかが制御されます。 デバッグ構成は、既定では Fast モードであり、それ以外の場合は Regular モードです。 既定値: 高速 |
| DockerLaunchAction | F5 または Ctrl + F5 キーで実行する起動アクションを指定します。 使用できる値は None、LaunchBrowser、LaunchWCFTestClient です。 既定値: なし |
| DockerLaunchBrowser | ブラウザーを起動するかどうかを示します。 DockerLaunchAction が指定されている場合は無視されます。 既定値: False |
| DockerServiceName | DockerLaunchAction または DockerLaunchBrowser が指定されている場合、DockerServiceName は、 docker-compose ファイルで参照されるサービスが起動されるように指定します。 |
| DockerServiceUrl | ブラウザーの起動時に使用する URL。 有効な置換トークンは、"{ServiceIPAddress}"、"{ServicePort}"、および "{Scheme}" です。 例: {Scheme}://{ServiceIPAddress}:{ServicePort} |
| DockerTargetOS | Docker イメージをビルドするときに使用されるターゲット OS。 |
さらに、DockerComposeProjectPath または .csproj プロジェクト ファイル内のプロパティ .vbproj は、Docker Compose プロジェクト (.dcproj) ファイルへの相対パスを指定します。 サービス プロジェクトを発行するときに、このプロパティを設定して、docker-compose.yml ファイルに格納されている関連するイメージ ビルド設定を検索します。
例
docker-composeを相対パスに設定して、DockerComposeBaseFilePath ファイルの場所を変更する場合は、ソリューション フォルダーを参照するようにビルド コンテキストが変更されていることを確認する必要もあります。 たとえば、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>
ビルド コンテキストがソリューション フォルダーの相対パスに設定された状態 (この場合は ) では、.. ファイルは次のようになります。
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.yml は docker-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.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 でプロジェクトを見つけるのに役立ちます。 |
| com.microsoft.visualstudio.launch-url.path-query | [ポート] タブでリンクを開くときにコンテナー ウィンドウで使用されるパスとクエリ。 Visual Studio 17.13 以降が必要です。 |
Docker ビルド プロセスをカスタマイズする
target プロパティの build 設定を使用して、Dockerfile でどのステージをビルドするかを宣言できます。 このオーバーライドは、docker-compose.vs.debug.yml または docker-compose.vs.release.yml でのみ使用できます。
services:
webapplication1:
build:
target: customStage
labels:
...
アプリのスタートアップ プロセスをカスタマイズする
entrypoint 設定を使用し、それを DockerDevelopmentMode に依存させることによって、アプリの起動前にコマンドまたはカスタム スクリプトを実行できます。 たとえば、 を実行することによって (update-ca-certificates モードではなく) Fast モードでのみ証明書を設定する必要がある場合は、次のコードをdocker-compose.vs.debug.yml にのみ追加することができます。
services:
webapplication1:
entrypoint: "sh -c 'update-ca-certificates && tail -f /dev/null'"
labels:
...
詳細については、「 Container エントリ ポイント」を参照してください。
次の手順
MSBuild プロパティの一般情報については、MSBuild プロパティを参照してください。