.NET チュートリアル - 最初のマイクロサービス
イントロ
目的
.NET を使用してマイクロサービスを作成するための文書パーツに精通します。
前提条件
ありません。
macOS 12.0 以降のバージョン。
完了までの時間
15 分
シナリオ
値のリストを返す簡単なサービスを作成してから、Docker コンテナーでサービスを実行します。
.NET SDK のインストール
.NET アプリのビルドを開始するには、.NET SDK をダウンロードしてインストールします。
.NET 8 SDK x64 (Intel) のダウンロード
.NET 8 SDK Arm64 (Apple Silicon) のダウンロード
Apple M1 または M2 チップを搭載した Mac をお使いの場合は、Arm64 バージョンの SDK をインストールする必要があります。
すべてが正しくインストールされていることを確認する
インストールが完了したら、新しい コマンド プロンプトを開き、次のコマンドを実行します:
インストールが完了したら、新しい ターミナルを開き、次のコマンドを実行します:
dotnet --version
インストールが成功した場合、バージョン 8.0.100 以降が出力されます。
8.0.100
問題がなければ、下の [続行] を選択して次の手順に進みます。
エラーが発生しましたか?
"'dotnet' は内部コマンドまたは外部コマンドとして認識されていません" というエラーを受信した場合は、新しいコマンド プロンプトを開いていることを確認してください。コンピューターを再起動しても問題が解決しない場合は、[問題が発生しました] ボタンを使用して問題解決のためのサポートを受けてください。
サービスを作成する
コマンド プロンプトで、次のコマンドを実行してアプリを作成します:
ターミナルで、次のコマンドを実行してアプリを作成します:
dotnet new webapi -o MyMicroservice --no-https
次に、前のコマンドで作成された新しいディレクトリに移動します:
cd MyMicroservice
これらのコマンドにはどのような意味がありますか?
dotnet
コマンドは、タイプ webapi
(REST API エンドポイント) の 新しいアプリケーションを作成します。
-o
パラメーターでは、アプリが保存されるMyMicroservice
という名前のディレクトリを作成します。--no-https
フラグは、HTTPS 証明書なしで実行されるアプリを作成し、デプロイを簡単にします。
cd MyMicroservice
コマンドを実行すると、新しく作成されたアプリ ディレクトリに入れます。
生成されたコード
MyMicroservice
ディレクトリに次のファイルを含むいくつかのファイルが作成され、すぐに実行できるシンプルなサービスが用意されました。
Program.cs
はエントリ ポイント ファイルであり、アプリの起動時に読み込まれるすべての設定と構成が含まれ、次の 5 日間の天気予報を返す単純な API のコードが含まれています。また、アプリケーションも起動します。MyMycroservice.http
は、ASP.NET Core プロジェクトのテストに使用されます。MyMicroservice.csproj
は、アプリがターゲットにする .NET のバージョン、プロジェクトが参照するライブラリなどを定義します。Properties
内のlaunchSettings.json
は、ローカル開発環境のさまざまなプロファイル設定を定義します。5000 - 5300 の範囲のポート番号は、プロジェクトの作成時に自動的に割り当てられ、このファイルに保存されます。
次のコードは、Program.cs
ファイルの内容を示しています。
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
var summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
app.MapGet("/weatherforecast", () =>
{
var forecast = Enumerable.Range(1, 5).Select(index =>
new WeatherForecast
(
DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
Random.Shared.Next(-20, 55),
summaries[Random.Shared.Next(summaries.Length)]
))
.ToArray();
return forecast;
})
.WithName("GetWeatherForecast")
.WithOpenApi();
app.Run();
record WeatherForecast(DateOnly Date, int TemperatureC, string? Summary)
{
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
}
下の [続行] を選択して、次の手順に進みます。
エラーが発生しましたか?
Template "ASP.NET Core Web API" のようなメッセージを受信した場合は、作成できませんでした。テンプレートを作成できませんでした。詳細: パス 'C:\Windows\System32\MyMicroservice' へのアクセスが拒否されました、現在のディレクトリを新しいフォルダーを作成するためのアクセス許可を持つディレクトリに変更してから、コマンドを再実行してください。
SDK がインストールされていることが確実でありながら、プロジェクトの作成中に SDK が見つからない場合は、マシンの PATH 環境変数に問題がある可能性があります。この問題を診断して解決する方法については、 Stack Overflow 投稿 の手順をご覧ください。
発生している問題を解決できない場合は、[I ran into an issue] ボタンを選択して、問題の修正方法を確認してください。
サービスを実行する
コマンドプロンプトで、次のコマンドを実行します:
ターミナルで、次のコマンドを実行します:
dotnet run
次のような出力が表示されます:
Building...
info: Microsoft.Hosting.Lifetime[14]
Now listening on: http://localhost:5020
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
Content root path: C:\Users\Ana\MyMicroservice
アプリが http://localhost:<port number> でリッスンしていることを表示するまで待ってから、ブラウザーを開き、http://localhost:<port number>/weatherforecast に移動します。
この例では、ポート 5020 でリッスンしていることを示したため、次の図は URL localhost:5020/weatherforecast
を示しています。
おめでとうございます。簡単なサービスを実行しています。
コマンド プロンプトで CTRL+C を押して、ローカルでサービスを実行している dotnet run
コマンドを終了します。
ターミナルで CTRL+C を押して、ローカルでサービスを実行している dotnet run
コマンドを終了します。
エラーが発生しましたか?
Web アドレスの Web ページが見つかりませんでした: http://localhost:5020 のようなメッセージが表示された場合は、アプリケーションの天気予報ページが表示されていることを確認します。URL は http://localhost:5020 だけでなく http://localhost:5020/weatherforecast のようになります。
Docker をインストールする
Docker は、アプリとその構成や依存関係を、コンテナーと呼ばれる独立して展開可能な単一の単位にまとめることができるプラットフォームです。
Docker が既にインストールされている場合は、バージョン 23.0.0 以降であることを確認してください。
ダウンロードしてインストール
インストーラーをダウンロードするには、Docker ストアを登録するように求められます。
既定で、Docker は Windows 上の Linux コンテナーを使用します。インストーラーでメッセージが表示されたら、この構成設定をそのままにしておきます。
Docker のインストール後、インストールを完了するためにサインアウトを求められる場合があります。
Docker を使用する準備ができていることを確認する
インストールが完了したら、新しい コマンド プロンプトを開き、次のコマンドを実行します:
インストールが完了したら、新しい ターミナルを開き、次のコマンドを実行します:
docker --version
コマンドが実行され、一部のバージョン情報が表示されると、Docker が正常にインストールされます。
Docker メタデータを追加する
Docker イメージで実行するには、Dockerfile
(Docker イメージとしてアプリをビルドする手順を含むテキスト ファイル) が必要です。Docker イメージには、Docker コンテナーとしてアプリを実行するために必要なすものすべてが含まれています。
アプリ ディレクトリに戻る
前の手順で新しいコマンドプロンプトを開いたため、サービスを作成したディレクトリに戻る必要があります。
前の手順で新しいターミナルを開いたため、サービスを作成したディレクトリに戻る必要があります。
cd MyMicroservice
DockerFile を追加する
次のコマンドを使用して、Dockerfile
というファイルを作成します。
touch Dockerfile
fsutil file createnew Dockerfile 0
その後、お好みのテキスト エディターで開くことができます。
次に、手動で、または次のコマンドを使用して、任意のテキストエディターで開くことができます。
open Dockerfile
start Dockerfile
テキスト エディターで Dockerfile
のコンテンツを次のように置き換えます:
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY MyMicroservice.csproj .
RUN dotnet restore
COPY . .
RUN dotnet publish -c release -o /app
FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /app
COPY --from=build /app .
ENTRYPOINT ["dotnet", "MyMicroservice.dll"]
注意: ファイル名は Dockerfile
であり、Dockerfile.txt
などの他の名前ではないことを確認してください。
オプション: dockerignore ファイルを追加する
.dockerignore ファイルを使用すると、' docker build ' の一部として使用されるファイル一式を減らすことができます。ファイル数を減らすと、ビルドが高速になります。
このコマンドを使用して、.dockerignore
ファイル (これは、使い慣れた .gitignore
ファイルに類似しています) というファイルを作成します。
touch .dockerignore
fsutil file createnew .dockerignore 0
その後、お好みのテキスト エディターで開くことができます。
次に、手動で、または次のコマンドを使用して、任意のテキストエディターで開くことができます。
open .dockerignore
start .dockerignore
テキスト エディターで .dockerignore
のコンテンツを次のように置き換えます:
Dockerfile
[b|B]in
[O|o]bj
Docker イメージを作成する
次のコマンドを実行します:
docker build -t mymicroservice .
docker build
コマンドは、Dockerfile
を使用して Docker イメージをビルドします。
-t mymicroservice
パラメーターは、Docker イメージにタグ (名前) 「mymicroservice
」を付けるように指示します。- 最後のパラメーターは、
Dockerfile
を見つけるために使用するディレクトリを指示します (.
は現在のディレクトリを指定します)。 - このコマンドは、Docker イメージを作成するためのすべての依存ファイルをダウンロードしてビルドするため、時間がかかる場合があります。
次のコマンドを実行すると、作成したばかりのものを含め、マシンで利用可能なすべての画像の一覧が表示されます。
docker images
Docker イメージを実行する
次のコマンドを使用して、コンテナーでアプリを実行できます:
docker run -it --rm -p 3000:8080 --name mymicroservicecontainer mymicroservice
次の URL を参照して、コンテナー内で実行されているアプリケーションにアクセスできます: http://localhost:3000/weatherforecast
必要に応じて、次のコマンドを使用して、別のコマンド プロンプトで実行されているコンテナーを表示できます:
必要に応じて、次のコマンドを使用して、別々のターミナル ウィンドウで実行されているコンテナーを表示できます:
docker ps
コマンド プロンプトで CTRL+C を押して、コンテナー内でサービスを実行している docker run
コマンドを終了します。
ターミナルで CTRL+C を押して、コンテナー内でサービスを実行している docker run
コマンドを終了します。
おめでとうございます。Docker コンテナーを使用してデプロイおよびスケーリングできる小規模な独立したサービスが正常に作成されました。
マイクロサービスの基本的なビルド ブロックです。
エラーが発生しましたか?
エラー: 接続中にエラーが発生した場合: このエラーは、docker デーモンが実行されていないことを示している可能性があります。 のようなメッセージが表示された場合、Docker アプリケーションを起動する必要があることを示している可能性があります。Docker クライアントが実行されていることを確認するには、docker run hello-world
を実行します。これにより、イメージがプルされて実行されます。詳細については、Docker のドキュメント を参照して、この問題を診断して修正する方法を確認してください。
次の手順
おめでとうございます。簡単なサービスを作成し、Docker コンテナーで実行しました。
これで、次のチュートリアルでマイクロサービスをクラウドにデプロイする方法を学ぶことができます。
チュートリアル: Azure にマイクロサービスをデプロイする
あなたは下記にもご興味がおありかもしれません...