ローカルの Docker コンテナーでのアプリのデバッグ
適用対象:Visual Studio
Visual Studio for Mac
Visual Studio Code
Visual Studio を使用すると、一貫した方法で、Docker コンテナーの開発とアプリケーションの検証をローカルで行うことができます。 Docker がインストールされたローカルの Windows デスクトップ上で実行されている Linux または Windows コンテナーで、アプリの実行とデバッグを行えます。コードを変更するたびに、コンテナーを再起動する必要はありません。
この記事では、Visual Studio を使用してローカルの Docker コンテナーでアプリを起動し、変更を加えた後、ブラウザーを更新してその変更を確認する方法について説明します。 また、この記事では、コンテナー化されたアプリにデバッグ用のブレークポイントを設定する方法についても説明します。 サポートされているプロジェクトの種類には、Web アプリ、コンソール アプリ、.NET Framework と .NET Core を対象とする Azure 関数などがあります。 この記事で示す例は、種類が ASP.NET Core Web アプリであるプロジェクトと、種類がコンソール アプリ (.NET Framework) であるプロジェクトです。
サポートされている種類のプロジェクトが既にある場合は、Visual Studio を使用して Dockerfile を作成し、コンテナー内で実行するようにプロジェクトを構成することができます。 「Visual Studio のコンテナー ツール」をご覧ください。
必須コンポーネント
ローカルの Docker コンテナーでアプリをデバッグするには、次のツールをインストールする必要があります。
- Web 開発ワークロードがインストールされている Visual Studio 2019
- Web 開発ワークロードがインストールされている Visual Studio 2022
ローカルで Docker コンテナーを実行するには、ローカルの Docker クライアントを用意する必要があります。 Docker Desktop を使用できます。これには Windows 10 以降が必要です。
Web アプリの作成
プロジェクトがあり、概要に関する記事で説明されているように Docker のサポートを追加済みである場合は、このセクションを省略してください。
Visual Studio の [スタート] ウィンドウから [新しいプロジェクトの作成] を選択します。
[ASP.NET Core Web アプリ] を選択してから、 [次へ] を選択します。
新しいアプリケーションの名前を入力 (または既定の名前を使用) し、ディスク上の場所を指定した後、 [次へ] を選択します。
対象にする .NET バージョンを選択します。 わからない場合は、LTS (長期サポート) リリースを選択してください。
[HTTPS 用の構成] チェックボックスを選択するかオフにして、SSL サポートを使用するかどうかを選択します。
[Docker サポートを有効にする] チェック ボックスを選択します。
コンテナーの種類 (Windows または Linux) を選択し、[作成] を選択します。
Visual Studio の [スタート] ウィンドウから [新しいプロジェクトの作成] を選択します。
[ASP.NET Core Web アプリ] を選択してから、 [次へ] を選択します。
新しいアプリケーションの名前を入力 (または既定の名前を使用) し、ディスク上の場所を指定した後、 [次へ] を選択します。
対象にする .NET バージョンを選択します。 わからない場合は、LTS (長期サポート) リリースを選択してください。
[HTTPS 用の構成] チェックボックスを選択するかオフにして、SSL サポートを使用するかどうかを選択します。
[Docker を有効にする] チェック ボックスをオンにします。
[Docker OS] テキストボックスで、使用するコンテナーの種類 (Windows または Linux) を選択し、 [作成] を選択します。
Razor ページを編集して更新する
Razor ページで変更をすばやく反復する目的で、コンテナーでアプリケーションを起動できます。 次に、変更を続け、IIS Express の場合と同じように変更を表示します。
使用しているコンテナーの種類 (Linux または Windows) が使用されるように Docker が設定されていることを確認します。 タスク バーの Docker アイコンを右クリックして、必要に応じて [Switch to Linux containers](Linux コンテナーに切り替える) または [Switch to Windows containers](Windows コンテナーに切り替える) を選択します。
(.NET Core 3 以降のみ) このセクションで説明しているようにコードを編集して実行中のサイトを更新する処理は、.NET Core 3.0 以降の既定のテンプレートでは有効ではありません。 有効にするには、NuGet パッケージ Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation を追加します。 Startup.cs で、拡張メソッド
IMvcBuilder.AddRazorRuntimeCompilation
への呼び出しをConfigureServices
メソッドのコードに追加します。 これを有効にする必要があるのはデバッグ モードのみなので、コードは次のようになります。public IWebHostEnvironment Env { get; set; } public void ConfigureServices(IServiceCollection services) { IMvcBuilder builder = services.AddRazorPages(); #if DEBUG if (Env.IsDevelopment()) { builder.AddRazorRuntimeCompilation(); } #endif // code omitted for brevity }
次のように、
Startup
メソッドを変更します。public Startup(IConfiguration configuration, IWebHostEnvironment webHostEnvironment) { Configuration = configuration; Env = webHostEnvironment; }
詳細については、「ASP.NET Core での Razor ファイルのコンパイル」を参照してください。
[ソリューション構成] を [デバッグ] に設定します。 次に、Ctrl+F5 を押し、Docker イメージをビルドしてローカルで実行します。
コンテナー イメージがビルドされ、Docker コンテナーで実行されると、Visual Studio では、既定のブラウザーでその Web アプリが起動します。
インデックス ページに移動します。 このページで変更を行います。
Visual Studio に戻り、Index.cshtml を開きます。
ファイルの最後に次の HTML コンテンツを追加し、変更を保存します。
<h1>Hello from a Docker container!</h1>
出力ウィンドウで、.NET ビルドが完了して次の行が表示されたら、お使いのブラウザーに戻り、ページを更新します。
Now listening on: http://*:80 Application started. Press Ctrl+C to shut down.
変更が適用されました。
ブレークポイントを使用してデバッグする
変更にはさらなる調査が必要になることがしばしばあります。 この作業には、Visual Studio のデバッグ機能を利用できます。
Visual Studio で Index.cshtml.cs を開きます。
OnGet
メソッドの内容を次のコードに置き換えます。ViewData["Message"] = "Your application description page from within a container";
コード行の左側にブレークポイントを設定します。
デバッグを開始してブレークポイントまで進めるには、F5 キーを押します。
Visual Studio に切り替えるとブレークポイントが表示されます。 値を調べます。
.NET Framework コンソール アプリを作成する
このセクションでは、まず Docker サポートをプロジェクトに追加する方法を示して、ローカルの Docker コンテナーで .NET Framework コンソール アプリ プロジェクトをデバッグする方法について説明します。 プロジェクトの種類によって、Docker サポートのレベルが異なることを認識することが重要です。 .NET Core (.NET 5 移行を含む) コンソール アプリ プロジェクトと .NET Framework コンソール アプリ プロジェクトでさえも、Docker サポートのレベルが異なります。
.NET Framework コンソール アプリ プロジェクトが作成されると、Docker サポートを有効にすることができません。 このようなプロジェクトを作成したら、明示的に Docker サポートをプロジェクトに追加する方法はありません。 .NET Framework コンソール アプリ プロジェクトの場合は、コンテナー オーケストレーションのサポートを追加できます。 .NET Framework コンソール アプリ プロジェクトにオーケストレーション サポートを追加すると、Docker サポートがプロジェクトに追加されるという副次的影響が生じます。
次の手順では、オーケストレーション サポートを .NET Framework コンソール アプリ プロジェクトに追加する方法のデモを行います。ここでは、その後、Docker サポートがプロジェクトに追加され、これにより、プロジェクトをローカルの Docker コンテナーにデバッグすることができます。
- .NET Framework コンソール アプリ プロジェクトを新規作成する
- ソリューション エクスプローラーでプロジェクト ノードを右クリックし、 [追加] 、 [Container Orchestration Support](コンテナー オーケストレーションのサポート) の順に選択します。 ダイアログ ボックスが表示されたら、 [Docker Compose] を選択します。 Dockerfile がプロジェクトに追加され、Docker Compose プロジェクトと関連サポート ファイルが追加されます。
ブレークポイントを使用してデバッグする
ソリューション エクスプローラーで、Program.cs を開きます。
Main
メソッドの内容を次のコードに置き換えます。System.Console.WriteLine("Hello, world!");
コード行の左側にブレークポイントを設定します。
F5 キーを押すと、デバッグが開始され、ブレークポイントまで進みます。
Visual Studio に切り替えてブレークポイントを表示し、値を調べます。
コンテナーの再利用
開発サイクル中、Dockerfile を変更したとき、Visual Studio では、コンテナー イメージとコンテナー自体だけが再構築されます。 Dockerfile を変更しない場合、Visual Studio では、以前の実行からのコンテナーが再利用されます。
コンテナーを手動で修正した後、クリーンなコンテナー イメージで再開する場合、Visual Studio で [ビルド] の [クリーン] コマンドを使用し、その後、通常どおりビルドします。
トラブルシューティング
Visual Studio Docker 開発で発生する問題を解決する方法について説明します。
次の手順
「Visual Studio でコンテナー化されたアプリをビルドする方法」を参照して、詳細を確認します。
Visual Studio、Windows、Azure を使用した Docker の詳細
- Visual Studio でコンテナーを開発する方法について説明します。
- Docker コンテナーをビルドし、デプロイする方法については、「Azure Pipelines 向けの Docker の統合」を参照してください。
- Windows Server と Nano Server に関する記事の索引が必要であれば、「Windows コンテナー情報」を参照してください。
- Azure Kubernetes Service の詳細はこちらをご覧ください。また、Azure Kubernetes Service ドキュメントを確認してください。