Docker コンテナー用 .Net を選択するタイミング

ヒント

このコンテンツは eBook の「コンテナー化された .NET アプリケーションの .NET マイクロサービス アーキテクチャ」からの抜粋です。.NET Docs で閲覧できるほか、PDF として無料ダウンロードすると、オンラインで閲覧できます。

.NET Microservices Architecture for Containerized .NET Applications eBook cover thumbnail.

.NET 8 のモジュール性と軽量性はコンテナーに最適です。 コンテナーを展開して起動すると、そのイメージは .NET Framework の場合よりも .NET 8 の方がはるかに小さくなります。 それに対して、コンテナーに .NET Framework を使用する場合、イメージを Windows Server Core イメージに基づいて作成する必要があります。このイメージは、.NET 8 に使用する Windows Nano Server イメージや Linux イメージよりもはるかに重くなります。

さらに、.NET 8 はクロスプラットフォームなので、Linux または Windows のコンテナー イメージを使用してサーバー アプリを展開できます。 ただし、従来の .NET Framework を使用している場合は、Windows Server Core に基づいてイメージを展開する必要があります。

ここでは、.NET 8 を選択する理由について詳しく説明します。

クロスプラットフォームの開発と展開

Docker (Linux と Windows) でサポートされている複数のプラットフォーム上で動作するアプリケーション (Web アプリまたはサービス) を目標としている場合、.NET Framework では Windows のみがサポートされているので、明らかに .NET 8 の方が適しています。

.NET 8 では、開発プラットフォームとして macOS もサポートされています。 ただし、コンテナーを Docker ホストに展開する場合、(現時点で) ホストは Linux または Windows をベースにしている必要があります。 たとえば、開発環境では Mac 上で動作する Linux VM を使用できます。

Visual Studio には Windows 用の統合開発環境 (IDE) が用意されています。また、Docker 開発をサポートしています。

Visual Studio for Mac は、macOS 上で実行する、Docker ベースのアプリケーションの開発をサポートする Xamarin Studio の進化版の IDE です。 このツールは、Mac コンピューターで作業していて、強力な IDE も使用したい開発者にとって好ましい選択肢です。

また、macOS、Linux、および Windows 上で Visual Studio Code を使用することもできます。 Visual Studio Code では、IntelliSense やデバッグを含め、.NET 8 が完全にサポートされています。 VS Code は軽量なエディターなので、Docker CLI や .NET CLI と組み合わせ、コンピューターでコンテナー化されたアプリケーションを開発することができます。 Sublime、Emacs、vi、オープンソースの OmniSharp プロジェクト (IntelliSense サポートも提供) など、ほとんどのサードパーティ製エディターで .NET 8 を対象にすることもできます。

IDE とエディターだけでなく、サポートされているすべてのプラットフォームで .NET CLI を使用できます。

新しい ("グリーン フィールド") プロジェクトにコンテナーを使用する

一般的に、コンテナーはマイクロサービス アーキテクチャと併用されますが、アーキテクチャ パターンに従う Web アプリやサービスをコンテナー化するために使用することもできます。 Windows コンテナーで .NET Framework を使用できますが、モジュール性があり、軽量な .NET 8 はコンテナーとマイクロサービス アーキテクチャに最適です。 コンテナーを作成して展開すると、そのイメージは .NET Framework の場合より .NET 8 の方がはるかに小さくなります。

マイクロサービスを作成してコンテナーに配置する

平易なプロセスを使用してマイクロサービス ベースのアプリケーション (コンテナーなし) を構築する場合は、従来の .NET Framework を使用できます。 この場合、.NET Framework は既にインストールされ、複数のプロセスで共有されているため、プロセスは軽量で起動も高速です。 ただし、コンテナーを使用している場合、従来の .NET Framework のイメージも Windows Server Core をベースにしているため、コンテナー上のマイクロサービスのアプローチには重くなりすぎます。 しかし、チームは、.NET Framework ユーザーのエクスペリエンスも向上させる機会を模索しています。 最近、Windows Server Core コンテナー イメージのサイズは、40% を下回るまで削減されています

一方、.NET 8 は軽量なので、コンテナーに基づくマイクロサービス指向のシステムを採用する場合は .NET 8 が最適です。 さらに、関連するコンテナー イメージ (Linux または Windows Nano Server 用) は軽量で小さいので、コンテナーも軽量で起動が高速になります。

マイクロサービスはできるだけ小さくなるように作られています。つまり、動作時には軽く、フットプリントは小さく、境界コンテキストは小さく (DDD、Domain-Driven Design を参照してください)、問題になる領域は小さく、開始と停止が高速になるように作られています。 このような要件を満たすには、.NET 8 コンテナー イメージのような小型でインスタンス化が高速なコンテナー イメージを使用する必要があります。

マイクロサービス アーキテクチャでは、サービスの境界を越えて、複数のテクノロジを組み合わせて使用することもできます。 このアプローチにより、他のマイクロサービスまたは Node.js、Python、Java、GoLang などのテクノロジを使用して開発されたサービスと連携して動作する新しいマイクロサービスについて、.NET 8 に徐々に移行することができます。

スケーラブルなシステムへの高密度の導入

コンテナーベースのシステムで可能な限り最高の密度、細分性、パフォーマンスが必要な場合は、.NET と ASP.NET Core が最適です。 ASP.NET Core は、従来の.NET Framework 内の ASP.NET よりも最大 10 倍高速で、Java サーブレット、Go、Node.js など、マイクロサービス用の他の一般的な業界テクノロジをリードしています。

このアプローチは、特に何百ものマイクロサービス (コンテナー) を実行している可能性があるマイクロサービス アーキテクチャに関連します。 Linux または Windows Nano 上の (.NET ランタイムに基づく) ASP.NET Core イメージを使用すると、はるかに少ない数のサーバーまたは VM でシステムを実行できるので、最終的にはインフラストラクチャとホスティングのコストを節約できます。