Visual Studio Container Tools for Docker
Visual Studio に含まれる Docker コンテナーを使った開発用のツールは、使いやすく、コンテナー化されたアプリケーションのビルド、デバッグ、配置を大幅に簡略化できます。 1 つのプロジェクトに対して 1 つのコンテナーを使用したり、Docker Compose または Service Fabric と共にコンテナーのオーケストレーションを使って、コンテナー内で複数のサービスを使用したりできます。
前提条件
- Docker Desktop
- Web 開発、Azure Tools ワークロード、および/または .NET Core クロスプラットフォーム開発ワークロードがインストールされた Visual Studio 2019
- .NET Core を使って開発するための .NET Core 開発ツール。
- Azure Container Registry に発行する場合、Azure サブスクリプション。 無料試用版にサインアップします。
Visual Studio での Docker サポート
Docker サポートは、ASP.NET プロジェクト、ASP.NET Core プロジェクト、.NET Core と .NET Framework のコンソール プロジェクトで利用できます。
Visual Studio での Docker のサポートは、お客様のニーズに応じて、多数のリリースを経て変更されてきました。 プロジェクトに追加できる Docker サポートには 2 つのレベルがあり、サポートされるオプションはプロジェクトの種類と Visual Studio のバージョンによって異なります。 サポートされている一部のプロジェクトの種類では、オーケストレーションなしで 1 つのプロジェクト用に 1 つのコンテナーを使いたいだけの場合は、Docker サポートを追加することでこれを実行できます。 次のレベルは、コンテナー オーケストレーションのサポートです。これは、選択した特定のオーケストレーター用の適切なサポート ファイルを追加します。
Visual Studio 2019 では、コンテナー オーケストレーション サービスとして Docker Compose、Kubernetes、Service Fabric を使用できます。
Note
.NET Framework または .NET Core コンソール プロジェクトを作成するときに、[Docker サポートの追加] オプションはありません。 .NET Core コンソール アプリケーション プロジェクトが作成されると、[Docker サポートの追加] オプションを使用できます。 .NET Framework コンソール アプリケーション プロジェクトでは、プロジェクトの作成後に [Docker サポートの追加] オプションはサポートされていません。 作成後に、.NET Framework または .NET Core コンソール プロジェクトの両方で、Service Fabric または Docker Compose を使用した [コンテナー オーケストレーター サポートの追加] がサポートされます。
Visual Studio 2019 バージョン 16.4 以降では、[コンテナー] ウィンドウを使用できます。このウィンドウでは、実行中のコンテナーの表示、使用可能なイメージの参照、環境変数、ログ、およびポート マッピングの表示、ファイル システムの検査、デバッガーのアタッチを行ったり、コンテナー環境内でターミナル ウィンドウを開いたりすることができます。 「コンテナー ウィンドウを使用する」を参照してください。
前提条件
- Docker Desktop
- Web 開発、Azure Tools ワークロード、 .NET デスクトップ開発ワークロードのいずれか、またはすべてがインストールされた Visual Studio 2022
- Azure Container Registry に発行する場合、Azure サブスクリプション。 無料試用版にサインアップします。
Visual Studio での Docker サポート
Docker サポートは、ASP.NET プロジェクト、ASP.NET Core プロジェクト、.NET Core と .NET Framework のコンソール プロジェクトで利用できます。
Visual Studio での Docker のサポートは、お客様のニーズに応じて、多数のリリースを経て変更されてきました。 プロジェクトに Docker サポートを追加するにはいくつかの選択肢があり、サポートされる選択肢はプロジェクトの種類と Visual Studio のバージョンによって異なります。 サポートされている一部のプロジェクトの種類では、オーケストレーションなしで 1 つのプロジェクト用に 1 つのコンテナーを使いたいだけの場合は、Docker サポートを追加することでこれを実行できます。 次のレベルは、コンテナー オーケストレーションのサポートです。これは、選択した特定のオーケストレーター用の適切なサポート ファイルを追加します。
Visual Studio 2022 バージョン 17.9 以降では、.NET 7 以降のプロジェクトに Docker サポートを追加する際に、Docker サポートの追加で選択できるコンテナー ビルドの種類が 2 つあります。 Dockerfile を追加してコンテナー イメージをビルドする方法を指定することも、.NET SDK によって提供される組み込みのコンテナー サポートを使用することも選択できます。
また、Visual Studio 2022 以降では、コンテナー オーケストレーションを選択する際に、コンテナー オーケストレーション サービスとして Docker Compose または Service Fabric を使用できます。
Note
完全な .NET Framework コンソール プロジェクト テンプレートを使用する場合は、プロジェクトの作成後の [コンテナー オーケストレーター サポートの追加] オプションが、Service Fabric または Docker Compose を使用するオプションとともにサポートされています。 プロジェクトの作成時のサポートの追加と、オーケストレーションなしで 1 つのプロジェクトに Docker サポートを追加するオプションは使用できません。
Visual Studio 2022 では、[コンテナー] ウィンドウを使用できます。そこでは、実行中のコンテナーの表示、使用可能なイメージの参照、環境変数、ログ、およびポート マッピングの表示、ファイル システムの検査、デバッガーのアタッチを行ったり、コンテナー環境内でターミナル ウィンドウを開いたりすることができます。 「コンテナー ウィンドウを使用する」を参照してください。
Note
Docker のライセンス要件は、Docker Desktop のバージョンによって異なる場合があります。 Docker のドキュメントを参照して、お客様の状況での開発用にご自分の Docker Desktop のバージョンを使用するための現在のライセンス要件を把握してください。
Docker サポートの追加
次のスクリーンショットに示すように、新しいプロジェクトを作成するときに [Enable Docker Support](Docker サポートを有効にする) を選択することで、プロジェクトの作成中に Docker サポートを有効にすることができます。
注意
(.NET Core ではなく) .NET Framework プロジェクトの場合、Windows コンテナーのみを使用できます。
既存のプロジェクトに Docker サポートを追加するには、ソリューション エクスプローラーで [追加]>[Docker のサポート] の順に選択します。 [追加] > [Docker のサポート] と [追加] > [コンテナー オーケストレーター サポート] コマンドは、ソリューション エクスプローラーの ASP.NET Core プロジェクトのプロジェクト ノードの右クリック メニュー (またはコンテキスト メニュー) にあります。次のスクリーンショットを参照してください。
Docker サポートの追加
Docker サポートを追加または有効にすると、Visual Studio により以下がプロジェクトに追加されます。
- Dockerfile ファイル
.dockerignore
ファイル- Microsoft.VisualStudio.Azure.Containers.Tools.Targets に対する NuGet パッケージ参照
追加する Dockerfile は、次のようなコードになります。 この例では、プロジェクトに WebApplication-Docker
という名前が付けられ、Linux コンテナーを選択しました。
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/aspnet:3.1 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:3.1 AS build
WORKDIR /src
COPY ["WebApplication-Docker/WebApplication-Docker.csproj", "WebApplication-Docker/"]
RUN dotnet restore "WebApplication-Docker/WebApplication-Docker.csproj"
COPY . .
WORKDIR "/src/WebApplication-Docker"
RUN dotnet build "WebApplication-Docker.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "WebApplication-Docker.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApplication-Docker.dll"]
Dockerfile によるコンテナー ビルドのタイプを使用して Docker サポートを追加する
.NET 7 以降のプロジェクトに Docker サポートを追加するかサポートを有効にすると、Visual Studio は [コンテナー スキャフォールディング オプション] ダイアログ ボックスを表示します。これによって、オペレーティング システム (Linux または Windows) を選択できるだけでなく、コンテナー ビルドの種類 (Dockerfile または .NET SDK) を選択することもできます。 このダイアログ ボックスは .NET Framework プロジェクトまたは Azure Functions プロジェクトには表示されません。
17.11 以降では、コンテナー イメージ ディストリビューションと Docker ビルド コンテキストも指定できます。
コンテナー イメージ ディストリビューションでは、コンテナーがベース イメージとして使用する OS イメージを指定します。 コンテナーの種類として Linux と Windows を切り替えると、この一覧は変わります。
次のイメージを使用できます。
Windows:
- Windows Nano Server (推奨。8.0 以降でのみ使用できます。ネイティブ Ahead-of-time (AOT) デプロイ プロジェクトには事前設定されていません)
- Windows Server Core (8.0 以降でのみ使用できます)
Linux:
- 既定値 (Debian。ただしタグは「8.0」)
- Debian
- Ubuntu
- Chiseled Ubuntu
- Alpine
Note
Chiseled Ubuntu イメージに基づくコンテナーで、ネイティブ Ahead-of-time (AOT) デプロイを使用している場合は、高速モードでのみデバッグできます。 「Visual Studio での Docker コンテナーのカスタマイズ」を参照してください。
Docker ビルド コンテキストでは、Docker ビルドに使用されるフォルダーを指定します。 「Docker ビルド コンテキスト」を参照してください。 既定値はソリューション フォルダーであり、強くお勧めします。 ビルドに必要なすべてのファイルはこのフォルダー内にある必要があります。ただし、この条件は通常、プロジェクト フォルダーやその他のフォルダーを選択した場合には当てはまりません。
Dockerfile を選択した場合、Visual Studio によって以下のものがプロジェクトに追加されます。
- Dockerfile ファイル
- .dockerignore ファイル
- Microsoft.VisualStudio.Azure.Containers.Tools.Targets に対する NuGet パッケージ参照
追加する Dockerfile は、次のようなコードになります。 この例では、プロジェクトに WebApplication-Docker
という名前が付けられ、Linux コンテナーを選択しました。
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["WebApplication-Docker/WebApplication-Docker.csproj", "WebApplication-Docker/"]
RUN dotnet restore "WebApplication-Docker/WebApplication-Docker.csproj"
COPY . .
WORKDIR "/src/WebApplication-Docker"
RUN dotnet build "WebApplication-Docker.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "WebApplication-Docker.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApplication-Docker.dll"]
Dockerfile を使用せずに .NET アプリをコンテナー化する
.NET 7 SDK がインストールされた Visual Studio 2022 17.9 以降を使用し、.NET 6 以降を対象とする ASP.NET Core プロジェクトでは、コンテナー ビルド用の .NET SDK の組み込みサポートを使用するという選択肢があります。つまり、Dockerfile は必要ありません。「dotnet publish を使用した .NET アプリのコンテナー化」を参照してください。 代わりに、プロジェクト ファイルで MSBuild プロパティを使用してコンテナーを構成し、Visual Studio でコンテナーを起動するための設定は、.json
構成ファイルである launchSettings.json 内にエンコードされます。
ここでは、Dockerfile の代わりに .NET SDK のコンテナー管理を使用するために、コンテナーのビルドの種類として .NET SDK を選択します。
コンテナー イメージ ディストリビューションでは、コンテナーがベース イメージとして使用する OS イメージを指定します。 コンテナーとして Linux と Windows を切り替えると、この一覧は変わります。 使用できるイメージの一覧については、前のセクションを参照してください。
launchSettings.json 内の .NET SDK コンテナー ビルド エントリは次のコードのようになります。
"Container (.NET SDK)": {
"commandName": "SdkContainer",
"launchBrowser": true,
"launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}",
"environmentVariables": {
"ASPNETCORE_HTTPS_PORTS": "8081",
"ASPNETCORE_HTTP_PORTS": "8080"
},
"publishAllPorts": true,
"useSSL": true
}
.NET SDK は、コンテナーのベース イメージや設定する環境変数など、従来は Dockerfile に記述されていた設定の一部を管理します。 コンテナー構成のプロジェクト ファイルで使用できる設定は、「コンテナーのカスタマイズ」に一覧表示されています。 たとえば、コンテナー イメージ ディストリビューションは、ContainerBaseImage
プロパティとしてプロジェクト ファイルに保存されます。 これは後でプロジェクト ファイルを編集することで変更できます。
<PropertyGroup>
<ContainerBaseImage>mcr.microsoft.com/dotnet/runtime:8.0-alpine-amd64</ContainerBaseImage>
</PropertyGroup>
コンテナー ウィンドウを使用する
[コンテナー] ウィンドウを使用すると、ご利用のコンピューター上でコンテナーとイメージを表示し、何が起こっているのかを確認できます。 ファイルシステム、マウントされたボリューム、環境変数、使用されているポートを表示し、さらにログ ファイルを調べることができます。
[コンテナー] ウィンドウを開くには、クイック起動 (Ctrl + Q) を使用し、「containers
」と入力します。 ドッキング コントロールを使用すれば、このウィンドウを任意の場所に置くことができます。 ウィンドウの幅を考慮して、画面の下部にドッキングすると最適に動作します。
コンテナーを選択し、タブを使用することで利用可能な情報を表示します。 確認するには、Docker 対応アプリを実行し、 [ファイル] タブを開き、app フォルダーを展開してコンテナーにデプロイされたアプリを確認します。
詳細については、「コンテナー ウィンドウを使用する」を参照してください。
Docker Compose のサポート
Docker Compose を使って複数コンテナーのソリューションを構成する場合は、コンテナー オーケストレーターのサポートをプロジェクトに追加します。 これにより、コンテナーのグループ (ソリューション全体、またはプロジェクトのグループ) が同じ docker-compose.yml ファイル内で定義されている場合、それらを同時に実行およびデバッグすることができます。
Docker Compose を使ったコンテナー オーケストレーターのサポートを追加するには、ソリューション エクスプローラーでプロジェクトのノードを右クリックし、[追加] > [コンテナー オーケストレーター サポート] を選びます。 次に、[Docker Compose] を選択してコンテナーを管理します。
プロジェクトにコンテナー オーケストレーターのサポートを追加すると、次に示すように、(既になかった場合) プロジェクトに Dockerfile が追加され、ソリューション エクスプローラー内のソリューションに docker-compose フォルダーが追加されるのを確認できます。
docker-compose.yml が既に存在する場合、Visual Studio により、構成コードの必要な行が単にそれに追加されます。
Docker Compose を使って制御したい他のプロジェクトで、このプロセスを繰り返します。
サービスを多数使用する場合は、デバッグ セッション内で開始するサービスのサブセットを選択することで、時間とコンピューティング リソースを節約できます。 Compose サービスのサブセットの開始に関するページを参照してください。
Note
リモート Docker ホストは Visual Studio ツールではサポートされていないことに注意してください。
Service Fabric のサポート
Visual Studio の Service Fabric ツールを使うと、Azure Service Fabric 用に開発とデバッグを行い、ローカルで実行およびデバッグし、Azure に配置することができます。
Visual Studio 2019 以降では、Windows コンテナーと Service Fabric のオーケストレーションを使った、コンテナー化されたマイクロサービスの開発がサポートされています。
詳細なチュートリアルについては、「チュートリアル:Windows コンテナー内の .NET アプリケーションを Azure Service Fabric にデプロイする」をご覧ください。
Azure Service Fabric の詳細については、Service Fabric に関するページをご覧ください。
継続的デリバリーと継続的インテグレーション (CI/CD)
サービスのコードと構成の変更に関する自動化された継続的なインテグレーションとデリバリーのために、Visual Studio は簡単に Azure Pipelines と統合できます。 開始するには、「Create your first pipeline (最初のパイプラインを作成する)」をご覧ください。
Service Fabric については、「チュートリアル:Azure DevOps Projects を使用して ASP.NET Core アプリを Azure Service Fabric にデプロイする」をご覧ください。
次のステップ
サービスの実装と、コンテナーを操作するための Visual Studio ツールの使用方法について詳しくは、以下の記事をご覧ください。