コンテナで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: ビルドとデバッグ用アセットを生成 コマンドを使用することもできます。
-
コマンドパレット (⇧⌘P (Windows, Linux Ctrl+Shift+P)) を開き、コンテナ: ワークスペースに Docker ファイルを追加... コマンドを使用します。
-
アプリケーションプラットフォームの入力を求められたら、.NET: ASP.NET Core を使用します。
-
オペレーティングシステムの選択を求められたら、Windows または Linux を選択します。
Windows は、Docker のインストールが Windows コンテナを使用するように構成されている場合にのみ適用されます。
-
Docker Compose ファイルを追加するかどうか尋ねられます。このチュートリアルでは Docker Compose は使用しないため、「はい」と「いいえ」のどちらの回答でも問題ありません。
-
アプリケーションエンドポイントのポートを
5000
に変更します。 -
Dockerfile
と.dockerignore
ファイルがワークスペースに追加されます。この拡張機能は、コンテナのビルドと実行 (デバッグおよびリリース構成の両方で合計 4 つのタスク) のためのVS Code タスクのセットと、デバッグモードでコンテナを起動するためのデバッグ構成も作成します。
アプリケーションをビルドする
-
ターミナルプロンプト (⌃` (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 Explorer の「コンテナ」ビューでそれが表示されるはずです。
-
ウェブブラウザを開き、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 です。イメージに対して実行コマンドを発行すると、VS Code はホストポートとコンテナポートに同じポート番号を使用しようとします。これにより、コンテナと通信するためにどのポートを使用するかを覚えやすくなりますが、ホストポートがすでに使用されている場合は機能しません。
ブラウザでコンテナからのデータが表示されない場合は、
docker run
コマンドによって報告されたエラーがないことを確認してください (ターミナルウィンドウのコマンド出力を確認してください)。Container Explorer でコンテナを右クリックし、検査 を選択することで、コンテナがどのホストポートを使用しているかを確認することもできます。これにより、コンテナを詳細に記述する JSON ドキュメントが開きます。たとえば、PortBindings
要素を検索してください。"PortBindings": { "5000/tcp": [ { "HostIp": "", "HostPort": "5000" } ] },
-
テストが完了したら、Container Explorer でコンテナを右クリックし、停止 を選択します。
コンテナでデバッグする
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
}
次のステップ
完了しました!コンテナの準備ができたので、次のことを行いたいかもしれません。