IRONSOFTWAREHOME

コンテナとDocker Hubへのデプロイ - C#でサンプルAPIを構築するコース

コンテナとDocker Hubへのデプロイ - C#でのサンプルAPI構築コース

Tim Corey

23分51秒

.NET CoreアプリケーションをDockerコンテナにデプロイすることは、現代の開発者にとって重要なスキルです。 コンテナは、不変のインフラストラクチャ、容易な配布、軽量な実行環境を提供します。 この詳細なガイドでは、サンプルAPIをDockerコンテナにデプロイし、Tim Coreyの包括的なビデオチュートリアルで実演された手順に従ってDocker Hubにプッシュする手順を説明します:"Deploying to a Container and Docker Hub - Building a Sample API in C#".

それでは、簡単にフォローできるように、特定のタイムスタンプを参照しながら、ステップ・バイ・ステップでプロセスを探っていきましょう。 このガイドには、.NET publish、docker runコマンド、ベースイメージ、ランタイムイメージ、コンテナイメージといった用語の使い方が含まれており、Dockerを使用して.NETアプリケーションをデプロイする際の重要な概念です。

サンプルAPIの作成と理解

ビデオの冒頭で、ティムはウェブ開発を学ぶ際のサンプルアプリの有用性を強調しています。 このアプリは、/courses や /health のようなエンドポイントを含み、ヘルスチェックの劣化のような現実世界の問題をシミュレートし、ローカルマシンとリモートサーバーの両方で実行できるように設計されています。

これは.NET Coreアプリ(正確にはASP.NET Core最小API)であり、Dockerコンテナを通して簡単に実行し、テストすることができます。

ローカルでDockerをセットアップする

Tim氏は、Docker Desktopを使用して、Dockerがローカルマシンにインストールされていることを確認します。ローカルにDockerがインストールされていなくても、Docker Hubに直接パブリッシュすることは可能ですが、デモのためにローカルへのデプロイから始めます。

彼は、プリインストールされた2つのDockerイメージを示しています:

  • 字幕用パーソナルツール

  • Microsoftの公式ASP.NET Coreベースイメージ:mcr.microsoft.com/dotnet/aspnet

このベースイメージは約328MBで、コンテナイメージの基盤として機能します。 MicrosoftはこれらのイメージをMCR(Microsoft Container Registry)でホストしており、LinuxコンテナとWindowsコンテナの両方をサポートしています。 このプロジェクトでは、Linuxが対象となるオペレーティングシステムです。

コンテナへのローカルパブリッシング

TimはAPIプロジェクトフォルダに移動し、コマンドラインで次のコマンドを実行します:

dotnet publish -p:PublishProfile=DefaultContainer

このコマンドは、.NET 8と.NET 9のビルトインコンテナサポートを使用するため、Dockerfileの必要性がなくなります。発行プロセスは適切なランタイムイメージを選択し、自己完結型のコンテナイメージを構築します。

以下は、その内容です:

  • プロジェクトファイル(.csproj)は、APIを構築するために使用されます。

  • 依存関係は .NET restore コマンドを使用して復元されます

  • 出力はパブリッシュフォルダ

  • DLLファイルを作成し、コンテナに埋め込みます。

出来上がった画像は約333MB(ベースより5MBだけ大きい)。

Dockerでイメージを実行する

イメージが作成されると、ティムはDocker Desktopを使ってコンテナを実行します。 内部的には、アプリはポート8080でリッスンします。Timは、ポート・コンフィギュレーションに0を入力することで、これをランダムなホスト・ポートにマッピングします。

コンテナはランダムな名前(elegant_hooverなど)で起動し、ブラウザを開くと、デフォルトのレスポンスとして "Hello World "を持つ動作中のAPIが表示されます。

Timは、/coursesと/healthをブラウズすることで、APIが機能していることを確認します。 ヘルスチェックエンドポイントは、本番環境のシナリオをシミュレートするのに便利です。

実行中のコンテナを表示するには、CLI で docker ps コマンドを使用できます。 Tim は、クリーンアップを実演するために、実行中のコンテナとイメージを後で削除します。

Docker Hubリポジトリの作成

次に、ティムはクラウド・デプロイメントのパートに移ります。 彼はDocker Hubアカウントにログインし、thesampleapiという名前のパブリックリポジトリを作成します。

Dockerイメージはここでプッシュされ、他の人がそれを使ってプルできるようになります:

docker pull timcorey/thesampleapi:latest

プロジェクトをDocker Hub用に設定する

APIのプロジェクトファイル内に、TimはDockerイメージをどこでどのように公開するかを定義するメタデータを追加します。 彼は次のコードブロックを追加します:

<ContainerRegistry>docker.io</ContainerRegistry>
<ContainerRepository>timcorey/thesampleapi</ContainerRepository>
<ContainerImageTags>1.0.0;latest</ContainerImageTags>
  • ContainerRegistry:ターゲットレジストリとしてDocker Hubを指定します。

  • ContainerRepository:Docker Hubリポジトリへのパス。

  • ContainerImageTags:バージョン管理と最新リリースのために画像にタグを付けます。

これは、将来的に多段階のビルドフローに対応するためのイメージの準備ですが、ティムは今のところ物事をシンプルに保っています。

Dockerハブに公開する

ティムはもう一度同じpublishコマンドを実行します:

dotnet publish -p:PublishProfile=DefaultContainer

最初は、.csprojファイルを保存し忘れたため、プッシュに失敗します。保存してコマンドを再実行すると、イメージはDocker Hubに正常にアップロードされました。

Docker Hubでは、最新と1.0.0の両方のタグがthesampleapiリポジトリの下に表示されます。 これらのタグを使用することで、特定のバージョンを引き出す際に柔軟性を持たせることができます。

Dockerハブからイメージをプルする

Timは、Dockerがインストールされたマシンからイメージを引き出す方法を示します:

docker pull timcorey/thesampleapi:latest

Dockerレイヤーキャッシングのおかげで、イメージのほとんどはベースイメージからすでに存在しているため、イメージはすぐにダウンロードされます。

イメージを実行するには

docker run -p 0:8080 timcorey/thesampleapi:latest

これは、ランダムなホスト・ポートを内部ポート8080にマッピングします。

新しいバージョンの画像を作成する

バージョン管理を示すために、Timは.csprojファイルを次のように編集します:

<ContainerImageTags>1.0.1;latest</ContainerImageTags>

そして、publishコマンドを再実行します:

dotnet publish -p:PublishProfile=DefaultContainer

現在、Docker Hubリポジトリには3つのタグが表示されています:

  • 1.0.0

  • 1.0.1

  • 最新版(現在は1.0.1を指しています)

ティムは、複数のタグがあるにもかかわらず、Dockerは重複したレイヤーを保存せず、個別のレイヤーによってディスク使用量を最適化すると説明しています。

ローカル開発のためのDockerイメージの使用

Tim氏は、一度Docker Hubにイメージをアップすれば、いつでもどのマシンでも実行できることを強調しています:

docker pull timcorey/thesampleapi:latest

次に、docker run コマンドを使ってそれを起動します。終了したら、次のコマンドでクリーンアップしてください:

docker ps           # Get container ID
docker stop <id>    # Stop the container
docker rm <id>      # Remove the container
docker rmi <image>  # Remove the image

このため、ローカルマシンを肥大化させることなく、オンデマンドの開発やテストに最適だと説明しています。

次は何?

ティムは次のステップとして、この同じAPIを仮想専用サーバー(VPS)にデプロイすることに言及して締めくくった。 彼は、ドメインをマッピングし、一般にアクセスできるようにコンテナを設定する手順を説明します。

結論ローカル ビルドからクラウド展開へ

ティム・コーリーのビデオガイドを使用しました:

  • .NET new console を使用して .NET Core API を構築しました

  • .NET restore と .NET publish を使用してビルドおよびデプロイしました

  • サンプルDockerfileなしでDockerコンテナを作成

  • Docker Hubにコンテナイメージをアップロード。

  • docker run を使用してコンテナをプルし、実行しました。

  • 管理されたタグと明確なイメージレイヤー

  • バージョン管理されたイメージを使用する本番環境用に準備

このワークフローは、Docker と .NET を中心に、スケーラブルでテスト可能、かつ共有可能なアプリケーションを構築するのに最適です。

Earn More by Sharing What You Love

Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Let's Stay in Touch!

Join our newsletter, you’ll get exclusive access on article updates. We value your privacy

Key in blue circle

無料の30日間トライアルキーをすぐに入手してください。

Your trial license will be sent to your email address

制限なし。100% ロック解除済み。クレジットカード不要。

bullet_checkedクレジットカードやアカウントの作成は不要です。制限なし。100% ロック解除済み。クレジットカード不要。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
義務のない相談を受ける
下記のフォームを記入するか、sales@ironsoftware.comにメールしてください。
あなたの詳細は常に守秘されます。
世界中の数百万人のエンジニアから信頼されています。
ライセンスはより安く
あなたの無料30日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。