コマンド ラインからコンテナー プロジェクトをビルドする
Visual Studio 外で Dockerfile を使ってコンテナー プロジェクトをビルドする場合は、docker build
、MSBuild
、dotnet build
、または dotnet publish
を使ってコマンド ラインからビルドできます。
.NET SDK のビルドの種類を使う場合は、Dockerfile がないため、docker build
を使うことはできません。代わりに MSBuild
、dotnet build
、または dotnet publish
を使ってコマンド ラインでビルドしてください。
docker build を使う
コマンド ラインからコンテナー化されたソリューションをビルドするには、通常、ソリューション内の各プロジェクトに対してコマンド docker build <context>
を使用します。 build context 引数を指定します。 Dockerfile の build context は、イメージを生成する作業フォルダーとして使用されるローカル コンピューター上のフォルダーです。 たとえば、コンテナーにコピーするときにファイルをコピーするフォルダーです。 .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 の使用
Note
このセクションでは、Dockerfile コンテナーのビルドの種類を選ぶ場合に Docker コンテナーをカスタマイズする方法について説明します。 .NET SDK のビルドの種類を使う場合は異なるカスタマイズ オプションになるため、この記事の情報は適用できません。 代わりに、「dotnet publish を使用して .NET アプリをコンテナー化する」を参照してください。
Visual Studio によって .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 コンテナー プロジェクトのイメージをビルドするには、MSBuild を /t:ContainerBuild
コマンド オプションと共に使います。 このコマンドは、既定のターゲット Build
ではなく、ターゲット ContainerBuild
をビルドするように MSBuild に指示します。 次に例を示します。
MSBuild MyProject.csproj /t:ContainerBuild /p:Configuration=Release
Visual Studio IDE からソリューションをビルドすると、出力ウィンドウに表示されるものと同様の出力が表示されます。 Visual Studio でマルチステージ ビルドの最適化が使用されている場合は、デバッグ構成をビルドするときに得られる結果が想定どおりでない場合があるため、常に /p:Configuration=Release
を使用します。 「デバッグ用にコンテナー イメージをカスタマイズする」を参照してください。
Docker Compose プロジェクトを使っている場合は、次のコマンドを使ってイメージをビルドします。
msbuild /p:SolutionPath=<solution-name>.sln /p:Configuration=Release docker-compose.dcproj
MSBuild ログを確認する方法については、「MSBuild でのビルド ログの取得」を参照してください。