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 管理対象外・自動生成 |
0_setup-https-cert.ps1 を実行します(右クリック →「PowerShell で実行」など)。
powershell -NoProfile -ExecutionPolicy Bypass -File .\0_setup-https-cert.ps1証明書のパスワードを入力すると、以下が生成されます。
%USERPROFILE%\.aspnet\https\aspnetapp.pfx— 開発用証明書(PFX).env—CERT_PASSWORD=<入力したパスワード>(プロジェクト直下)
証明書は自動的に信頼済み(dotnet dev-certs https --trust)に設定されます。
Windows のセキュリティ警告ダイアログが表示されたら「はい」を選択してください。
Docker Desktop / Rancher Desktop を起動した状態で、1_docker-compose-up-build.bat をダブルクリック(または以下を実行)します。
docker compose up --build2 回目以降でイメージの再ビルドが不要な場合は 2_docker-compose-up.bat(docker compose up)を使います。
| プロトコル | URL |
|---|---|
| HTTP | http://localhost:8080 (HTTPS へリダイレクト) |
| HTTPS | https://localhost:8081 |
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に登録済み)。
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(読み取り専用)にマウント - パスワードは
.envのCERT_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 終端)を利用してください。