イントロ
目的
.NET を使用してマイクロサービスを作成するための文書パーツに精通します。
前提条件
完了までの時間
15 分
シナリオ
値のリストを返す簡単なサービスを作成してから、Docker コンテナーでサービスを実行します。
.NET SDK のインストール
.NET アプリの構築を開始するには、.NET SDK (ソフトウェア開発キット) をダウンロードしてインストールします。
すべてが正しくインストールされていることを確認する
インストールが完了したら、新しい コマンド プロンプトを開き、次のコマンドを実行します:
インストールが完了したら、新しい ターミナルを開き、次のコマンドを実行します:
インストールが成功した場合、次のような出力が表示されます:
Command prompt
Usage: dotnet [options]
Usage: dotnet [path-to-application]
Options:
-h|--help Display help.
--info Display .NET information.
--list-sdks Display the installed SDKs.
--list-runtimes Display the installed runtimes.
path-to-application:
The path to an application .dll file to execute.
問題がなければ、下の [続行] を選択して次の手順に進みます。
エラーが発生しましたか?
“'dotnet' は内部コマンドまたは外部コマンドとして認識されていません ” というエラーを受信した場合は、新しい コマンド プロンプトを開いていることを確認してください。問題が解決しない場合は、[問題発生] ボタンを押して、問題解決のためのサポートを受けてください。
zsh: コマンドが見つかりません: dotnet エラーが発生した場合、新しい ターミナル ウィンドウが開かれていることを確認してください。問題を解決できない場合は、[問題が発生しました] ボタンを使用して、問題解決のためのサポートを受けてください。
dotnet: コマンドが見つかりません エラーが発生した場合は、新しい ターミナル ウィンドウが開かれていることを確認してください。問題を解決できない場合は、[問題が発生しました ] ボタンを使用して、問題の修正方法を確認してください。
サービスを作成する
コマンド プロンプトで、次のコマンドを実行してアプリを作成します:
ターミナルで、次のコマンドを実行してアプリを作成します:
Terminal Copy
dotnet new webapi -o MyMicroservice --no-https -f net6.0
次に、前のコマンドで作成された新しいディレクトリに移動します:
Terminal Copy
cd MyMicroservice
これらのコマンドにはどのような意味がありますか?
dotnet
コマンドは、タイプ webapi
(REST API エンドポイント) の new
アプリケーションを作成します。
-o
パラメーターでは、アプリが保存される MyMicroservice
という名前のディレクトリを作成します。
--no-https
フラグは、HTTPS 証明書なしで実行されるアプリを作成し、デプロイを簡単にします。
-f
パラメーターは、.NET 6 アプリケーションを作成していることを示します。
cd MyMicroservice
コマンドを実行すると、新しく作成されたアプリ ディレクトリに入れます。
生成されたコード
MyMicroservice
ディレクトリにいくつかのファイルが作成され、実行の準備が整ったシンプルなサービスが用意されました。
MyMicroservice.csproj
は、プロジェクトが参照するライブラリなどを定義します。
Program.cs
には、アプリの起動時に読み込まれるすべての設定や構成が含まれます。
Controllers/WeatherForecastController.cs
には、5 日先までの天気予報を返すシンプルな API 用コードがあります。
Properties
内の launchSettings.json
は、ローカル開発環境のさまざまなプロファイル設定を定義します。5000 - 5300 の範囲のポート番号は、プロジェクトの作成時に自動的に割り当てられ、このファイルに保存されます。
次のコードは、Controllers
ディレクトリにあるWeatherForecastController.cs
ファイルの内容を示しています:
WeatherForecastController.cs
using Microsoft.AspNetCore.Mvc;
namespace MyMicroservice.Controllers;
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
private readonly ILogger<WeatherForecastController> _logger;
public WeatherForecastController(ILogger<WeatherForecastController> logger)
{
_logger = logger;
}
[HttpGet(Name = "GetWeatherForecast")]
public IEnumerable<WeatherForecast> Get()
{
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[rng.Next(Summaries.Length)]
})
.ToArray();
}
}
下の [続行] を選択して、次の手順に進みます。
エラーが発生しましたか?
Template "ASP.NET Core Web API" could not be created. Failed to create template. Details: Access to the path 'C:\Windows\System32\MyMicroservice' is denied
のようなメッセージが表示される場合は、現在のディレクトリを、新しいフォルダーを作成するためのアクセス許可を持つディレクトリに変更してから、コマンドを再実行してください。
SDK がインストールされていることが確実でありながら、プロジェクトの作成中に SDK が見つからない場合は、マシンの PATH 環境変数に問題がある可能性があります。この問題を診断して解決する方法については、 Stack Overflow 投稿 の手順をご覧ください。
発生している問題を解決できない場合は、[I ran into an issue] ボタンを選択して、問題の修正方法を確認してください。
サービスを実行する
次のような出力が表示されます:
Command prompt
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 http://localhost:5020/WeatherForecast
を示しています。
おめでとうございます。簡単なサービスを実行しています。
コマンド プロンプトで CTRL +C を押して、ローカルでサービスを実行している dotnet run
コマンドを終了します。
ターミナルで CTRL +C を押して、ローカルでサービスを実行している dotnet run
コマンドを終了します。
Docker をインストールする
Docker は、アプリとその構成や依存関係を、コンテナーと呼ばれる独立して展開可能な単一の単位にまとめることができるプラットフォームです。
既に Docker がインストールされている場合は、バージョン18.09 以上であることを確認してください。
ダウンロードしてインストール
インストーラーをダウンロードするには、Docker ストアを登録するように求められます。
Docker のインストール後、インストールを完了するためにサインアウトを求められる場合があります。
Docker を使用する準備ができていることを確認する
インストールが完了したら、新しい コマンド プロンプトを開き、次のコマンドを実行します:
インストールが完了したら、新しい ターミナルを開き、次のコマンドを実行します:
Terminal Copy
docker --version
コマンドが実行され、一部のバージョン情報が表示されると、Docker が正常にインストールされます。
Docker メタデータを追加する
Docker イメージで実行するには、Dockerfile
(Docker イメージとしてアプリをビルドする手順を含むテキスト ファイル) が必要です。Docker イメージには、Docker コンテナーとしてアプリを実行するために必要なすものすべてが含まれています。
アプリ ディレクトリに戻る
前の手順で新しいコマンドプロンプトを開いたため、サービスを作成したディレクトリに戻る必要があります。
前の手順で新しいターミナルを開いたため、サービスを作成したディレクトリに戻る必要があります。
Terminal Copy
cd MyMicroservice
DockerFile を追加する
次のコマンドを使用して、Dockerfile
というファイルを作成します。
Terminal Copy
touch Dockerfile
Terminal Copy
fsutil file createnew Dockerfile 0
その後、お好みのテキスト エディターで開くことができます。
次に、手動で、または次のコマンドを使用して、任意のテキストエディターで開くことができます。
Terminal Copy
open Dockerfile
Terminal Copy
start Dockerfile
テキスト エディターで Dockerfile
のコンテンツを次のように置き換えます:
Dockerfile Copy
FROM mcr.microsoft.com/dotnet/sdk:6.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:6.0
WORKDIR /app
COPY --from=build /app .
ENTRYPOINT ["dotnet", "MyMicroservice.dll"]
注意: ファイル名は Dockerfile
であり、Dockerfile.txt
などの他の名前ではないことを確認してください。
オプション: dockerignore ファイルを追加する
.dockerignore ファイルを使用すると、' docker build ' の一部として使用されるファイル一式を減らすことができます。ファイル数を減らすと、ビルドが高速になります。
このコマンドを使用して、.dockerignore
ファイル (これは、使い慣れた .gitignore
ファイルに類似しています) というファイルを作成します。
Terminal Copy
touch .dockerignore
Terminal Copy
fsutil file createnew .dockerignore 0
その後、お好みのテキスト エディターで開くことができます。
次に、手動で、または次のコマンドを使用して、任意のテキストエディターで開くことができます。
Terminal Copy
open .dockerignore
Terminal Copy
start .dockerignore
テキスト エディターで .dockerignore
のコンテンツを次のように置き換えます:
.dockerignore Copy
Dockerfile
[b|B]in
[O|o]bj
Docker イメージを作成する
次のコマンドを実行します:
Terminal Copy
docker build -t mymicroservice .
docker build
コマンドは、Dockerfile
を使用して Docker イメージをビルドします。
-t mymicroservice
パラメーターは、Docker イメージにタグ (名前) 「mymicroservice
」を付けるように指示します。
最後のパラメーターは、Dockerfile
を見つけるために使用するディレクトリを指示します (.
は現在のディレクトリを指定します)。
このコマンドは、Docker イメージを作成するためのすべての依存ファイルをダウンロードしてビルドするため、時間がかかる場合があります。
次のコマンドを実行すると、作成したばかりのものを含め、マシンで利用可能なすべての画像の一覧が表示されます。
Terminal Copy
docker images
Docker イメージを実行する
次のコマンドを使用して、コンテナーでアプリを実行できます:
Terminal Copy
docker run -it --rm -p 3000:80 --name mymicroservicecontainer mymicroservice
次の URL を参照して、コンテナー内で実行されているアプリケーションにアクセスできます: http://localhost:3000/WeatherForecast
必要に応じて、次のコマンドを使用して、別のコマンド プロンプトで実行されているコンテナーを表示できます:
必要に応じて、次のコマンドを使用して、別々のターミナル ウィンドウで実行されているコンテナーを表示できます:
コマンド プロンプトで CTRL +C を押して、コンテナー内でサービスを実行している docker run
コマンドを終了します。
ターミナルで CTRL +C を押して、コンテナー内でサービスを実行している docker run
コマンドを終了します。
おめでとうございます。Docker コンテナーを使用してデプロイおよびスケーリングできる小規模な独立したサービスが正常に作成されました。
マイクロサービスの基本的なビルド ブロックです。