🚀 VS Code で で入手しましょう!

コンテナー内の ASP.NET Core

このガイドでは、次の方法を学習します。

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

前提条件

  • Docker および VS Code Docker 拡張機能は、概要の説明に従ってインストールする必要があります。
  • .NET 開発の場合は、.NET SDK をインストールします。
  • Microsoft Visual Studio Code 用 C# 拡張機能。

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

    また、拡張機能は、コンテナーをビルドおよび実行するための一連の 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
    

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

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

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

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

    Add an environment variable to Docker image

    Docker 拡張機能が使用可能なすべての Dockerfile 命令をリストし、構文を説明する方法に注意してください。

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

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

イメージのビルド

  1. コマンド パレット (⇧⌘P (Windows、Linux Ctrl+Shift+P)) を開き、[Docker イメージ: イメージのビルド...] コマンドを発行します。

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

    Verify Docker image exists

サービス コンテナーのテスト

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

    Running service container

  2. Web ブラウザーを開き、http://localhost: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 コマンドによってエラーが報告されていないことを確認してください (ターミナル ウィンドウのコマンド出力を確認してください)。また、Docker エクスプローラーでコンテナーを右クリックし、[検査] を選択して、コンテナーで使用されているホスト ポートを確認することもできます。これにより、コンテナーの詳細を記述する JSON ドキュメントが開きます。たとえば、PortBindings 要素を検索します。

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

コンテナー内でのデバッグ

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

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

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

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

    "dockerServerReadyAction": {
        "uriFormat": "%s://localhost:%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
    }

次のステップ

完了です。コンテナーの準備ができたので、次のことを行うことができます。