コマンド ラインからコンテナー プロジェクトをビルドする
Visual Studio の外部で Dockerfile を使用してコンテナー プロジェクトをビルドする場合は、docker build
、MSBuild
、dotnet build
、または dotnet publish
を使用してコマンド ラインからビルドできます。
.NET SDK ビルドの種類を使用している場合は、Dockerfile がないため、docker build
を使用することはできません。代わりに、MSBuild
、dotnet build
、または dotnet publish
を使用してコマンド ラインでビルドします。
Docker ビルドを使用する
コマンド ラインからコンテナー化されたソリューションをビルドするには、通常、ソリューション内のプロジェクトごとにコマンド docker build <context>
を使用できます。 ビルド コンテキスト 引数を指定します。 Dockerfile の ビルド コンテキスト は、イメージを生成する作業フォルダーとして使用されるローカル コンピューター上のフォルダーです。 たとえば、コンテナーにコピーするときにファイルをコピーするフォルダーです。 .NET Core プロジェクトでは、既定値はソリューション ファイル (.sln) を含むフォルダーを使用することです。 相対パスとして表されるこの引数は、通常、プロジェクト フォルダー内の Dockerfile と、その親フォルダー内のソリューション ファイルに対して ".." です。 .NET Framework プロジェクトの場合、既定のビルド コンテキストはソリューション フォルダーではなくプロジェクト フォルダーです。
docker build -f Dockerfile ..
DockerfileContext
プロパティを設定することで、プロジェクト ファイルでビルド コンテキストを設定できます。 例えば
<PropertyGroup>
<DockerfileContext>contextfolder</DockerfileContext>
</PropertyGroup>
Dockerfile の相対パスはビルド コンテキストに対する相対パスであるため、コンテキストを変更する場合は、それに応じて相対パスを更新してください。
Visual Studio 17.11 以降では、Docker サポートをプロジェクトに追加するときに、ビルド コンテキストのフォルダーを指定できます。 ビルド コンテキストを変更する場合は、Dockerfile を削除し (残しておきたいその他の変更がない場合)、新しいビルド コンテキストを指定 Docker サポートの追加を再実行します。 新しい Dockerfile では、新しいビルド コンテキストに対応するように相対パスが更新されます。
MSBuild を使用する
手記
このセクションでは、Dockerfile コンテナーのビルドの種類を選択するときに Docker コンテナーをカスタマイズする方法について説明します。 .NET SDK ビルドの種類を使用している場合、カスタマイズ オプションは異なり、この記事の情報は適用されません。 代わりに、dotnet 発行 を使用して .NET アプリをコンテナー化するを参照してください。
Visual Studio for .NET Framework プロジェクト (および Visual Studio 2017 Update 4 より前のバージョンの Visual Studio で作成された .NET Core プロジェクト用) によって作成された Dockerfile は、マルチステージ Dockerfile ではありません。 これらの Dockerfile の手順では、コードはコンパイルされません。 代わりに、Visual Studio が .NET Framework Dockerfile をビルドするときに、最初に MSBuild を使用してプロジェクトをコンパイルします。 それが成功すると、Visual Studio によって Dockerfile がビルドされます。これにより、MSBuild からのビルド出力が結果の Docker イメージにコピーされます。 コードをコンパイルする手順は Dockerfile に含まれていないため、コマンド ラインから docker build
を使用して .NET Framework Dockerfile をビルドすることはできません。 MSBuild を使用してこれらのプロジェクトをビルドする必要があります。
単一の Docker コンテナー プロジェクトのイメージをビルドするには、/t:ContainerBuild
コマンド オプションで MSBuild を使用できます。 このコマンドは、既定のターゲット Build
ではなく、ターゲット ContainerBuild
をビルドするように MSBuild に指示します。 例えば:
MSBuild MyProject.csproj /t:ContainerBuild /p:Configuration=Release
Visual Studio IDE からソリューションをビルドすると、出力 ウィンドウに表示される出力と同様の出力が表示されます。 /p:Configuration=Release
を常に使用してください。Visual Studio でマルチステージ ビルドの最適化が使用される場合、デバッグ 構成をビルドするときの結果が期待どおりになっていない可能性があるためです。 デバッグ用のコンテナー イメージをカスタマイズするには、セクションを参照してください。
Docker Compose プロジェクトを使用している場合は、次のコマンドを使用してイメージをビルドします。
msbuild /p:SolutionPath=<solution-name>.sln /p:Configuration=Release docker-compose.dcproj
MSBuild ログを表示するには、「MSBuildを使用したビルド ログの取得」を参照してください。