介绍
目标
熟悉使用 .NET 创建微服务的构建基块。
先决条件
完成时间
过去 15 分钟
方案
创建返回值列表的简单服务,然后在 Docker 容器中运行该服务。
安装 .NET SDK
若要开始生成 .NET 应用,请下载并安装 .NET SDK。
检查是否已正确安装所有内容
Terminal
dotnet --version
如果安装成功,应会看到输出版本 8.0.100 或更高版本:
如果一切正常,请选择下面的 继续 按钮以转到下一步。
遇到错误?
如果收到“未将‘dotnet’识别为内部或外部命令”错误,请确保已打开新的命令提示符。如果快速重启计算机没有解决问题,请使用“我遇到了问题”按钮以获取解决问题的帮助。
创建服务
Terminal
dotnet new webapi -o MyMicroservice --no-https
然后,导航到由上一个命令创建的新目录:
Terminal
cd MyMicroservice
这些命令分别代表什么?
dotnet
命令会创建一个类型为 webapi
的新应用程序(这是一个 REST API 终结点)。
-o
参数创建名为 MyMicroservice
的目录,用于存储应用。
--no-https
标志会创建一个应用,该应用将在没有 HTTPS 证书的情况下运行,以便保持部署简单。
使用 cd MyMicroservice
命令可进入新创建的应用目录。
生成的代码
已在 MyMicroservice
目录中创建了多个文件,以便为你提供可运行的简单服务,包括以下文件:
Program.cs
是入口点文件,包含在应用启动时加载的所有设置和配置,并具有一个简单的 API 代码,可返回未来五天的天气预报。它还会启动应用程序。
MyMycroservice.http
用于测试 ASP.NET Core 项目。
MyMicroservice.csproj
会定义应用面向的 .NET 版本、项目引用的库等。
Properties
目录中的 launchSettings.json
文件为本地开发环境定义不同的配置文件设置。创建项目时会自动分配 5000-5300 之间的端口号并将其保存在此文件上。
以下代码显示 Program.cs
文件的内容:
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);
}
选择下面的 继续 按钮以转到下一步。
遇到错误?
如果你收到类似于“模版 "ASP.NET Core Web API" 无法创建。无法创建模版。详细信息: 对路径 "C:\Windows\System32\MyMicroservice" 的访问被拒绝”的消息,请将当前目录更改为有权在其中新建文件夹的目录,然后尝试再次运行该命令。
如果在尝试创建项目时 Windows 找不到 SDK,且你确定已安装 SDK,则计算机可能存在 PATH 环境变量问题。请参阅此 Stack Overflow 帖子,获取如何诊断并解决此问题的说明。
如果无法解决遇到的问题,请选择下面的“我遇到了问题”按钮,以获取解决问题的帮助。
运行服务
应看到与以下内容类似的输出:
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 localhost:5020/weatherforecast
。
恭喜,你有简单服务正在运行!
在命令提示符上按 CTRL+C 以结束正在本地运行服务的 dotnet run
命令。
在终端上按 CTRL+C 以结束正在本地运行服务的 dotnet run
命令。
遇到错误?
如果收到类似 未找到网址为 http://localhost:5020 的信息,请确保正在查看应用程序的天气预报页面。URL 应该是 http://localhost:5020/weatherforecast,而不是 http://localhost:5020。
安装 Docker
Docker 是一个平台,让你能将应用及其配置和依赖项组合到单个独立的可部署的、称为容器的单元中。
如果已安装 Docker,请确保其版本为 23.0.0 或更高版本。
下载并安装
在可下载安装程序之前,将先要求你注册 Docker Store。
安装 Docker 后,可能会要求你注销以完成安装。
检查 Docker 是否已准备好使用
Terminal
docker --version
如果命令运行并显示一些版本信息,则 Docker 安装成功。
添加 Docker 元数据
要使用 Docker 映像运行,你需要使用一个 Dockerfile
,这是一个文本文件,其中包含如何将应用构建为 Docker 映像的说明。Docker 映像包含将应用作为 Docker 容器运行所需的一切。
返回到应用目录
由于在上一步中打开了新命令提示符,因此需要返回到创建服务的目录。
由于在上一步中打开了新终端,因此需要返回到创建服务的目录。
Terminal
cd MyMicroservice
添加 DockerFile
使用以下命令创建名为 Dockerfile
的文件:
Terminal
touch Dockerfile
Terminal
fsutil file createnew Dockerfile 0
然后,可以手动或使用此命令在喜欢的文本编辑器中打开它:
Terminal
open Dockerfile
Terminal
start Dockerfile
在文本编辑器中将 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 文件
A .dockerignore 文件减少了用作 `docker 生成` 一部分的文件集。更少的文件可使生成速度更快。
使用以下命令,创建名为“.dockerignore
”的文件(类似于 .gitignore
文件,如果你熟悉的话):
Terminal
touch .dockerignore
Terminal
fsutil file createnew .dockerignore 0
然后,可以手动或使用此命令在喜欢的文本编辑器中打开它:
Terminal
open .dockerignore
Terminal
start .dockerignore
在文本编辑器中将 .dockerignore
的内容替换为以下内容:
.dockerignore
Dockerfile
[b|B]in
[O|o]bj
创建 Docker 映像
运行以下命令:
Terminal
docker build -t mymicroservice .
docker build
命令使用 Dockerfile
构建Docker 映像。
-t mymicroservice
参数指示它将图像标记(命名)为 mymicroservice
。
- 最后一个参数告知它要使用哪个目录来查找
Dockerfile
(.
指定当前目录)。
- 此命令将下载并生成所有依赖项以创建 Docker 映像,此操作可能需要一些时间。
可以运行以下命令,以查看计算机上可用的所有映像的列表,包括刚刚创建的映像。
Terminal
docker images
运行 Docker 映像
可以使用以下命令在容器中运行应用:
Terminal
docker run -it --rm -p 3000:8080 --name mymicroservicecontainer mymicroservice
可以浏览到以下 URL 以访问在容器中运行的应用程序: http://localhost:3000/weatherforecast
(可选)可以使用以下命令查看在单独的命令提示符中运行的容器:
(可选)可以使用以下命令查看在单独终端窗口中运行的容器:
在命令提示符上按 CTRL+C,以结束在容器中运行服务的 docker run
命令。
在终端上按 CTRL+C 以结束正在容器中运行服务的 docker run
命令。
恭喜! 已成功创建了可以使用 Docker 容器进行部署和扩展的小型、独立服务。
这些是微服务的基本构建基块。
遇到错误?
如果收到类似于“错误”的消息: 连接过程中出错: 此错误可能表示 docker 守护程序未 运行,这可能表示你需要启动 Docker 应用程序。请检查 Docker 客户端是否正在通过运行 docker run hello-world
运行。这应该会拉取并运行映像。有关更多帮助,请参阅 Docker 文档 ,了解有关如何诊断和修复此问题的说明。
后续步骤
恭喜! 你已创建并在 Docker 容器中运行简单服务。
现在可以通过下一教程了解如何将微服务部署到云。
教程: 将微服务部署到 Azure
你可能还会关注...