コンテナー内の ASP.NET Core
このガイドでは、以下の方法を学びます
- 単純な .NET Core サービス コンテナーを記述する
Dockerfile
ファイルを作成します。 - サービスの機能をビルド、実行、検証します。
- コンテナーとして実行されているサービスをデバッグします。
前提条件
- Docker と VS Code Container Tools 拡張機能は、概要で説明されているようにインストールする必要があります。
- .NET 開発には、.NET SDK をインストールします。
- Microsoft C# for Visual Studio Code 拡張機能。
.NET Web API プロジェクトを作成する
-
プロジェクト用のフォルダーを作成します。
-
プロジェクト フォルダーで開発者コマンド プロンプトを開き、プロジェクトを初期化します。
dotnet new webapi --no-https
プロジェクトにDockerファイルを追加する
-
VS Codeでプロジェクトフォルダを開きます。
-
C# 拡張機能がビルドとデバッグに必要なアセットを追加するように求めるプロンプトを表示するまで待ち、[はい] を選択します。コマンド パレット (⇧⌘P (Windows、Linux では Ctrl+Shift+P)) を開き、[.NET: Generate Assets for Build and Debug] コマンドを使用することもできます。
-
コマンド パレット (⇧⌘P (Windows、Linux では Ctrl+Shift+P)) を開き、[Containers: Add Docker Files to Workspace...] コマンドを使用します。
-
アプリケーション プラットフォームの入力を求められたら、[.NET: ASP.NET Core] を使用します。
-
オペレーティング システムの選択を求められたら、[Windows] または [Linux] を選択します。
Windows は、Docker のインストールが Windows コンテナーを使用するように構成されている場合にのみ適用されます。
-
Docker Compose ファイルを追加するかどうか尋ねられます。このチュートリアルでは Docker Compose は使用しないため、"はい" と "いいえ" のどちらの回答でも問題ありません。
-
アプリケーション エンドポイントのポートを
5000
に変更します。 -
Dockerfile
と.dockerignore
ファイルがワークスペースに追加されます。この拡張機能は、コンテナーをビルドして実行するための一連の VS Code タスク (デバッグ構成とリリース構成で合計 4 つのタスク) と、デバッグ モードでコンテナーを起動するためのデバッグ構成も作成します。
アプリケーションをビルドする
-
ターミナル プロンプトを開きます (⌃` (Windows、Linux では Ctrl+`))。
-
アプリケーションをビルドするために
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 ファイルを作成できます。この拡張機能は、入力候補とコンテキスト ヘルプを提供します。これらの機能を確認するには、次の手順に従ってサービス イメージに環境変数を追加します。
-
Dockerfile
ファイルを開きます。 -
ENV
命令を使用して、サービス コンテナー イメージに環境変数を追加します。この命令はDockerfile
のbase
ステージ (ファイルの最初のステージ) に配置する必要があります。ASPNETCORE_URLS
変数をhttp://*:5000
に設定します。Container Tools 拡張機能が、利用可能なすべての Dockerfile 命令を一覧表示し、構文を説明する方法に注目してください。
Container Tools 拡張機能は、
Dockerfile
のbase
ステージを使用して、サービスのコンテナー イメージのデバッグ バージョンを作成します。ASPNETCORE_URLS
環境変数定義をbase
ステージに配置すると、この変数がコンテナー イメージのデバッグ バージョンとリリース バージョンの両方で利用できるようになります。 -
Dockerfile
ファイルを保存します。
イメージをビルドする
-
コマンド パレット (⇧⌘P (Windows、Linux では Ctrl+Shift+P)) を開き、[Container Images: Build Image...] コマンドを発行します。
-
コンテナー エクスプローラーを開き、新しいイメージが [Images] ツリーに表示されていることを確認します。
サービス コンテナーをテストする
-
前の手順でビルドしたイメージを右クリックし、[Run] または [Run Interactive] を選択します。コンテナーが起動し、コンテナー エクスプローラーの [Containers] ビューに表示されるはずです。
-
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" } ] },
-
テストが完了したら、コンテナー エクスプローラーでコンテナーを右クリックし、[Stop] を選択します。
コンテナーでのデバッグ
Docker ファイルがアプリケーションに追加されたとき、Container Tools 拡張機能は、コンテナー内で実行されているサービスをデバッグするための VS Code デバッガー構成も追加しました。拡張機能は、サービスが使用しているプロトコルとポートを自動的に検出し、ブラウザーをサービスに向けますが、使用する URL パスを伝える必要があります。
-
Controllers/WeatherForecastController.cs
ファイルのGet()
メソッドのコードの先頭にブレークポイントを設定します。 -
.vscode/launch.json
ファイルを開き、Containers: .NET Core Launch
デバッグ構成を見つけます。 -
dockerServerReadyAction
をContainers: .NET Core Launch
構成に追加します。"dockerServerReadyAction": { "uriFormat": "%s://:%s/WeatherForecast" }
-
構成がアクティブとして選択されていることを確認します。
-
デバッグを開始します (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
}
次のステップ
完了しました!コンテナの準備ができたので、次のことを行いたいかもしれません。