ローカルの Docker コンテナーでのアプリのデバッグDebug apps in a local Docker container

Visual Studio を使用すると、一貫した方法で、Docker コンテナーの開発とアプリケーションの検証をローカルで行うことができます。Visual Studio provides a consistent way to develop Docker containers and validate your application locally. Docker がインストールされたローカルの Windows デスクトップ上で実行されている Linux または Windows コンテナーで、アプリの実行とデバッグを行えます。コードを変更するたびに、コンテナーを再起動する必要はありません。You can run and debug your apps in Linux or Windows containers running on your local Windows desktop with Docker installed, and you don't have to restart the container each time you make a code change.

この記事では、Visual Studio を使用してローカルの Docker コンテナーでアプリを起動し、変更を加えた後、ブラウザーを更新してその変更を確認する方法について説明します。This article illustrates how to use Visual Studio to start an app in a local Docker container, make changes, and then refresh the browser to see the changes. また、この記事では、コンテナー化されたアプリにデバッグ用のブレークポイントを設定する方法についても説明します。This article also shows you how to set breakpoints for debugging for containerized apps. サポートされているプロジェクトの種類には、.NET Framework および .NET Core の Web アプリとコンソール アプリなどがあります。Supported project types include .NET Framework and .NET Core web and console apps. この記事では、ASP.NET Core Web アプリと .NET Framework コンソール アプリを使用します。In this article, we use ASP.NET Core web apps and .NET Framework console apps.

サポートされている種類のプロジェクトが既にある場合は、Visual Studio を使用して Dockerfile を作成し、コンテナー内で実行するようにプロジェクトを構成することができます。If you already have a project of a supported type, Visual Studio can create a Dockerfile and configure your project to run in a container. Visual Studio のコンテナー ツール」をご覧ください。See Container Tools in Visual Studio.

必須コンポーネントPrerequisites

ローカルの Docker コンテナーでアプリをデバッグするには、次のツールをインストールする必要があります。To debug apps in a local Docker container, the following tools must be installed:

ローカルで Docker コンテナーを実行するには、ローカルの Docker クライアントを用意する必要があります。To run Docker containers locally, you must have a local Docker client. Docker for Windows を使用できますが、Hyper-V が使用され、Windows 10 が必須となります。You can use Docker for Windows, which uses Hyper-V and requires Windows 10.

Docker コンテナーは .NET Framework プロジェクトと .NET Core プロジェクトで利用できます。Docker containers are available for .NET Framework and .NET Core projects. 2 つの例を見てみましょう。Let's look at two examples. まず、.NET Core Web アプリを見てみます。First, we look at a .NET Core web app. 次に、.NET Framework コンソール アプリを見てみます。Then, we look at a .NET Framework console app.

Web アプリの作成Create a web app

プロジェクトがあり、概要に関する記事で説明されているように Docker のサポートを追加済みである場合は、このセクションを省略してください。If you have a project and you've added Docker support as described in the overview, skip this section.

  1. Visual Studio メニューで、 [ファイル] > [新規作成] > [プロジェクト] の順に選択します。In the Visual Studio menu, select File > New > Project.
  2. [新しいプロジェクト] ダイアログ ボックスの [テンプレート] セクションで、[Visual C#] > [Web] の順に選択します。In the Templates section of the New Project dialog box, select Visual C# > Web.
  3. [ASP.NET Core Web アプリケーション] を選択します。Select ASP.NET Core Web Application.
  4. 新しいアプリケーションの名前を入力したら (または既定の名前を使用)、 [OK] を選択します。Enter a name for your new application (or use the default name), and then select OK.
  5. [Web アプリケーション] を選択します。Select Web Application.
  6. [Docker サポートを有効にする] チェック ボックスを選択します。Select the Enable Docker Support check box.
  7. コンテナーの種類 (Windows または Linux) を選択し、 [OK] を選択します。Select the type of container you want (Windows or Linux), and then select OK.
  1. Visual Studio の [スタート] ウィンドウから [新しいプロジェクトの作成] を選択します。In the Visual Studio start window, select Create a new project.
  2. [ASP.NET Core Web アプリケーション] を選択し、 [次へ] を選択します。Select ASP.NET Core Web Application, and then select Next.
  3. 新しいアプリケーションの名前を入力し (または既定の名前を使用)、 [追加] を選択します。Enter a name for your new application (or use the default name), and then select Create.
  4. [Web アプリケーション] を選択します。Select Web Application.
  5. [HTTPS 用の構成] チェックボックスを選択するかオフにして、SSL サポートを使用するかどうかを選択します。Choose whether you want SSL support by selecting or clearing the Configure for HTTPS check box.
  6. [Docker サポートを有効にする] チェック ボックスを選択します。Select the Enable Docker Support check box.
  7. コンテナーの種類 (Windows または Linux) を選択し、 [作成] を選択します。Select the type of container you want (Windows or Linux), and then select Create.

コードを編集して更新するEdit your code and refresh

変更をすばやく反復する目的で、コンテナーでアプリケーションを起動できます。To quickly iterate changes, you can start your application in a container. 次に、変更を続け、IIS Express の場合と同じように変更を表示します。Then, continue to make changes, viewing them as you would with IIS Express.

  1. 使用しているコンテナーの種類 (Linux または Windows) が使用されるように Docker が設定されていることを確認します。Make sure that Docker is set up to use the container type (Linux or Windows) that you are using. タスク バーの Docker アイコンを右クリックして、必要に応じて [Switch to Linux containers](Linux コンテナーに切り替える) または [Switch to Windows containers](Windows コンテナーに切り替える) を選択します。Right-click on the Docker icon on the Taskbar, and choose Switch to Linux containers or Switch to Windows containers as appropriate.

  2. (.NET Core 3 以降のみ) このセクションで説明しているようにコードを編集して実行中のサイトを更新する処理は、.NET Core 3.0 以降の既定テンプレートでは有効ではありません。(.NET Core 3 and later only) Editing your code and refreshing the running site as described in this section is not enabled in the default templates in .NET Core >= 3.0. 有効にするには、NuGet パッケージ Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation を追加します。To enable it, add the NuGet package Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation. Startup.cs で、拡張メソッド IMvcBuilder.AddRazorRuntimeCompilation への呼び出しを ConfigureServices メソッドのコードに追加します。In Startup.cs, add a call to the extension method IMvcBuilder.AddRazorRuntimeCompilation to the code in the ConfigureServices method. これを有効にする必要があるのはデバッグ モードのみなので、コードは次のようになります。You only need this enabled in DEBUG mode, so code it as follows:

    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 メソッドを変更します。Modify the Startup method as follows:

    public Startup(IConfiguration configuration, IWebHostEnvironment webHostEnvironment)
    {
        Configuration = configuration;
        Env = webHostEnvironment;
    }
    

    詳細については、「ASP.NET Core での Razor ファイルのコンパイル」を参照してください。For more information, see Razor file compilation in ASP.NET Core.

  3. [ソリューション構成][デバッグ] に設定します。Set Solution Configuration to Debug. 次に、Ctrl+F5 を押し、Docker イメージをビルドしてローカルで実行します。Then, press Ctrl+F5 to build your Docker image and run it locally.

    コンテナー イメージがビルドされ、Docker コンテナーで実行されると、Visual Studio では、既定のブラウザーでその Web アプリが起動します。When the container image is built and running in a Docker container, Visual Studio launches the web app in your default browser.

  4. インデックス ページに移動します。Go to the Index page. このページで変更を行います。We'll make changes on this page.

  5. Visual Studio に戻り、Index.cshtml を開きます。Return to Visual Studio and open Index.cshtml.

  6. ファイルの最後に次の HTML コンテンツを追加し、変更を保存します。Add the following HTML content to the end of the file, and then save the changes.

    <h1>Hello from a Docker container!</h1>
    
  7. 出力ウィンドウで、.NET ビルドが完了して次の行が表示されたら、お使いのブラウザーに戻り、ページを更新します。In the output window, when the .NET build is finished and you see the following lines, switch back to your browser and refresh the page:

    Now listening on: http://*:80
    Application started. Press Ctrl+C to shut down.
    

変更が適用されました。Your changes have been applied!

ブレークポイントを使用してデバッグするDebug with breakpoints

変更にはさらなる調査が必要になることがしばしばあります。Often, changes require further inspection. この作業には、Visual Studio のデバッグ機能を利用できます。You can use the debugging features of Visual Studio for this task.

  1. Visual Studio で Index.cshtml.cs を開きます。In Visual Studio, open Index.cshtml.cs.

  2. OnGet メソッドの内容を次のコードに置き換えます。Replace the contents of the OnGet method with the following code:

        ViewData["Message"] = "Your application description page from within a container";
    
  3. コード行の左側にブレークポイントを設定します。To the left of the code line, set a breakpoint.

  4. デバッグを開始してブレークポイントまで進めるには、F5 キーを押します。To start debugging and hit the breakpoint, press F5.

  5. Visual Studio に切り替えるとブレークポイントが表示されます。Switch to Visual Studio to view the breakpoint. 値を調べます。Inspect values.

    Visual Studio の Index.cshtml.cs のコードの一部を示すスクリーンショット。黄色で強調表示されているコード行の左側にブレークポイントが設定されています。

.NET Framework コンソール アプリを作成するCreate a .NET Framework console app

.NET Framework コンソール アプリ プロジェクトを使用するとき、オーケストレーションなしで Docker サポートを追加することはできません。When you use .NET Framework console app projects, the option to add Docker support without orchestration isn't supported. ただし、Docker プロジェクトを 1 つだけ使用している場合でも、次の手順を使用できます。You can still use the following procedure, even if you're using only a single Docker project.

  1. .NET Framework コンソール アプリ プロジェクトを新規作成するCreate a new .NET Framework Console app project.
  2. ソリューション エクスプローラーでプロジェクト ノードを右クリックし、 [追加][Container Orchestration Support](コンテナー オーケストレーションのサポート) の順に選択します。In Solution Explorer, right-click the project node, and then select Add > Container Orchestration Support. ダイアログ ボックスが表示されたら、 [Docker Compose] を選択します。In the dialog box that appears, select Docker Compose. Dockerfile がプロジェクトに追加され、Docker Compose プロジェクトと関連サポート ファイルが追加されます。A Dockerfile is added to your project and a Docker Compose project with associated support files is added.

ブレークポイントを使用してデバッグするDebug with breakpoints

  1. ソリューション エクスプローラーで、Program.cs を開きます。In Solution Explorer, open Program.cs.

  2. Main メソッドの内容を次のコードに置き換えます。Replace the contents of the Main method with the following code:

        System.Console.WriteLine("Hello, world!");
    
  3. コード行の左側にブレークポイントを設定します。Set a breakpoint to the left of the code line.

  4. F5 キーを押すと、デバッグが開始され、ブレークポイントまで進みます。Press F5 to start debugging and hit the breakpoint.

  5. Visual Studio に切り替えてブレークポイントを表示し、値を調べます。Switch to Visual Studio to view the breakpoint and inspect values.

    Visual Studio の Program.cs のコード ウィンドウのスクリーンショット。黄色で強調表示されているコード行の左側にブレークポイントが設定されています。

コンテナーの再利用Container reuse

開発サイクル中、Dockerfile を変更したとき、Visual Studio では、コンテナー イメージとコンテナー自体だけが再構築されます。During the development cycle, Visual Studio rebuilds only your container images and the container itself when you change the Dockerfile. Dockerfile を変更しない場合、Visual Studio では、以前の実行からのコンテナーが再利用されます。If you don't change the Dockerfile, Visual Studio reuses the container from an earlier run.

コンテナーを手動で修正した後、クリーンなコンテナー イメージで再開する場合、Visual Studio で [ビルド][クリーン] コマンドを使用し、その後、通常どおりビルドします。If you manually modified your container and want to restart with a clean container image, use the Build > Clean command in Visual Studio, and then build as normal.

トラブルシューティングTroubleshoot

Visual Studio Docker 開発で発生する問題を解決する方法について説明します。Learn how to troubleshoot Visual Studio Docker development.

次の手順Next steps

Visual Studio でコンテナー化されたアプリをビルドする方法」を参照して、詳細を確認します。Get more details by reading How Visual Studio builds containerized apps.

Visual Studio、Windows、Azure を使用した Docker の詳細More about Docker with Visual Studio, Windows, and Azure