-
Notifications
You must be signed in to change notification settings - Fork 0
MS_DotNetCoreDeployment
- 戻る(.NET Core)
.NET Core のコンソールアプリの発行とデプロイ
https://learn.microsoft.com/ja-jp/dotnet/core/install/linux
インストールが必要な依存ライブラリは Linux ディストリビューションごとに異なっている。
.NET Core ネイティブ インストーラー
-
SCD 以外の方式(FDD or Linux 上でビルド)で、
Linux 環境で .NET Core アプリケーションを実行する場合、
.NET Core が依存するライブラリを事前にインストールする必要がある。 -
各ディストリビューション用の .NET Core ネイティブ インストーラーにより、
Linux における .NET Core の前提条件ライブラリがすべてインストールされる。
どうも、FDD が推奨の方式らしい。
SCD では、バージョン不一致の問題が発生し易いもよう。
-
FDD : Framework-dependent deployment
-
フレームワークに依存する展開
-
.NET Framework での配置と同様の仕組み。
-
展開先(アプリケーションが動作する OS)に、
.NET Core のランタイムがインストールされていることを前提としている仕組み。
-
以下が挙げられる。
-
.NET Core ランタイムは共通であるため、実行や配置が容易になる。
- ディストリビューション毎に .NET Core の依存関係を考慮する必要が無い。
- パッケージ作成時にターゲット プラットフォーム (OS、アーキテクチャ) を考慮する必要が無い。
- バージョン不一致の問題が発生し難いもよう。
-
ランタイム・フリーであるため、ビルド出力が、
- 軽量になる。
- OS によらず同一になる。
以下の 2 点が挙げられる。
-
事前に、展開先に、.NET Core ランタイムのインストールが必要になる。
-
.NET Core ランタイム側のバージョンアップでまれではあるが
開発-実行環境間でアプリの動作に変更が生じる可能性があること。
-
SCD : Self-contained deployment
-
自己完結型の展開
- 配置するバイナリのみで実行可能な形式(ランタイムも同時に配置する)
以下の 2 点が挙げられる。
- 開発時にランタイムのインストールが不要。
- 利用するランタイムを完全に固定できる。
以下の点が挙げられる。
-
.NET Core ランタイムは個別であるため、実行や配置が複雑になる。
- OS ごとにビルドを行ってバイナリを生成しないといけない。
- パッケージ作成時にターゲット プラットフォーム (OS、アーキテクチャ) の選択が必要。
- バージョン不一致の問題が発生し易いもよう。
-
バイナリにランタイムが含まれるので
- 配置するバイナリのサイズが大きくなり、
- 配置先のマシンで占めるディスク容量が増える。
補足(判断の目安と、その後の選択肢): 原文の
「FDD が推奨」という結論は、同じマシンに複数のアプリを置く
従来型のサーバー運用を前提とすれば妥当である。
ランタイムを 1 つ入れて共有する方が、管理も容量も楽になる。一方、コンテナが前提になると評価が変わる。
【サーバーに直接置く】 FDD が有利(ランタイムを共有、更新も OS 側で一括) 【コンテナに載せる】 どちらでも良い。ベース イメージで aspnet を選べば実質 FDD → 「イメージを小さくしたい」なら SCD + トリミング補足(現在の選択肢): SCD には後から次の機能が加わっている。
機能 内容 単一ファイル発行 PublishSingleFileで 1 つの実行ファイルにまとめるトリミング PublishTrimmedで未使用のアセンブリを削る(サイズ削減)Native AOT PublishAotでネイティブ バイナリに事前コンパイルNative AOT は起動が非常に速く、メモリも小さいため、
Azure Functions のような起動時間が効く用途や、
コンテナの小型化で選ばれる。
ただしリフレクションや動的コード生成に強い制約がかかるため、
使えるかどうかはライブラリ次第である。補足(RID の指定): SCD ではランタイム識別子 (RID) の指定が要る。
# FDD(既定) dotnet publish -c Release # SCD dotnet publish -c Release -r linux-x64 --self-contained true原文の参考リンクにもある RID カタログは、
現在はlinux-x64/win-x64/osx-arm64のように
簡素化されている(かつてのubuntu.16.04-x64のような
ディストリビューション固有の RID は非推奨)。
.NET Coreのインストールとデプロイ(DNET_DotNetCoreInstallDeploy.md)
- .NET Core でコンソールアプリを配置する - Build Insider
https://www.buildinsider.net/language/dotnetcore/04
- CentOS
- Ubuntu
- CentOS
- Ubuntu
-
Linux に .NET をインストールする
https://learn.microsoft.com/ja-jp/dotnet/core/install/linux -
.NET CLI(コマンドライン インターフェイス)
https://learn.microsoft.com/ja-jp/dotnet/core/tools/ -
.NET アプリケーションの発行
https://learn.microsoft.com/ja-jp/dotnet/core/deploying/
以下の「サードパーティの依存関係を含む。含まない。」は、
NuGet する・しない程度の違いしかないので、手順は複雑化しない。
- .NET CLI を使用して .NET アプリを発行する
https://learn.microsoft.com/ja-jp/dotnet/core/deploying/deploy-with-cli - Visual Studio で .NET アプリを発行する
https://learn.microsoft.com/ja-jp/dotnet/core/deploying/deploy-with-vs
-
自己完結型の展開
https://learn.microsoft.com/ja-jp/dotnet/core/deploying/#publish-self-contained -
単一ファイル発行
https://learn.microsoft.com/ja-jp/dotnet/core/deploying/single-file/overview -
Native AOT 配置
https://learn.microsoft.com/ja-jp/dotnet/core/deploying/native-aot/ -
.NET のランタイム識別子 (RID) のカタログ
https://learn.microsoft.com/ja-jp/dotnet/core/rid-catalog
Tags: 移行, .NET開発, .NET Core
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。