コンテナー内の ASP.NET Core
このガイドでは、次の方法を学習します。
- シンプルな .NET Core サービス コンテナーを記述する
Dockerfile
ファイルを作成します。 - サービスの機能をビルド、実行、検証します。
- コンテナーとして実行されているサービスをデバッグします。
前提条件
- Docker および VS Code Docker 拡張機能は、概要の説明に従ってインストールする必要があります。
- .NET 開発の場合は、.NET SDK をインストールします。
- Microsoft Visual Studio Code 用 C# 拡張機能。
.NET Web API プロジェクトの作成
-
プロジェクトのフォルダーを作成します。
-
プロジェクト フォルダーで開発者コマンド プロンプトを開き、プロジェクトを初期化します。
dotnet new webapi --no-https
Docker ファイルをプロジェクトに追加する
-
VS Code でプロジェクト フォルダーを開きます。
-
C# 拡張機能がビルドとデバッグに必要なアセットを追加するように求めるプロンプトが表示されるまで待って、[はい] を選択します。コマンド パレット (⇧⌘P (Windows、Linux Ctrl+Shift+P)) を開き、[.NET: ビルドとデバッグ用のアセットを生成] コマンドを使用することもできます。
-
コマンド パレット (⇧⌘P (Windows、Linux Ctrl+Shift+P)) を開き、[Docker: Docker ファイルをワークスペースに追加...] コマンドを使用します。
-
アプリケーション プラットフォームのプロンプトが表示されたら、[.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
環境変数をイメージに追加する
Docker 拡張機能を使用して Docker ファイルを作成できます。この拡張機能は、補完とコンテキスト ヘルプを提供します。これらの機能を確認するには、次の手順に従って、環境変数をサービス イメージに追加します。
-
Dockerfile
ファイルを開きます。 -
ENV
命令を使用して、環境変数をサービス コンテナー イメージに追加します。この命令は、Dockerfile
のbase
ステージ (ファイルの最初のステージ) に配置する必要があります。ASPNETCORE_URLS
変数をhttp://*:5000
に設定します。Docker 拡張機能が使用可能なすべての Dockerfile 命令をリストし、構文を説明する方法に注意してください。
Docker 拡張機能は、サービスのデバッグ バージョンのコンテナー イメージを作成するために、
Dockerfile
のbase
ステージを使用します。ASPNETCORE_URLS
環境変数定義をbase
ステージに配置して、この変数をコンテナー イメージのデバッグ バージョンとリリース バージョンの両方で使用できるようにします。 -
Dockerfile
ファイルを保存します。
イメージのビルド
-
コマンド パレット (⇧⌘P (Windows、Linux Ctrl+Shift+P)) を開き、[Docker イメージ: イメージのビルド...] コマンドを発行します。
-
Docker エクスプローラーを開き、新しいイメージが [イメージ] ツリーに表示されていることを確認します。
サービス コンテナーのテスト
-
前の手順でビルドしたイメージを右クリックし、[実行] または [インタラクティブ実行] を選択します。コンテナーが起動し、Docker エクスプローラーの [コンテナー] ペインに表示されるはずです。
-
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" } ] },
-
テストが完了したら、Docker エクスプローラーでコンテナーを右クリックし、[停止] を選択します。
コンテナー内でのデバッグ
Docker ファイルがアプリケーションに追加されると、Docker 拡張機能は、コンテナー内で実行されているサービスをデバッグするための VS Code デバッガー構成 も追加します。拡張機能は、サービスが使用しているプロトコルとポートを自動的に検出し、ブラウザーをサービスにポイントしますが、使用する URL パスを指定する必要があります。
-
Controllers/WeatherForecastController.cs
ファイルのGet()
メソッドのコードの先頭にブレークポイントを設定します。 -
.vscode/launch.json
ファイルを開き、Docker .NET Core Launch
デバッグ構成を見つけます。 -
dockerServerReadyAction
をDocker .NET Core Launch
構成に追加します。"dockerServerReadyAction": { "uriFormat": "%s://localhost:%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
}
次のステップ
完了です。コンテナーの準備ができたので、次のことを行うことができます。