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: ビルドとデバッグ用アセットを生成 コマンドを使用することもできます。

  3. コマンドパレット (⇧⌘P (Windows, Linux Ctrl+Shift+P)) を開き、コンテナ: ワークスペースに Docker ファイルを追加... コマンドを使用します。

    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 ファイルがワークスペースに追加されます。

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

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

  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)) を開き、コンテナイメージ: イメージのビルド... コマンドを実行します。

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

    Verify Docker image exists

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

  1. 前のステップでビルドしたイメージを右クリックし、実行または対話形式で実行を選択します。コンテナが起動し、Container Explorer の「コンテナ」ビューでそれが表示されるはずです。

    Running service container

  2. ウェブブラウザを開き、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 です。イメージに対して実行コマンドを発行すると、VS Code はホストポートとコンテナポートに同じポート番号を使用しようとします。これにより、コンテナと通信するためにどのポートを使用するかを覚えやすくなりますが、ホストポートがすでに使用されている場合は機能しません。

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

    "PortBindings": {
      "5000/tcp": [
        {
          "HostIp": "",
          "HostPort": "5000"
        }
      ]
    },
    
  3. テストが完了したら、Container Explorer でコンテナを右クリックし、停止 を選択します。

コンテナでデバッグする

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
    }

次のステップ

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