containerize-aspnetcore
ASP.NET Coreプロジェクト向けにカスタマイズされたDockerfileおよび.dockerfileファイルを生成し、プロジェクトをコンテナ化します。
description の原文を見る
Containerize an ASP.NET Core project by creating Dockerfile and .dockerfile files customized for the project.
SKILL.md 本文
ASP.NET Core Docker コンテナ化プロンプト
コンテナ化リクエスト
以下の設定で指定された ASP.NET Core (.NET) プロジェクトをコンテナ化し、Linux Docker コンテナで実行するために必要な変更のみに焦点を当てます。コンテナ化では、ここで指定されたすべての設定を考慮する必要があります。
.NET Core アプリケーションをコンテナ化するためのベストプラクティスに従い、パフォーマンス、セキュリティ、保守性に最適化されたコンテナを確保してください。
コンテナ化設定
このセクションには、ASP.NET Core アプリケーションをコンテナ化するための具体的な設定と構成が含まれています。このプロンプトを実行する前に、設定に必要な情報が入力されていることを確認してください。多くの場合、最初の数つの設定のみが必要です。後の設定は、コンテナ化されるプロジェクトに適用されない場合はデフォルト値のままにしておくことができます。
指定されていない設定はデフォルト値に設定されます。デフォルト値は[角括弧]で提供されています。
基本的なプロジェクト情報
-
コンテナ化するプロジェクト:
[ProjectName (.csproj ファイルへのパスを指定)]
-
使用する .NET バージョン:
[8.0 または 9.0 (デフォルト 8.0)]
-
使用する Linux ディストリビューション:
[debian、alpine、ubuntu、chiseled、または Azure Linux (mariner) (デフォルト debian)]
-
Docker イメージのビルドステージ用のカスタムベースイメージ(標準の Microsoft ベースイメージを使用する場合は「None」):
[ビルドステージに使用するベースイメージを指定 (デフォルト None)]
-
Docker イメージの実行ステージ用のカスタムベースイメージ(標準の Microsoft ベースイメージを使用する場合は「None」):
[実行ステージに使用するベースイメージを指定 (デフォルト None)]
コンテナ設定
-
コンテナイメージで公開する必要があるポート:
- プライマリ HTTP ポート:
[例: 8080] - 追加ポート:
[追加ポート一覧、または「None」]
- プライマリ HTTP ポート:
-
コンテナが実行されるべきユーザーアカウント:
[ユーザーアカウント、またはデフォルトで「$APP_UID」]
-
アプリケーション URL 設定:
[ASPNETCORE_URLS を指定、またはデフォルトで「http://+:8080」]
ビルド設定
-
コンテナイメージをビルドする前に実行する必要があるカスタムビルドステップ:
[特定のビルドステップ一覧、または「None」]
-
コンテナイメージをビルドした後に実行する必要があるカスタムビルドステップ:
[特定のビルドステップ一覧、または「None」]
-
設定する必要がある NuGet パッケージソース:
[認証情報付きのプライベート NuGet フィード一覧、または「None」]
依存関係
-
コンテナイメージにインストールする必要があるシステムパッケージ:
[選択した Linux ディストリビューションのパッケージ名、または「None」]
-
コンテナイメージにコピーする必要があるネイティブライブラリ:
[ライブラリ名とパス、または「None」]
-
インストールする必要がある追加の .NET ツール:
[ツール名とバージョン、または「None」]
システム設定
- コンテナイメージで設定する必要がある環境変数:
[変数名と値、または「デフォルトを使用」]
ファイルシステム
-
コンテナイメージにコピーする必要があるファイル/ディレクトリ:
[プロジェクトルートからの相対パス、または「None」]- コンテナ内のターゲット場所:
[コンテナパス、または「該当なし」]
-
コンテナ化から除外するファイル/ディレクトリ:
[除外するパス、または「None」]
-
設定する必要があるボリュームマウントポイント:
[永続データ用のボリュームパス、または「None」]
.dockerignore 設定
.dockerignoreファイルに含める必要があるパターン(.dockerignore には既に共通のデフォルトが含まれています。これらは追加パターンです):- 追加パターン:
[追加パターン一覧、または「None」]
- 追加パターン:
ヘルスチェック設定
-
ヘルスチェックエンドポイント:
[ヘルスチェック URL パス、または「None」]
-
ヘルスチェック間隔とタイムアウト:
[間隔とタイムアウト値、または「デフォルトを使用」]
追加の指示
-
プロジェクトをコンテナ化するために従う必要がある他の指示:
[特定の要件、または「None」]
-
対処すべき既知の問題:
[既知の問題の説明、または「None」]
スコープ
- ✅ アプリケーション設定の変更により、アプリケーション設定と接続文字列を環境変数から読み取ることができるようにする
- ✅ ASP.NET Core アプリケーション用の Dockerfile の作成と設定
- ✅ Dockerfile に複数のステージを指定してアプリケーションをビルド/公開し、出力を最終イメージにコピー
- ✅ Linux コンテナプラットフォーム互換性の設定(Alpine、Ubuntu、Chiseled、または Azure Linux (Mariner))
- ✅ 依存関係の適切な処理(システムパッケージ、ネイティブライブラリ、追加ツール)
- ❌ インフラストラクチャ設定なし(別途処理されることを想定)
- ❌ コンテナ化に必要な範囲を超えるコード変更なし
実行プロセス
- 上記のコンテナ化設定を確認して、コンテナ化要件を理解する
progress.mdファイルを作成して、チェックマークで変更を追跡する- プロジェクトの .csproj ファイルから .NET バージョンを決定し、
TargetFramework要素をチェック - 以下に基づいて適切な Linux コンテナイメージを選択:
- プロジェクトから検出された .NET バージョン
- コンテナ化設定で指定された Linux ディストリビューション(Alpine、Ubuntu、Chiseled、または Azure Linux (Mariner))
- ユーザーがコンテナ化設定で特定のベースイメージをリクエストしない場合、ベースイメージは以下の例 Dockerfile またはドキュメントに示されているタグを持つ有効な mcr.microsoft.com/dotnet イメージである必要があります
- ビルドおよびランタイムステージ用の公式 Microsoft .NET イメージ:
- SDK イメージタグ(ビルドステージ用): https://github.com/dotnet/dotnet-docker/blob/main/README.sdk.md
- ASP.NET Core ランタイムイメージタグ: https://github.com/dotnet/dotnet-docker/blob/main/README.aspnet.md
- .NET ランタイムイメージタグ: https://github.com/dotnet/dotnet-docker/blob/main/README.runtime.md
- プロジェクトのルートディレクトリに Dockerfile を作成してアプリケーションをコンテナ化
- Dockerfile は複数のステージを使用する必要があります:
- ビルドステージ: .NET SDK イメージを使用してアプリケーションをビルド
- 最初に csproj ファイルをコピー
- NuGet.config が存在する場合はコピーして、プライベートフィードを設定
- NuGet パッケージを復元
- その後、ソースコードの残りをコピーして、アプリケーションをビルドして /app/publish に公開
- 最終ステージ: 選択された .NET ランタイムイメージを使用してアプリケーションを実行
- 作業ディレクトリを /app に設定
- コンテナ化設定で指定されたユーザーを設定(デフォルトでは、非ルートユーザー(例:
$APP_UID))- コンテナ化設定で別途指示されない限り、新しいユーザーを作成する必要はありません。
$APP_UID変数を使用してユーザーアカウントを指定します
- コンテナ化設定で別途指示されない限り、新しいユーザーを作成する必要はありません。
- ビルドステージから公開された出力を最終イメージにコピー
- ビルドステージ: .NET SDK イメージを使用してアプリケーションをビルド
- コンテナ化設定のすべての要件を考慮する必要があります:
- .NET バージョンと Linux ディストリビューション
- 公開するポート
- コンテナ用のユーザーアカウント
- ASPNETCORE_URLS 設定
- システムパッケージインストール
- ネイティブライブラリ依存関係
- 追加の .NET ツール
- 環境変数
- ファイル/ディレクトリのコピー
- ボリュームマウントポイント
- ヘルスチェック設定
- Dockerfile は複数のステージを使用する必要があります:
- プロジェクトのルートディレクトリに
.dockerignoreファイルを作成して、Docker イメージから不要なファイルを除外。.dockerignoreファイルは、コンテナ化設定で指定された追加パターンと同様に、少なくとも以下の要素を含む必要があります:- bin/
- obj/
- .dockerignore
- Dockerfile
- .git/
- .github/
- .vs/
- .vscode/
- **/node_modules/
- *.user
- *.suo
- **/.DS_Store
- **/Thumbs.db
- コンテナ化設定で指定された追加パターン
- コンテナ化設定で指定されている場合はヘルスチェックを設定:
- ヘルスチェックエンドポイントが提供されている場合、Dockerfile に HEALTHCHECK 指示を追加
- curl または wget を使用してヘルスエンドポイントをチェック
- タスクを完了としてマーク: [ ] → [✓]
- すべてのタスクが完了して Docker ビルドが成功するまで続行
ビルドとランタイム検証
Dockerfile が完成したら Docker ビルドが成功することを確認してください。以下のコマンドを使用して Docker イメージをビルド:
docker build -t aspnetcore-app:latest .
ビルドが失敗する場合は、エラーメッセージを確認し、Dockerfile またはプロジェクト設定に必要な調整を加えてください。成功/失敗を報告してください。
進捗追跡
progress.md ファイルを以下の構造で維持:
# コンテナ化の進捗
## 環境検出
- [ ] .NET バージョン検出 (バージョン: ___)
- [ ] Linux ディストリビューション選択 (ディストリビューション: ___)
## 設定変更
- [ ] 環境変数サポート用のアプリケーション設定確認
- [ ] NuGet パッケージソース設定 (該当する場合)
## コンテナ化
- [ ] Dockerfile 作成
- [ ] .dockerignore ファイル作成
- [ ] SDK イメージでビルドステージ作成
- [ ] パッケージ復元用に csproj ファイル(複数)コピー
- [ ] 該当する場合は NuGet.config コピー
- [ ] ランタイムイメージでランタイムステージ作成
- [ ] 非ルートユーザー設定
- [ ] 依存関係処理(システムパッケージ、ネイティブライブラリ、ツール等)
- [ ] ヘルスチェック設定 (該当する場合)
- [ ] 特殊な要件の実装
## 検証
- [ ] コンテナ化設定をレビューし、すべての要件が満たされていることを確認
- [ ] Docker ビルド成功
ステップ間で確認を待たないでください。アプリケーションがコンテナ化され Docker ビルドが成功するまで、体系的に続行してください。
すべてのチェックボックスが明記されるまで完了していません! これには Docker イメージの正常なビルドと、ビルドプロセス中に発生する問題への対処が含まれます。
Dockerfile の例
Linux ベースイメージを使用した ASP.NET Core (.NET) アプリケーション用の Dockerfile の例。
# ============================================================
# ステージ 1: アプリケーションをビルドして公開
# ============================================================
# ベースイメージ - 適切な .NET SDK バージョンと Linux ディストリビューションを選択
# 使用可能なタグには以下が含まれます:
# - 8.0-bookworm-slim (Debian 12)
# - 8.0-noble (Ubuntu 24.04)
# - 8.0-alpine (Alpine Linux)
# - 9.0-bookworm-slim (Debian 12)
# - 9.0-noble (Ubuntu 24.04)
# - 9.0-alpine (Alpine Linux)
# アプリケーションをビルドするための .NET SDK イメージを使用
FROM mcr.microsoft.com/dotnet/sdk:8.0-bookworm-slim AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
# キャッシュの最適化のためにプロジェクトファイルを最初にコピー
COPY ["YourProject/YourProject.csproj", "YourProject/"]
COPY ["YourOtherProject/YourOtherProject.csproj", "YourOtherProject/"]
# NuGet 設定をコピー(存在する場合)
COPY ["NuGet.config", "."]
# NuGet パッケージを復元
RUN dotnet restore "YourProject/YourProject.csproj"
# ソースコードをコピー
COPY . .
# 必要に応じてカスタムビルド前ステップを実行
# RUN echo "ビルド前ステップを実行中..."
# アプリケーションをビルドして公開
WORKDIR "/src/YourProject"
RUN dotnet build "YourProject.csproj" -c $BUILD_CONFIGURATION -o /app/build
# アプリケーションを公開
RUN dotnet publish "YourProject.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false
# 必要に応じてカスタムビルド後ステップを実行
# RUN echo "ビルド後ステップを実行中..."
# ============================================================
# ステージ 2: 最終ランタイムイメージ
# ============================================================
# ベースイメージ - 適切な .NET ランタイムバージョンと Linux ディストリビューションを選択
# 使用可能なタグには以下が含まれます:
# - 8.0-bookworm-slim (Debian 12)
# - 8.0-noble (Ubuntu 24.04)
# - 8.0-alpine (Alpine Linux)
# - 8.0-noble-chiseled (Ubuntu 24.04 Chiseled)
# - 8.0-azurelinux3.0 (Azure Linux)
# - 9.0-bookworm-slim (Debian 12)
# - 9.0-noble (Ubuntu 24.04)
# - 9.0-alpine (Alpine Linux)
# - 9.0-noble-chiseled (Ubuntu 24.04 Chiseled)
# - 9.0-azurelinux3.0 (Azure Linux)
# アプリケーションを実行するための .NET ランタイムイメージを使用
FROM mcr.microsoft.com/dotnet/aspnet:8.0-bookworm-slim AS final
# 必要に応じてシステムパッケージをインストール(コメントを外して必要に応じて変更)
# RUN apt-get update && apt-get install -y \
# curl \
# wget \
# ca-certificates \
# libgdiplus \
# && rm -rf /var/lib/apt/lists/*
# 必要に応じて追加の .NET ツールをインストール(コメントを外して必要に応じて変更)
# RUN dotnet tool install --global dotnet-ef --version 8.0.0
# ENV PATH="$PATH:/root/.dotnet/tools"
WORKDIR /app
# ビルドステージから公開されたアプリケーションをコピー
COPY --from=build /app/publish .
# 必要に応じて追加ファイルをコピー(コメントを外して必要に応じて変更)
# COPY ./config/appsettings.Production.json .
# COPY ./certificates/ ./certificates/
# 環境変数を設定
ENV ASPNETCORE_ENVIRONMENT=Production
ENV ASPNETCORE_URLS=http://+:8080
# 必要に応じてカスタム環境変数を追加(コメントを外して必要に応じて変更)
# ENV CONNECTIONSTRINGS__DEFAULTCONNECTION="your-connection-string"
# ENV FEATURE_FLAG_ENABLED=true
# 必要に応じて SSL/TLS 証明書を設定(コメントを外して必要に応じて変更)
# ENV ASPNETCORE_Kestrel__Certificates__Default__Path=/app/certificates/app.pfx
# ENV ASPNETCORE_Kestrel__Certificates__Default__Password=your_password
# アプリケーションがリッスンするポートを公開
EXPOSE 8080
# EXPOSE 8081 # HTTPS を使用する場合はコメントを外す
# ヘルスチェック用に curl をインストール(まだインストールされていない場合)
RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
# ヘルスチェックを設定
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD curl -f http://localhost:8080/health || exit 1
# 必要に応じて永続データ用にボリュームを作成(コメントを外して必要に応じて変更)
# VOLUME ["/app/data", "/app/logs"]
# セキュリティのため非ルートユーザーに切り替え
USER $APP_UID
# アプリケーションのエントリポイントを設定
ENTRYPOINT ["dotnet", "YourProject.dll"]
この例の適応
注: コンテナ化設定の特定の要件に基づいてこのテンプレートをカスタマイズしてください。
この Dockerfile の例を適応させるとき:
YourProject.csproj、YourProject.dllなどを実際のプロジェクト名に置き換え- 必要に応じて .NET バージョンと Linux ディストリビューションを調整
- 要件に基づいて依存関係インストールステップを変更し、不要なものを削除
- アプリケーション固有の環境変数を設定
- 特定のワークフローに必要に応じてステージを追加/削除
- ヘルスチェックエンドポイントをアプリケーションのヘルスチェックルートと一致するように更新
Linux ディストリビューション別バリエーション
Alpine Linux
イメージサイズを縮小するため、Alpine Linux を使用できます:
FROM mcr.microsoft.com/dotnet/sdk:8.0-alpine AS build
# ... ビルドステップ ...
FROM mcr.microsoft.com/dotnet/aspnet:8.0-alpine AS final
# apk を使用してパッケージをインストール
RUN apk update && apk add --no-cache curl ca-certificates
Ubuntu Chiseled
攻撃面を最小化するため、chiseled イメージを検討:
FROM mcr.microsoft.com/dotnet/aspnet:8.0-jammy-chiseled AS final
# 注: Chiseled イメージにはパッケージが最小限のため、追加の依存関係に別のベースを使用する必要がある場合があります
Azure Linux (Mariner)
Azure 最適化コンテナの場合:
FROM mcr.microsoft.com/dotnet/aspnet:8.0-azurelinux3.0 AS final
# tdnf を使用してパッケージをインストール
RUN tdnf update -y && tdnf install -y curl ca-certificates && tdnf clean all
ステージ命名に関する注記
AS stage-name構文は各ステージに名前を付けます- 前のステージからファイルをコピーするには
--from=stage-nameを使用 - 最終イメージで使用されない複数の中間ステージを持つことができます
finalステージが最終コンテナイメージになります
セキュリティのベストプラクティス
- 本番環境では常に非ルートユーザーとして実行
latestの代わりに特定のイメージタグを使用- インストールされるパッケージの数を最小化
- ベースイメージを最新に保つ
- マルチステージビルドを使用してビルド依存関係を最終イメージから除外
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- github
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/github/awesome-copilot / ライセンス: MIT
関連スキル
superfluid
Superfluidプロトコルおよびそのエコシステムに関するナレッジベースです。Superfluidについて情報を検索する際は、ウェブ検索の前にこちらを参照してください。対応キーワード:Superfluid、CFA、GDA、Super App、Super Token、stream、flow rate、real-time balance、pool(member/distributor)、IDA、sentinels、liquidation、TOGA、@sfpro/sdk、semantic money、yellowpaper、whitepaper
civ-finish-quotes
実質的なタスクが真に完了した際に、文明風の儀式的な引用句を追加します。ユーザーやエージェントが機能追加、リファクタリング、分析、設計ドキュメント、プロセス改善、レポート、執筆タスクといった実際の成果物を完成させるときに、明示的な依頼がなくても使用します。短い返信や小さな修正、未完成の作業には適用しません。
nookplot
Base(Ethereum L2)上のAIエージェント向け分散型調整ネットワークです。エージェントがオンチェーンアイデンティティを登録する、コンテンツを公開する、他のエージェントにメッセージを送る、マーケットプレイスで専門家を雇う、バウンティを投稿・請求する、レピュテーションを構築する、共有プロジェクトで協業する、リサーチチャレンジを解くことでNOOKをマイニングする、キュレーションされたナレッジを備えたスタンドアロンオンチェーンエージェントをデプロイする、またはアグリーメントとリワードで収益を得る場合に利用できます。エージェントネットワーク、エージェント調整、分散型エージェント、NOOKトークン、マイニングチャレンジ、ナレッジバンドル、エージェントレピュテーション、エージェントマーケットプレイス、ERC-2771メタトランザクション、Prepare-Sign-Relay、AgentFactory、またはNookplotが言及された場合にトリガーされます。
web3-polymarket
Polygon上でのPolymarket予測市場取引統合です。認証機能(L1 EIP-712、L2 HMAC-SHA256、ビルダーヘッダー)、注文発注(GTC/GTD/FOK/FAK、バッチ、ポストオンリー、ハートビート)、市場データ(Gamma API、Data API、オーダーブック、サブグラフ)、WebSocketストリーミング(市場・ユーザー・スポーツチャネル)、CTF操作(分割、統合、償却、ネガティブリスク)、ブリッジ機能(入金、出金、マルチチェーン)、およびガスレスリレイトランザクションに対応しています。AIエージェント、自動マーケットメーカー、予測市場UI、またはPolygraph上のPolymarketと統合するアプリケーション構築時に活用できます。
ethskills
Ethereum、EVM、またはブロックチェーン関連のリクエストに対応します。スマートコントラクト、dApps、ウォレット、DeFiプロトコルの構築、監査、デプロイ、インタラクションに適用されます。Solidityの開発、コントラクトアドレス、トークン規格(ERC-20、ERC-721、ERC-4626など)、Layer 2ネットワーク(Base、Arbitrum、Optimism、zkSync、Polygon)、Uniswap、Aave、Curveなどのプロトコルとの統合をカバーします。ガスコスト、コントラクトのデシマル設定、オラクルセキュリティ、リエントランシー、MEV、ブリッジング、ウォレット管理、オンチェーンデータの取得、本番環境へのデプロイ、プロトコル進化(EIPライフサイクル、フォーク追跡、今後の変更予定)といったトピックを含みます。
xxyy-trade
このスキルは、ユーザーが「トークン購入」「トークン売却」「トークンスワップ」「暗号資産取引」「取引ステータス確認」「トランザクション照会」「トークンスキャン」「フィード」「チェーン監視」「トークン照会」「トークン詳細」「トークン安全性確認」「ウォレット一覧表示」「マイウォレット」「AIスキャン」「自動スキャン」「ツイートスキャン」「オンボーディング」「IP確認」「IPホワイトリスト」「トークン発行」「自動売却」「損切り」「利益確定」「トレーリングストップ」「保有者」「トップホルダー」「KOLホルダー」などをリクエストした場合、またはSolana/ETH/BSC/BaseチェーンでXXYYを経由した取引について言及した場合に使用します。XXYY Open APIを通じてオンチェーン取引とデータ照会を実現します。