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
ファイルと同階層に配置します.
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ファイルを作成します.
内容は以下のとおりです.
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
のホスト名は自身を表すlocalhost
や127.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開発環境構築の方法でした.