1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ASP.NET CoreでホットリロードするDocker開発環境を構築する方法

Last updated at Posted at 2025-01-01

DockerでASP.NET Core (.NET 8) の開発環境を構築する機会がありました.そこで備忘として,実際に行った環境構築の方法をまとめます.

本記事は開発環境構築についてのご紹介ですが,本番環境構築時に行ったことについても後日まとめようと思います.

環境

  • MacBook Air M2 (macOS Sequoia)
  • .NET 8
  • ASP.NET Core Blazor

環境にmacOSと記載していますが,Windows環境でも動作することを確認しております.

ディレクトリ構成

ASP.NET Coreプロジェクトのディレクトリ構成は以下のとおりです.一部不要なディレクトリ名やファイル名は記載していません.

src/
├ bin/
├ obj/
├ Components/
├ Properties/
│ └ launchSettings.json
├ appsettings.json
├ hogehoge.csproj
└ Program.cs
hogehoge.sln

1. Dockerfileの作成

非Docker環境でホットリロードありのデバッグを行う場合,CLI環境ならcsprojファイルのある階層でdotnet watch runすると思います.
これと同様のことをDockerでも行えば良いので,以下のようにDockerfileを構成します.
尚,Dockerfileはslnファイルと同階層に配置します.

Dockerfile
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS base

ENV ASPNETCORE_ENVIRONMENT=Development

WORKDIR /app
COPY . ./

WORKDIR /app/src
RUN dotnet restore

ENTRYPOINT [ "dotnet", "watch", "run", "--no-restore" ]

ポイント

  • FROM句でベースとなる.NET SDKのコンテナレイヤをビルドします.
  • COPY . ./でプロジェクトのディレクトリ全体をDockerコンテナの/appディレクトリにコピーします.
  • コンテナの/app/srcディレクトリにてdotnet restoreにより依存関係を復元したのち,dotnet watch run --no-restoreでホットリロードありのデバッグを開始します.

2. docker-compose.ymlの作成

Dockerfileと同階層に,docker-compose.ymlファイルを作成します.
内容は以下のとおりです.

docker-compose.yml
services:
    aspnetcore:
        build:
            context: .
            dockerfile: Dockerfile
        ports:
            - 8080:5000
        volumes:
            - ./src/.:/app/src

ポイント

  • build: dockerfile:には,docker-compose.ymlから見たDockerfileの相対パスを記載します.
  • ports:にはWebアプリケーションのポートを記載します.[ホスト側のポート]:[コンテナ側のポート]の形式で記載します.
    尚,[コンテナ側のポート]は後述するappsettings.jsonにて設定可能です.
  • volumes:にてホスト側のsrcディレクトリと,コンテナ側の/app/srcディレクトリをバインドしています.書式は[ホスト側のパス]:[コンテナ側のパス]です.
    これによりホスト側のファイルを変更した際は,その内容が即座にコンテナ側のディレクトリに反映され,その後ホットリロードが実行されます.

3. appsettings.jsonの設定

appsettings.jsonに以下の設定を追加します.

"Kestrel": {
    "Endpoints": {
        "Http": {
            "Url": "http://*:5000"
        }
    }
}

ASP.NET CoreではKestrelというサーバーを利用します.そのエンドポイントとして,上記のように任意のURLを指定することができます.

ポイント

  • Dockerで構築する場合,URLのホスト名は自身を表すlocalhost127.0.0.1ではなく,すべてのアドレスを示す0.0.0.0*を記載します.その上で任意のポートを:で繋げてURLを構成します.
    指定するポートはコンテナ側が待ち受けるポートになります.上記の例では,docker-compose.ymlで指定した5000番を指定しています.

4. いざコンテナ実行

docker-compose.ymlがあるディレクトリにて,以下コマンドを実行します.

docker compose up -d

少々時間がかかりますが,http://localhost:[docker-compose.ymlで指定したホスト側ポート]にアクセスしてWebアプリケーションの画面が表示されれば構築成功です(本記事の例ではhttp://localhost:8080にアクセスします).

コンテナやプロジェクトのビルドのログについては,Docker DesktopのコンテナのLogsにて確認することができます.

以上,DockerでのASP.NET Core開発環境構築の方法でした.

1
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?