1
4

Dockerで.NET webapi 環境構築

Posted at

概要

以下の手順で環境構築できる

  1. docker-compose.ymlを作成
  2. コンテナを立ち上げる
  3. webapiのプロジェクトを作成
  4. 開発用サーバーの設定変更
  5. 開発用サーバーの起動
  6. 動作確認

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ライフを!

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4