コンテナー内の 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. Container Explorer を開き、新しいイメージが Images ツリーに表示されていることを確認します。

    Verify Docker image exists

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

  1. 前の手順でビルドしたイメージを右クリックし、Run または Run Interactive を選択します。コンテナーが起動し、Container Explorer の「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. テストが完了したら、Container Explorer でコンテナーを右クリックし、Stop を選択します。

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

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

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

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

  3. Containers: .NET Core Launch 構成に dockerServerReadyAction を追加します。

    "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
    }

次のステップ

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

© . This site is unofficial and not affiliated with Microsoft.