Visual Studio Container Tools for Docker

Visual Studio に含まれる Docker コンテナーを使った開発用のツールは、使いやすく、コンテナー化されたアプリケーションのビルド、デバッグ、配置を大幅に簡略化できます。 1 つのプロジェクトに対して 1 つのコンテナーを使用したり、Docker Compose または Service Fabric と共にコンテナーのオーケストレーションを使って、コンテナー内で複数のサービスを使用したりできます。

前提条件

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 以降では、[コンテナー] ウィンドウを使用できます。このウィンドウでは、実行中のコンテナーの表示、使用可能なイメージの参照、環境変数、ログ、およびポート マッピングの表示、ファイル システムの検査、デバッガーのアタッチを行ったり、コンテナー環境内でターミナル ウィンドウを開いたりすることができます。 「コンテナー ウィンドウを使用する」を参照してください。

前提条件

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 サポートを有効にすることができます。

Screenshot showing how to enable Docker Support for new ASP.NET Core web app in Visual Studio.

Screenshot showing how to enable Docker Support for new ASP.NET Core web app in Visual Studio.

Note

(.NET Core ではなく) .NET Framework プロジェクトの場合、Windows コンテナーのみを使用できます。

既存のプロジェクトに Docker サポートを追加するには、ソリューション エクスプローラー[追加]>[Docker のサポート] の順に選択します。 [追加] > [Docker のサポート][追加] > [コンテナー オーケストレーター サポート] コマンドは、ソリューション エクスプローラーの ASP.NET Core プロジェクトのプロジェクト ノードの右クリック メニュー (またはコンテキスト メニュー) にあります。次のスクリーンショットを参照してください。

Screenshot showing how to add Docker Support menu option in Visual Studio.

Screenshot showing how to add Docker Support menu option in Visual Studio.

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) を選択することもできます。

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"]

.NET SDK オプションを使用して Docker サポートを追加する

.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 内にエンコードされます。

Screenshot showing the Container Scaffolding Options dialog for adding Docker support.

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 は、対象とするバージョンの .NET と一致するように選択されたコンテナー ベース イメージや、設定するべき環境変数など、Dockerfile 内にエンコードされるはずだった選択内容の一部を管理します。 コンテナー構成のプロジェクト ファイルで使用できる設定は、「コンテナーのカスタマイズ」に一覧表示されています。

コンテナー ウィンドウを使用する

[コンテナー] ウィンドウを使用すると、ご利用のコンピューター上でコンテナーとイメージを表示し、何が起こっているのかを確認できます。 ファイルシステム、マウントされたボリューム、環境変数、使用されているポートを表示し、さらにログ ファイルを調べることができます。

[コンテナー] ウィンドウを開くには、クイック起動 (Ctrl +Q) を使用し、「containers」と入力します。 ドッキング コントロールを使用すれば、このウィンドウを任意の場所に置くことができます。 ウィンドウの幅を考慮して、画面の下部にドッキングすると最適に動作します。

コンテナーを選択し、タブを使用することで利用可能な情報を表示します。 確認するには、Docker 対応アプリを実行し、[ファイル] タブを開き、app フォルダーを展開してコンテナーにデプロイされたアプリを確認します。

Screenshot of Containers window.

Screenshot of Containers window.

詳細については、「コンテナー ウィンドウを使用する」を参照してください。

Docker Compose のサポート

Docker Compose を使って複数コンテナーのソリューションを構成する場合は、コンテナー オーケストレーターのサポートをプロジェクトに追加します。 これにより、コンテナーのグループ (ソリューション全体、またはプロジェクトのグループ) が同じ docker-compose.yml ファイル内で定義されている場合、それらを同時に実行およびデバッグすることができます。

Docker Compose を使ったコンテナー オーケストレーターのサポートを追加するには、ソリューション エクスプローラーでプロジェクトのノードを右クリックし、[追加] > [コンテナー オーケストレーター サポート] を選びます。 次に、[Docker Compose] を選択してコンテナーを管理します。

プロジェクトにコンテナー オーケストレーターのサポートを追加すると、次に示すように、(既になかった場合) プロジェクトに Dockerfile が追加され、ソリューション エクスプローラー内のソリューションに docker-compose フォルダーが追加されるのを確認できます。

Screenshot of Docker files in Solution Explorer in Visual Studio.

Screenshot of Docker files in Solution Explorer in Visual Studio.

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 ツールの使用方法について詳しくは、以下の記事をご覧ください。

ローカルの Docker コンテナーでのアプリのデバッグ

Visual Studio を使用して ASP.NET Docker コンテナーをコンテナー レジストリにデプロイする