.NET CLIでC#アプリケーションを簡単にコンテナ化する
コンテナは強力なツールですが、多くの開発者にとって、C#アプリケーションをコンテナに入れるというアイデアは圧倒的に難しく感じられます。 Dockerファイルのセットアップと依存関係の手動処理は複雑です。 しかし、ティム・コーリーがビデオで説明しているように、.NET CLIはこのプロセスを簡素化し、開発者がDockerファイルを必要とせずにアプリケーションをコンテナ化できるようにします。
この記事では、Tim氏のビデオ"Containerize Your C# Application Easily with the .NET CLI"のステップバイステップのアプローチを使用して、C#アプリケーションのコンテナ化について詳しく見ていきます。Timのガイダンスに従うことで、.NETアプリケーションをDockerコンテナに簡単に公開する方法を理解できます。
コンテナ用.NET CLI入門
ビデオの冒頭で、ティムはコンテナ化の必要性について説明しています。 コンテナは素晴らしいツールですが、Dockerfileをセットアップして正しく設定するプロセスは複雑です。
手動でDockerfileを作成する代わりに、Timは.NET CLIを使った簡単なアプローチを紹介します。 この方法により、開発者はDockerfileを手動で記述することなく、コンテナ化されたアプリケーションを作成することができます。
ティムはまた、このビデオは、技術的なトピックを迅速かつ効果的に紹介することに重点を置いた10分トレーニングシリーズの一部であることを明らかにしています。
アプリケーションのセットアップ
Timはまず、最小限のWeb APIアプリケーションを例に挙げて説明します。 アプリケーションには、いくつかのデータを返す/messagesという単一のエンドポイントが含まれています。
コンテナ化する前のアプリケーションの動作を示すために、Tim はローカルでアプリケーションを実行します。 彼は/messagesエンドポイントにアクセスすることで、コンテナ外で正しく動作することを確認します。
また、コンテナ化を進める前に、次のことも確認している:
- Dockerは彼のマシンにインストールされ、実行されています。
- スタート時点では、既存のDockerイメージやコンテナはありません。
これにより、新しいコンテナが作成されたときに、変更点が明確にわかるようになります。
コンテナイゼーションの準備
アプリケーションをコンテナ化するために、ティムはプロジェクトディレクトリ内のコマンドラインに移動する。 そして、次のコマンドを実行する:
dotnet publish -o:Linux -a:x64 -p:PublishProfile=DefaultContainer -c:Release
ティムはコマンドの各パートを分解します:
-o:Linux→ Linuxベースのコンテナ用にアプリケーションを公開します。-a:x64→ アーキテクチャを64ビットとして指定します。-p:PublishProfile=DefaultContainer→ デフォルトのコンテナ設定を使用します。-c:Release→ アプリをリリースモードで公開してパフォーマンスを向上させます。
Tim氏は、Windowsコンテナは主に.NET Frameworkアプリケーションのブリッジとして機能するため、WindowsコンテナよりもLinuxコンテナが好まれることを強調しています。
コンテナの公開と作成
Publishコマンドを実行すると、.NET CLIが自動的に必要な設定を決定し、すべてをコンテナにパッケージ化するとTimは説明する。 彼はこう指摘する:
- この方法ではDockerfileは必要ありません。
- このプロセスでは、アプリケーションを構築し、1つのステップでコンテナ化します。
- ベースイメージは、Microsoft for .NET 8ランタイムコンテナを使用しています。
公開後にDocker Desktopを確認し、新しいコンテナイメージbackground-demoが作成されたことを確認します。 初期コンテナサイズは221MBです。
ティムは、このサイズは後で縮小できると視聴者を安心させています。
コンテナの実行
コンテナ化されたアプリケーションをテストするために、Tim氏はDocker Desktopから直接コンテナを起動します。まだ実行中のコンテナはないため、彼は "Run "をクリックし、オプションの設定を行います:
- 彼は、コンテナの内部ポート(ランダムに割り当てられる)をホストマシンのポート8080にマッピングする。
起動後、ウェブブラウザを使ってアプリケーションにアクセスする。 最初はルートURLにアクセスすると404エラーが出ますが、/messagesに移動すると期待されたデータが正常に表示されます。
ティムは重要なポイントを強調しています:
- アプリケーションはコンテナ内のUTCタイムで実行されるため、ローカルマシンのタイムゾーンとは異なる場合があります。
また、このアプリケーションはリリースモードで公開されているため、Swagger UIはデフォルトで無効になっています。
コンテナ サイズの最適化
現時点では、デフォルトのコンテナ・サイズは221MBで、ティムもかなり大きいと認めている。 サイズを小さくするために、ベースとなる画像を薄くしている。
jammy-chiseled、より小さなUbuntuベースのイメージに設定します。
builder.Services.Configure<ContainerOptions>(options => options.ContainerFamily = "jammy-chiseled");builder.Services.Configure<ContainerOptions>(options => options.ContainerFamily = "jammy-chiseled");その後、publish コマンドを再実行し、コンテナを再構築した後、イメージのサイズを再度チェックする。
新しい画像サイズは113MBで、約100MBの削減となります! サイズは小さくなりますが、アプリケーションの機能は同じです。
コンテナーの削除と再作成
Timは、ワークスペースをクリーンアップするためにコンテナを削除するデモを行っています。 しかし、Dockerイメージは利用可能なままなので、必要に応じてコンテナを再作成することができます。
彼は、一度コンテナが構築されれば、それが可能であることを強調している:
- 開発とテストのためにローカルで実行します。
- Docker HubやAzure Container Registryのようなコンテナレジストリにプッシュします。
- クラウド展開されたウェブアプリケーションのベースとして使用されます。
結論と最終的な考え
Timは、コンテナ化に.NET CLIを使用する主な利点を強化することで、ビデオを締めくくります:
1.Dockerファイルは不要 - .NET CLIがすべて自動的に処理します。 2.迅速で簡単なプロセス - たった1つのコマンドで、アプリケーションをコンテナ化できます。
- より小さく最適化されたイメージ –
jammy-chiseledを使用することでコンテナのサイズを削減します。 4.シームレスなデプロイ - コンテナは、さまざまなクラウドサービスにプッシュすることができます。
最終的な考え
.NET CLIを使用したC#アプリケーションのコンテナ化に対するTimのアプローチは、シンプル、迅速、かつ効果的です。彼の方法に従うことで、開発者はDockerの幅広い知識を必要とせずにコンテナを作成し、最適化することができます。
Linuxコンテナ、最適化されたベースイメージ、合理化されたパブリッシングコマンドを活用することで、開発者は最小限の労力で効率的にアプリケーションをコンテナ化することができます。
より深く知りたい方は、ティム・コーリーのビデオをぜひご覧ください。 また、全プロセスの明確なステップバイステップのウォークスルーを提供します。

