介绍

本文的目的是:通过创建一个返回列表的简单服务,并在 Docker 容器中运行该服务,让您熟悉使用 .NET 创建微服务的构建过程。

安装 .NET SDK

要开始构建 .NET 应用程序,首先下载并安装 .NET Core SDK(软件开发工具包)。

根据操作系统的类型下载并安装对应版本的 .NET Core SDK v3.1:.NET SDK (64-位).NET SDK (32-位)

全部 .NET SDK 下载页面(Download .NET SDKs for Visual Studio):

https://dotnet.microsoft.com/download/visual-studio-sdks

检查安装是否正确

.NET SDK 安装完成后,打开一个命令提示符窗口并运行以下命令:

dotnet

如果命令运行时,打印出的信息是介绍如何使用 dotnet,说明安装正确。

创建您的服务

创建一个应用

在命令提示符窗口运行以下命令:

dotnet new webapi -o myMicroservice --no-https

cd myMicroservice

第一行中 dotnet 命令创建了一个 webapi(一个 REST API 终端)类型的“新”应用。

  • 参数 -o 创建一个名为 myMicroservice 的目录,用于存储应用程序。
  • 标记 --no-https 创建一个不需要 HTTPS 证书就可以运行的应用程序,以便简化部署。

使用 cd myMicroservice 命令进入新建应用程序的目录。

生成的代码

可以看到,在 myMicroservice 目录中创建了几个文件,为您提供了一个可以运行的简单服务。

  • myMicroservice.csproj 定义了项目引用的库等。
  • Startup.cs 包含应用程序启动时加载的所有设置和配置。
  • Controllers/WeatherForecastController.cs 有一个简单 API 的代码,可以返回未来 5 天的天气预报(模拟数据)。

Controllers/WeatherForecastController.cs 文件中代码:

[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]
public IEnumerable<WeatherForecast> Get()
{
var rng = new Random();
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = rng.Next(-20, 55),
Summary = Summaries[rng.Next(Summaries.Length)]
})
.ToArray();
}
}

运行您的服务

确保命令提示符定位在 myMicroservice 目录中,运行以下命令:

dotnet run

命令完成后,在浏览器中打开『http://localhost:5000/WeatherForecast』

恭喜,您已经运行了一个简单的服务。

安装 Docker

Docker 是一个平台,它可以让你将一个应用程序及其配置和依赖项组合成一个叫作容器的单独的、可独立部署的单元。

下载并安装 Docker Desktop

请参阅我之前翻译的 Docker 快速入门(一)

检查 Docker 是否可用

安装完成后,打开一个新的命令提示符窗口并运行以下命令:

docker --version

若命令运行后,显示一个版本信息,那么表示 Docker 安装成功了。

添加 Docker 元数据

要运行 Docker 镜像,需要一个 Dockerfile —— 一个文本文件,其中包含如何将应用构建为 Docker 镜像的指令。Docker 镜像包含将您的应用作为 Docker 容器运行所需的所有内容。

添加 Dockerfile 文件

myMicroservice 目录中,使用文本编辑器(推荐使用 Visual Studio Code)创建一个名为 Dockerfile 的文件,包含以下内容:

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /src
COPY myMicroservice.csproj .
RUN dotnet restore
COPY . .
RUN dotnet publish -c release -o /app FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
WORKDIR /app
COPY --from=build /app .
ENTRYPOINT ["dotnet", "myMicroservice.dll"]

注意:确保将文件命名为 Dockerfile(没有扩展名),而不是 Dockerfile.txt 或其他名称。

添加 .dockerignore 文件(可选的)

.dockerignore 文件可以减少 docker build 过程中使用的文件集,文件越少则构建越快。

在文本编辑器中创建一个名为 .dockerignore 的文件(这个文件类似于 .gitignore 文件,如果你熟悉的话),包含以下内容:

Dockerfile
[b|B]in
[O|o]bj

创建 Docker 镜像

运行以下命令:

docker build -t mymicroservice .

docker build 命令使用 Dockerfile 构建 Docker 镜像。

  • 参数 -t mymicroservice 告诉命令标记(或命名)镜像为 mymicroservice
  • 最后一个参数告诉命令使用哪个目录来查找 Dockerfile (. 指定当前目录)。

译者注:

如果是第一次在本机上构建基于 mcr.microsoft.com/dotnet/core/sdk:3.1mcr.microsoft.com/dotnet/core/aspnet:3.1 的镜像,构建 mymicroservice 镜像将会是一个漫长的过程,因为从官方 Docker 注册表拉取镜像实在是太慢了!耐心等待,终会成功的,我已经实践过了。

等待镜像构建完成,可以运行下面的命令来查看计算机上可用的所有镜像的列表,包括您刚刚创建的 mymicroservice 镜像。

docker images

运行 Docker 镜像

您可以使用下面的命令在容器中运行您的应用:

docker run -it --rm -p 3000:80 --name mymicroservicecontainer mymicroservice

可选地,您可以在单独的新的命令提示符窗口中输入下面的命令查看正在运行的容器:

docker ps

在运行 docker run 命令后,您可以在浏览器中输入 URL『http://localhost:3000/WeatherForecast』 来访问正在容器中运行的应用程序。

恭喜!您已经成功地创建了一个可以使用 Docker 容器部署和缩放的小型、独立的服务。

以上这些就是微服务的基本构建块。

作者 : Microsoft 官网

译者 : 技术译民

出品 : 技术译站

链接 : 英文原文

编写第一个 .NET 微服务的更多相关文章

  1. 服务注册中心之ZooKeeper系列(二) 实现一个简单微服务之间调用的例子

    上一篇文章简单介绍了ZooKeeper,讲了分布式中,每个微服务都会部署到多台服务器上,那服务之间的调用是怎么样的呢?如图: 1.集群A中的服务调用者如何发现集群B中的服务提供者呢? 2.集群A中的服 ...

  2. 【spring cloud】子模块module -->导入一个新的spring boot项目作为spring cloud的一个子模块微服务,怎么做/或者 每次导入一个新的spring boot项目,IDEA不识别子module,启动类无法启动/右下角没有蓝色图标

    如题:导入一个新的spring boot项目作为spring cloud的一个子模块微服务,怎么做 或者说每次导入一个新的spring boot项目,IDEA不识别,启动类无法启动,怎么解决 下面分别 ...

  3. eShopOnContainers 是一个基于微服务的.NET Core示例框架

    找到一个好的示例框架很难,但不是不可能.大多数是小型Todo风格的应用程序,通常基于SimpleCRUD.值得庆幸的是,Microsoft已经为eShopOnContainers创建了一个基于微服务的 ...

  4. 【spring cloud】一个ms微服务想要给注册中心eureka发现,需要满足这些条件,微服务不能被eureka注册中心发现的解决方案

    在spring cloud中,一个新的微服务想要被注册中心发现,需要注意几个地方: 1.pom.xml文件依赖中需要有这个依赖 spring boot 2.x 需要这个依赖 <dependenc ...

  5. 0202年,您真的需要Thrift这样一个RPC微服务框架来拯救一下传统HTTP接口(api)了

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_104 目前市面上类似Django的drf框架基于json的http接口解决方案大行其道,人们也热衷于在接口不多.系统与系统交互较少 ...

  6. WeText项目:一个基于.NET实现的DDD、CQRS与微服务架构的演示案例

    最近出于工作需要,了解了一下微服务架构(Microservice Architecture,MSA).我经过两周业余时间的努力,凭着自己对微服务架构的理解,从无到有,基于.NET打造了一个演示微服务架 ...

  7. 从 1.5 开始搭建一个微服务框架——日志追踪 traceId

    你好,我是悟空. 前言 最近在搭一个基础版的项目框架,基于 SpringCloud 微服务框架. 如果把 SpringCloud 这个框架当做 1,那么现在已经有的基础组件比如 swagger/log ...

  8. 微服务从设计到部署(二)使用 API 网关

    链接:https://github.com/oopsguy/microservices-from-design-to-deployment-chinese 译者:Oopsguy 本书的七个章节是关于设 ...

  9. 微服务的发现与注册--Eureka

    目录 服务提供者.服务消费者.服务发现组件三者之间的关系 Eureka 简介 Eureka Server Eureka Client 编写Eureka Server 将微服务注册到Eureka Ser ...

随机推荐

  1. Python人脸识别 + 手机推送,老板来了你就会收到短信提示

  2. 大学生可用来接单,利用Python实现教务系统扩容抢课!

    最近一学期一次的抢课大戏又来了,几家欢乐几家愁.O(∩_∩)O哈哈~(l我每次一选就过了hah,我还是有欧的时候滴).看着他们盯着教务系统就着急,何况我们那教务系统,不想说什么.emmm 想周围的朋友 ...

  3. Java日志框架(二)

    最流行的日志框架解决方案 按笔者理解,现在最流的日志框架解决方案莫过于SLF4J + LogBack.其有以下几个优点: LogBack 自身实现了 SLF4J 的日志接口,不需要 SLF4J 去做进 ...

  4. itest(爱测试) 开源一站式敏捷测试管理平台&极简项目管理,重大升级(接口测试)6.0.0 发布

    itest 简介 itest 开源敏捷测试管理,testOps 践行者,极简的任务管理,测试管理,缺陷管理,测试环境管理,接口测试5合1,又有丰富的统计分析.可按测试包分配测试用例执行,也可建测试迭代 ...

  5. 清晰详细、可测量、可达到、目标导向、有时间限定,SMART目标定制原则

    设定目标的时候需要考虑的问题,可以对已经设定的目标进行完善 S 目标是清晰的,明确的 M 目标可以衡量的,可以用来评估的 A 目标是可以达到的,但是达到的过程有难度 R 目标导向,设定的目标对大目标具 ...

  6. 单元测试报错:Mybatis中数据库语句错误

    org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.Persiste ...

  7. Bagging与随机森林(RF)算法原理总结

    Bagging与随机森林算法原理总结 在集成学习原理小结中,我们学习到了两个流派,一个是Boosting,它的特点是各个弱学习器之间存在依赖和关系,另一个是Bagging,它的特点是各个弱学习器之间没 ...

  8. Mybatis分页插件: pageHelper的使用及其原理解析

    在实际工作中,很进行列表查询的场景,我们往往都需要做两个步骤:1. 查询所需页数对应数据:2. 统计符合条件的数据总数:而这,又会导致我们必然至少要写2个sql进行操作.这无形中增加了我们的工作量,另 ...

  9. archlinux安装kde

    联网 dhcpcd & 配置国内源 打开文件 nano /etc/pacman.conf 在文件最后加上这段 [arhclinuxcn] Server = https://mirrors.tu ...

  10. Prefrontal cortex as a meta-reinforcement learning system

    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! Nature Neuroscience, 2018 Abstract 在过去的20年中,基于奖励的学习的神经科学研究已经集中在经典模型上, ...