Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ASPNETMVCOnDocker

ASP.NET Core MVC (.NET 10) アプリケーションを Docker コンテナで実行する基礎的なプロジェクトです。 HTTP (8080) と HTTPS (8081) の両方に対応し、HTTPS は .NET 開発用証明書を利用します。

前提条件

  • Docker エンジン — Docker Desktop または Rancher Desktop(dockerd/moby エンジン)
  • .NET 10 SDK — 開発用証明書の生成(dotnet dev-certs)に使用
  • OS: Windows

ファイル構成

ファイル 役割
Dockerfile マルチステージビルド(SDK でビルド → aspnet ランタイムで実行、非rootユーザー)
Dockerfile.hostbuild ホストビルド型。ホスト側の publish 成果物をランタイムイメージにコピーするだけ
docker-compose.yml サービス定義・ポート公開・証明書マウント・環境変数
docker-compose.hostbuild.yml ホストビルド型用の override(ビルド対象を Dockerfile.hostbuild に差し替え)
0_setup-https-cert.ps1 開発用証明書を PFX にエクスポートし、信頼設定・.env を生成
1_docker-compose-up-build.bat イメージをビルドして起動(docker compose up --build
2_docker-compose-up.bat ビルド済みイメージで起動(docker compose up
3_docker-compose-down.bat 停止・コンテナ削除(docker compose down
4_hostbuild-and-up ホストビルド型。dotnet publish → override で起動
.env 証明書パスワード(CERT_PASSWORD)。Git 管理対象外・自動生成

セットアップと起動

1. HTTPS 開発用証明書の準備(初回のみ)

0_setup-https-cert.ps1 を実行します(右クリック →「PowerShell で実行」など)。

powershell -NoProfile -ExecutionPolicy Bypass -File .\0_setup-https-cert.ps1

証明書のパスワードを入力すると、以下が生成されます。

  • %USERPROFILE%\.aspnet\https\aspnetapp.pfx — 開発用証明書(PFX)
  • .envCERT_PASSWORD=<入力したパスワード>(プロジェクト直下)

証明書は自動的に信頼済み(dotnet dev-certs https --trust)に設定されます。 Windows のセキュリティ警告ダイアログが表示されたら「はい」を選択してください。

2. コンテナのビルドと起動

Docker Desktop / Rancher Desktop を起動した状態で、1_docker-compose-up-build.bat をダブルクリック(または以下を実行)します。

docker compose up --build

2 回目以降でイメージの再ビルドが不要な場合は 2_docker-compose-up.batdocker compose up)を使います。

3. アクセス

プロトコル URL
HTTP http://localhost:8080 (HTTPS へリダイレクト)
HTTPS https://localhost:8081

4. 停止

3_docker-compose-down.bat をダブルクリック(または以下を実行)します。

docker compose down

ビルド方式の選択肢

本プロジェクトには 2 種類のビルド方式があります。用途に応じて使い分けてください。

方式 ビルド場所 使用ファイル 起動方法
コンテナ内ビルド(既定) コンテナ内(SDK イメージ) Dockerfile 1_docker-compose-up-build.bat
ホストビルド型 ホスト(要 .NET 10 SDK) Dockerfile.hostbuild + override 4_hostbuild-and-up

コンテナ内ビルド(既定)

ホストに SDK が無くてもビルドでき、再現性・可搬性に優れます。CI や本番向き。 手順は前述の「セットアップと起動」を参照してください。

ホストビルド型

ホスト側で dotnet publish を実行し、その成果物をランタイムイメージにコピーするだけの方式です。 毎回の restore/ビルドコンテキスト転送が不要になり、ローカルでの反復開発が高速になります。

# publish → override 付きで起動(4_hostbuild-and-up が実行する内容)
dotnet publish WebApplication1.csproj -c Release -o .\publish
docker compose -f docker-compose.yml -f docker-compose.hostbuild.yml up --build
  • ホストに .NET 10 SDK が必須です。
  • net10.0 はフレームワーク依存(IL)のため、Windows ホストで publish しても Linux コンテナで動作します。
  • publish 成果物(publish/)は Git 管理対象外です(.gitignore に登録済み)。

HTTPS 証明書の仕組み

docker-compose.yml は以下の方法でコンテナに証明書を渡します。

environment:
  - Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx
  - Kestrel__Certificates__Default__Password=${CERT_PASSWORD}   # .env から注入
volumes:
  - ${USERPROFILE}/.aspnet/https:/https:ro                       # PFX を read-only でマウント
  • ホストの %USERPROFILE%\.aspnet\https をコンテナの /https(読み取り専用)にマウント
  • パスワードは .envCERT_PASSWORD を Compose の変数展開で注入
  • Kestrel が起動時に証明書を読み込み、8081 で HTTPS を待ち受け

注意点

  • .env は Git 管理対象外です(.gitignore.env*.pfx を登録済み)。パスワードが平文で保存されるためコミットしないでください。
  • 証明書の有効期限: dotnet dev-certs の証明書には有効期限があります。切れた場合は 0_setup-https-cert.ps1 を再実行して再生成してください。
  • 非rootユーザー: Dockerfile は USER $APP_UID(非root)で実行します。Docker Desktop / Rancher Desktop の bind mount は通常マウントファイルを読み取れます。もし証明書のアクセス拒否エラーが出た場合は、docker-compose.yml に一時的に user: root を追加して切り分けてください。
  • DataProtection の警告: 起動ログの DataProtection-Keys に関する警告は、コンテナ削除時に鍵が失われるという開発時には無害な通知です。永続化が必要な場合はボリュームを追加してください。
  • 本番環境: この証明書方式は開発専用です。本番では正式な証明書やリバースプロキシ(TLS 終端)を利用してください。

About

ASP.NET Core MVC を Dockerコンテナにする基礎的な内容

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages