MochiuWiki : SUSE, EC, PCB
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
コンテナ - .NETのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
コンテナ - .NET
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == .NETコンテナには主に2つのタイプがある。<br> <br> * .NETランタイムイメージ *: アプリケーションの実行専用で、必要最小限の軽量なイメージである。 * .NET SDKイメージ *: 開発やビルドに必要なツールを含む大きなイメージである。 <br> 実運用環境では、まずSDKイメージでアプリケーションをビルドして、その成果物をランタイムイメージにコピーする <u>マルチステージビルド\</u> という手法が一般的である。<br> <br> 用途に応じて適切なベースイメージを選択することにより、効率的で安全なコンテナイメージを作成することができる。<br> <br><br> == .NETランタイム向けのコンテナファイル == ビルド済みのアプリケーションを実行するためのランタイムイメージを以下に示す。<br> <br> このランタイムイメージは、.NET / ASP.NET Coreアプリケーションを実行するために必要な最小限のコンポーネントのみを含んでいる。<br> イメージサイズが小さく、セキュリティ面でも攻撃対象が少ないというメリットがある。<br> <br> <syntaxhighlight lang="dockerfile"> # .NET 8のランタイムイメージを使用 ## 非ASP.NET Core向け FROM mcr.microsoft.com/dotnet/runtime:8.0 AS final ## ASP.NET Core向け # FROM mcr.microsoft.com/dotnet/aspnet:8.0 # 作業ディレクトリを設定 WORKDIR /app # ビルド済みのアプリケーションファイルをコピー # このファイルは事前にローカルでビルドする必要がある COPY ./publish /app # アプリケーションが使用するポートを公開 EXPOSE 8080 # アプリケーションを起動 ENTRYPOINT ["dotnet", "YourApp.dll"] </syntaxhighlight> <br><br> == .NET SDK向けのコンテナファイル == 開発環境やコンテナ内でビルドを行う場合は、.NET SDKイメージを使用する。<br> <br> .NET SDKイメージにはコンパイラや開発ツールが含まれているため、ソースコードから直接アプリケーションをビルドすることができる。<br> ただし、イメージサイズは大きくなる。<br> <br> <syntaxhighlight lang="dockerfile"> # .NET 8のSDKイメージを使用 FROM mcr.microsoft.com/dotnet/sdk:8.0 # 作業ディレクトリを設定 WORKDIR /src # プロジェクトファイルをコピーして依存関係を復元 # この段階的なコピーにより、依存関係のキャッシュが効率的になる COPY ["YourApp.csproj", "./"] RUN dotnet restore "YourApp.csproj" # ソースコードをコピー COPY . . # アプリケーションをビルド RUN dotnet build "YourApp.csproj" -c Release -o /app/build # アプリケーションを実行 WORKDIR /app/build ENTRYPOINT ["dotnet", "YourApp.dll"] </syntaxhighlight> <br><br> == マルチステージビルド (推奨) == 実運用環境では、ビルドと実行を分離したマルチステージビルドが最も推奨される。<br> これにより、最終イメージを小さく保ちながら、コンテナ内でのビルドすることができる。<br> <br> マルチステージビルドでは、最初に.NET SDKイメージでアプリケーションをビルドして、最終的にはランタイムイメージに必要なファイルのみをコピーする。<br> これにより、最終イメージから.NET SDKやビルドツールが除外されて、サイズとセキュリティの両面で最適化される。<br> <br> <syntaxhighlight lang="dockerfile"> # ビルドステージ # .NET SDKイメージを使用してアプリケーションをビルド FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build WORKDIR /src # プロジェクトファイルをコピーして依存関係を復元 # この段階を分けることにより、ソースコードが変更されても依存関係のレイヤーはキャッシュされる COPY ["YourApp/YourApp.csproj", "YourApp/"] RUN dotnet restore "YourApp/YourApp.csproj" # ソースコードをコピーしてビルド COPY . . WORKDIR "/src/YourApp" RUN dotnet build "YourApp.csproj" -c Release -o /app/build # パブリッシュステージ # ビルド成果物を発行形式に変換 FROM build AS publish RUN dotnet publish "YourApp.csproj" -c Release -o /app/publish /p:UseAppHost=false # 実行ステージ # 軽量なランタイムイメージに切り替え FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS final WORKDIR /app # パブリッシュステージから成果物だけをコピー COPY --from=publish /app/publish . # ポートを公開 EXPOSE 8080 # アプリケーションを起動 ENTRYPOINT ["dotnet", "YourApp.dll"] </syntaxhighlight> <br><br> == コンソールアプリケーション向けの調整 == もし、コンソールアプリケーションやバックグラウンドサービス (非ASP.NET Core) を開発する場合は、ランタイムイメージを変更する。 <syntaxhighlight lang="dockerfile"> # ASP.NET Coreの代わりに、基本的な.NETランタイムを使用 FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build # ビルド部分は同様 # ...略 FROM mcr.microsoft.com/dotnet/runtime:8.0 AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "YourApp.dll"] </syntaxhighlight> <br><br> == .NET 5から10までの各バージョンの指定方法 == 各.NETバージョンに対応する場合は、イメージタグを変更する。<br> <syntaxhighlight lang="dockerfile"> # .NET 5 (サポート終了済み) FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS final # .NET 6 (LTS - サポート終了済み) FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS final # .NET 7 (サポート終了済み) FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS final # .NET 8 (LTS - 2026年11月までサポート) FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS final # .NET 9 (2026年11月までサポート) FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS final # .NET 10(2028年11月までサポート) FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS final </syntaxhighlight> <br><br> __FORCETOC__ [[カテゴリ:コンテナ]]
コンテナ - .NET
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse