VS Codeのエージェントモードを拡張するには、を試してください!

コンテナー内の ASP.NET Core

このガイドでは、以下の方法を学びます

  • 単純な .NET Core サービス コンテナーを記述する Dockerfile ファイルを作成します。
  • サービスの機能をビルド、実行、検証します。
  • コンテナーとして実行されているサービスをデバッグします。

前提条件

  • Docker と VS Code Container Tools 拡張機能は、概要で説明されているようにインストールする必要があります。
  • .NET 開発には、.NET SDK をインストールします。
  • Microsoft C# for Visual Studio Code 拡張機能。

.NET Web API プロジェクトを作成する

  1. プロジェクト用のフォルダーを作成します。

  2. プロジェクト フォルダーで開発者コマンド プロンプトを開き、プロジェクトを初期化します。

    dotnet new webapi --no-https
    

プロジェクトにDockerファイルを追加する

  1. VS Codeでプロジェクトフォルダを開きます。

  2. C# 拡張機能がビルドとデバッグに必要なアセットを追加するように求めるプロンプトを表示するまで待ち、[はい] を選択します。コマンド パレット (⇧⌘P (Windows、Linux では Ctrl+Shift+P)) を開き、[.NET: Generate Assets for Build and Debug] コマンドを使用することもできます。

  3. コマンド パレット (⇧⌘P (Windows、Linux では Ctrl+Shift+P)) を開き、[Containers: Add Docker Files to Workspace...] コマンドを使用します。

    Add Dockerfile to a .NET project

  4. アプリケーション プラットフォームの入力を求められたら、[.NET: ASP.NET Core] を使用します。

  5. オペレーティング システムの選択を求められたら、[Windows] または [Linux] を選択します。

    Windows は、Docker のインストールが Windows コンテナーを使用するように構成されている場合にのみ適用されます。

  6. Docker Compose ファイルを追加するかどうか尋ねられます。このチュートリアルでは Docker Compose は使用しないため、"はい" と "いいえ" のどちらの回答でも問題ありません。

  7. アプリケーション エンドポイントのポートを 5000 に変更します。

  8. Dockerfile.dockerignore ファイルがワークスペースに追加されます。

    この拡張機能は、コンテナーをビルドして実行するための一連の VS Code タスク (デバッグ構成とリリース構成で合計 4 つのタスク) と、デバッグ モードでコンテナーを起動するためのデバッグ構成も作成します。

アプリケーションをビルドする

  1. ターミナル プロンプトを開きます (⌃` (Windows、Linux では Ctrl+`))。

  2. アプリケーションをビルドするために dotnet build コマンドを発行します。

    PS C:\source\repos\net> dotnet build
    MSBuild version 17.4.0-preview-22470-08+6521b1591 for .NET
      Determining projects to restore...
      All projects are up-to-date for restore.
      net -> C:\source\repos\net\bin\Debug\net7.0\net.dll
    
    Build succeeded.
        0 Warning(s)
        0 Error(s)
    
    Time Elapsed 00:00:08.96
    

イメージに環境変数を追加する

Container Tools 拡張機能を使用して Docker ファイルを作成できます。この拡張機能は、入力候補とコンテキスト ヘルプを提供します。これらの機能を確認するには、次の手順に従ってサービス イメージに環境変数を追加します。

  1. Dockerfile ファイルを開きます。

  2. ENV 命令を使用して、サービス コンテナー イメージに環境変数を追加します。この命令は Dockerfilebase ステージ (ファイルの最初のステージ) に配置する必要があります。ASPNETCORE_URLS 変数を http://*:5000 に設定します。

    Add an environment variable to Docker image

    Container Tools 拡張機能が、利用可能なすべての Dockerfile 命令を一覧表示し、構文を説明する方法に注目してください。

    Container Tools 拡張機能は、Dockerfilebase ステージを使用して、サービスのコンテナー イメージのデバッグ バージョンを作成します。ASPNETCORE_URLS 環境変数定義を base ステージに配置すると、この変数がコンテナー イメージのデバッグ バージョンとリリース バージョンの両方で利用できるようになります。

  3. Dockerfile ファイルを保存します。

イメージをビルドする

  1. コマンド パレット (⇧⌘P (Windows、Linux では Ctrl+Shift+P)) を開き、[Container Images: Build Image...] コマンドを発行します。

  2. コンテナー エクスプローラーを開き、新しいイメージが [Images] ツリーに表示されていることを確認します。

    Verify Docker image exists

サービス コンテナーをテストする

  1. 前の手順でビルドしたイメージを右クリックし、[Run] または [Run Interactive] を選択します。コンテナーが起動し、コンテナー エクスプローラーの [Containers] ビューに表示されるはずです。

    Running service container

  2. Web ブラウザーを開き、https://:5000/WeatherForecast に移動します。次のような JSON 形式の天気データが表示されるはずです。

    [
        {"date":"2019-11-07T23:31:57.0527092+00:00","temperatureC":4,"temperatureF":39,"summary":"Bracing"},
        {"date":"2019-11-08T23:31:57.0539243+00:00","temperatureC":-19,"temperatureF":-2,"summary":"Freezing"},
        {"date":"2019-11-09T23:31:57.0539269+00:00","temperatureC":2,"temperatureF":35,"summary":"Freezing"},
        {"date":"2019-11-10T23:31:57.0539275+00:00","temperatureC":-4,"temperatureF":25,"summary":"Freezing"},
        {"date":"2019-11-11T23:31:57.053928+00:00","temperatureC":9,"temperatureF":48,"summary":"Bracing"}
     ]
    

    既定では、Docker はコンテナーによって公開されるポート (コンテナー ポート) にランダムに選択されたホスト ポートを割り当てます。このアプリケーションでは、公開 (コンテナー) ポートは 5000 です。イメージに対して [Run] コマンドを発行すると、VS Code はホスト ポートとコンテナー ポートに同じポート番号を使用しようとします。これにより、コンテナーとの通信に使用するポートを簡単に覚えられますが、ホスト ポートが既に使用されている場合は機能しません。

    ブラウザーでコンテナーからのデータが表示されない場合は、docker run コマンドによってエラーが報告されていないことを確認してください (ターミナル ウィンドウでコマンド出力を確認します)。コンテナー エクスプローラーでコンテナーを右クリックし、[Inspect] を選択することで、コンテナーが使用しているホスト ポートを確認することもできます。これにより、コンテナーを詳細に記述した JSON ドキュメントが開きます。PortBindings 要素を検索します。例:

    "PortBindings": {
      "5000/tcp": [
        {
          "HostIp": "",
          "HostPort": "5000"
        }
      ]
    },
    
  3. テストが完了したら、コンテナー エクスプローラーでコンテナーを右クリックし、[Stop] を選択します。

コンテナーでのデバッグ

Docker ファイルがアプリケーションに追加されたとき、Container Tools 拡張機能は、コンテナー内で実行されているサービスをデバッグするための VS Code デバッガー構成も追加しました。拡張機能は、サービスが使用しているプロトコルとポートを自動的に検出し、ブラウザーをサービスに向けますが、使用する URL パスを伝える必要があります。

  1. Controllers/WeatherForecastController.cs ファイルの Get() メソッドのコードの先頭にブレークポイントを設定します。

  2. .vscode/launch.json ファイルを開き、Containers: .NET Core Launch デバッグ構成を見つけます。

  3. dockerServerReadyActionContainers: .NET Core Launch 構成に追加します。

    "dockerServerReadyAction": {
        "uriFormat": "%s://:%s/WeatherForecast"
    }
    
  4. 構成がアクティブとして選択されていることを確認します。

    Selected Docker debug configuration

  5. デバッグを開始します (F5)。

    • サービス コンテナーのデバッグ バージョンがビルドされ、開始されます。
    • ブラウザーが開き、新しい天気予報を要求します。
    • WeatherForecastController のブレークポイントにヒットします。

docker-run: debug タスク (.vscode/tasks.json ファイルで定義) によって使用される Docker 実行オプションを変更することで、ホスト上の特定のポートを使用できます。たとえば、サービスを公開するために同じポート (5000) を使用したい場合、docker-run: debug タスク定義は次のようになります。

 {
    "type": "docker-run",
    "label": "docker-run: debug",
    "dependsOn": [
        "docker-build: debug"
    ],
    "dockerRun": {
        "ports": [
            { "hostPort": 5000, "containerPort": 5000 }
        ]
    },
    "netCore": {
        "appProject": "${workspaceFolder}/netcorerest.csproj",
        "enableDebugging": true
    }

次のステップ

完了しました!コンテナの準備ができたので、次のことを行いたいかもしれません。