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

サービスコンテナーのテスト
-
前の手順でビルドしたイメージを右クリックし、Run または Run Interactive を選択します。コンテナーが起動し、Container Explorer の「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" } ] }, -
テストが完了したら、Container Explorer でコンテナーを右クリックし、Stop を選択します。
コンテナー内でのデバッグ
Docker ファイルがアプリケーションに追加された際、Container Tools 拡張機能は、コンテナー内で実行されているサービスをデバッグするための VS Code デバッガー構成も追加しました。拡張機能はサービスが使用しているプロトコルとポートを自動的に検出し、ブラウザーをそのサービスに向けますが、使用する URL パスを伝える必要があります。
-
Controllers/WeatherForecastController.csファイルのGet()メソッドのコードの先頭にブレークポイントを設定します。 -
.vscode/launch.jsonファイルを開き、Containers: .NET Core Launchデバッグ構成を探します。 -
Containers: .NET Core Launch構成にdockerServerReadyActionを追加します。"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
}
次のステップ
完了です!コンテナーが準備できたので、次のことができます。