概要
以下の手順で環境構築できる
- docker-compose.ymlを作成
- コンテナを立ち上げる
- webapiのプロジェクトを作成
- 開発用サーバーの設定変更
- 開発用サーバーの起動
- 動作確認
1. docker-compose.ymlを作成
以下の内容のファイルを作成
# docker-compose.yml
version: '3'
services:
dotnet_webapi:
tty: true
image: mcr.microsoft.com/dotnet/sdk:6.0
container_name: コンテナ名(任意)
working_dir: /app
volumes:
- .:/app
ports:
- "8000:8000"
Docker関連の解説
1. Dockerイメージ
mcr.microsoft.com/dotnet/sdk:6.0
以下の.NETのレジストリを確認したところ、SDKをはじめ、.NETランタイムやASP.NET CoreのランタイムのDocker imageが用意されている
今回は、開発環境を構築したいため、.NET SDKのイメージを使用する
2. ポート
webapiサーバーを起動するにあたり、8000番のポートを開放する
.NET webapiのデフォルトでは、ポートをランダムに使用する(7098番あたり)が、今回は、コンテナを使用するため、devServerのポートは8000番に固定する
8000番でなくてもローカルマシンの使用中ポートと重複していなければ、任意の値で良い
2. コンテナを立ち上げる
以下のコマンドを実行してコマンドでコンテナを立ち上げる
docker-compose up --build -d
3. webapiのプロジェクトを作成
コンテナが起動したら、以下のようなexecコマンドでコンテナにアタッチする
docker exec <コンテナ名> -it bash
アタッチできたら、以下のコマンドを実行してwebapiのプロジェクトを作成する
dotnet new webapi -o <プロジェクト名>
※ここで、dotnet new -l
を実行することで、作成できるプロジェクトの種類を一覧表示できる
("webapi"の部分を変更することでMVCや、Razor、React関連のプロジェクトも作成可能)
4. 開発用サーバーの設定変更
devServerのポート固定する
前述の通り、デフォルトだとランダムにポートを指定されるので今回は8000番に固定する
以下のようにファイルを書き換える
/プロジェクト名/appsettings.Development.json
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"urls": "http://0.0.0.0:8000" <-ここを追記
}
【注意】ここで、プロトコルをhttp, ホストを0.0.0.0に設定する
プロトコルがhttpsの場合、証明書を信頼するためのコマンドの実行が必要になる
ホストをlocalhostに設定するとコンテナにリクエストを届けることができない
5. 開発用サーバーの起動
プロジェクトのディレクトリで以下のコマンドを実行
dotnet run
以下のような表示になればOK
root@7015f1354552:/app# dotnet run
Building...
info: Microsoft.Hosting.Lifetime[14]
Now listening on: http://0.0.0.0:8000
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
Content root path: /app/
※ここで、dotnet watch run
を実行すると、ホットリロードを利用できる
6. 動作確認
webブラウザで( http://localhost:8000/WeatherForecast )にアクセス
以下のような結果が返ってくれば起動成功
値はランダムなため、以下の結果と異なることもある
[{"date":"2024-07-18T12:33:51.0448246+00:00","temperatureC":34,"temperatureF":93,"summary":"Balmy"},{"date":"2024-07-19T12:33:51.0457181+00:00","temperatureC":44,"temperatureF":111,"summary":"Mild"},{"date":"2024-07-20T12:33:51.0457207+00:00","temperatureC":2,"temperatureF":35,"summary":"Cool"},{"date":"2024-07-21T12:33:51.0457209+00:00","temperatureC":2,"temperatureF":35,"summary":"Sweltering"},{"date":"2024-07-22T12:33:51.045721+00:00","temperatureC":50,"temperatureF":121,"summary":"Mild"}]
良い.NETライフを!