购买域名的网站,如何用dw制作网页框架,html5可以做网站吗,平面设计培训机构价位写在前面在微服务架构中#xff0c;ApiGateway起到了承前启后#xff0c;不仅可以根据客户端进行分类#xff0c;也可以根据功能业务进行分类#xff0c;而且对于服务调用服务也起到了很好的接口作用。目前在各个云端中#xff0c;基本上都提供了ApiGateway的功能#xf… 写在前面在微服务架构中ApiGateway起到了承前启后不仅可以根据客户端进行分类也可以根据功能业务进行分类而且对于服务调用服务也起到了很好的接口作用。目前在各个云端中基本上都提供了ApiGateway的功能付费功能通过SDK或者在线进行配置。在Java体系中有Zuul和基于openrestyKong都是比较著名的。在.Net体系中目前比较热门的短短1年时间已经1000stars了Ocelot这是一个非常优秀的基于 .Net Core的Api网关开源项目我们的在队长也参与了开发过年前又被纳入了微软eShop微服务架构Demo项目中作为其Api网关目前正在整合中有兴趣可以关注项目中新的的Ocelot Branch。基本的使用方式在园中已有博主写过了不过内容是之前版本的新版本稍微有点不同还是建议大家看文档。通过文档我们了解Ocelot是通过一个json文件进行配置的所以在使用的时候我们只需要修改这个json文件就可以了每次为不同的ApiGateway创建不同的项目比较麻烦So今天来讲下如何把Ocelot做成一个Docker镜像这样使用的时候只需要输入一条docker指令即可。今天的Dockerfile我是Fork了Ocelot项目后在自己的Branch中弄的直接是项目引用这只是范例而已你可以重新创建一个专门的项目通过Nuget管理添加对Ocelot的引用。创建Dockerfile代码Dockerfile只是一个文本文件它每一行代表Docker镜像的一个layer每一行由命令加参数组成我们通过编写简单的命令就能使用docker工具生成docker镜像。首先你要在项目中创建Dockerfile请记住把你的Dockerfile放在sln目录下因为Dockerfile文件的build环境是按照你这个文件的目录来的切记博主之前花了N天才发现这个弱智的问题。docker command对文件名对大小写敏感。直接上代码FROM microsoft/aspnetcore:2.0 AS base #基于asp.net core 2.0镜像WORKDIR /app
EXPOSE 80# 先使用asp.net core build镜像然后复制项目到/src目录FROM microsoft/aspnetcore-build:2.0 AS build
WORKDIR /src
COPY *.sln ./
COPY demos/ApiGateway.Web/ApiGateway.Web.csproj demos/ApiGateway.Web/
COPY src/Ocelot/Ocelot.csproj src/Ocelot/RUN dotnet restoreCOPY . .
WORKDIR /src/demos/ApiGateway.Web
RUN dotnet add package BuildBundlerMinifier#这里添加了对bundle的支持你可以不使用因为我更改了样式所以这里加上了这个。RUN dotnet restore
RUN dotnet build -c Release -o /app# 编译以后我们进行发布并直接复制到app目录FROM build AS publish
RUN dotnet publish -c Release -o /app# 设定app目录为工作目录FROM base AS final
WORKDIR /app
COPY --frompublish /app .# 挂载/app/configurations目录VOLUME /app/ConfigurationsENTRYPOINT [dotnet, ApiGateway.Web.dll]上面就是我的Dockerfile文件了我在项目中并没有把configuration.json文件放到项目根目录而是另外创建了一个Configurations目录这样我挂载目录可以在多个容器中共享数据。生成Docker镜像如果你的机器上装了Docker那可以通过命令工具在项目的根目录运行docker build -t myocelot:v1 .注意这个命令后的.一定不要忘记哦如果你机器上没有安装Docker也没有关系可以通过Docker仓库或者阿里云的容器管理进行生成他们都是免费的博主使用的是阿里云容器管理创建的这样每次代码改动它会自动生成新的镜像。运行容器当我们有了镜像后就可以运行容器了因为博主用的是阿里云容器管理所以我需要先把镜像pull到运行环境我用的是阿里云ECSdocker pull registry.cn-hangzhou.aliyuncs.com/jamesying/ocelot-demo
docker tag registry.cn-hangzhou.aliyuncs.com/jamesying/ocelot-demo myocelot:v1博主通过pull命令拉了镜像后又通过tag命令重新命名了tagname。随后我们创建一个ocelot的配置文件目录,并创建configurations.json文件mkdir /home/ocelot
touch /home/ocelot/configurations.json下面通过vi工具配置你自己的config下面是博主的{ReRoutes: [{DownstreamPathTemplate: /api/values/{id},DownstreamScheme: http,DownstreamHostAndPorts: [{Host: localhost,Port: 6002},{Host: localhost,Port: 6001}],LoadBalancer: RoundRobin,UpstreamPathTemplate: /api/v1/values/{id},DownstreamHealthcheckPath: /hc?apikeytestapi,UpstreamHttpMethod: [ GET, Put, Delete ]}],GlobalConfiguration: {}
}后面我们来运行容器docker run --name myocelot -p 6008:80 -v /home/ocelot:/app/configurations -d ocelot:v1成功运行以后我们就可以通过6008端口访问了你可以通过 http://ocelot.jcsoft.xyz:6008 看下Demo。下图为演示截图写在最后为什么会有这个镜像呢因为通过镜像生成很简单而且配置文件更改后只需要docker restart myocelot就能重新加载非常简便。今天的内容很简单但很实用当然这个镜像还是有点欠缺的因为Ocelot有很多功能还需要在Startup.cs中注册一些service才可以使用博主有个想法弄个专门的Ocelot Demo只需要通过config文件就能自动注册相应服务。或许你从Demo中看到了楼主对Ocelot的改动楼主增加了 DownstreamHealthcheckPath属性这个是为了对下游服务器进行Healthcheck的而且楼主也PR给了Ocelot的项目负责人不过Tom不太清楚这个属性有何用所以我准备做个Demo给他看下这个属性很有用除了可以通过试图查看下游服务器状态同时也可以在LoadBalance的时候把无效的服务器给忽略掉。大家觉得Healthcheck是否有必要呢相关文章Ocelot——初识基于.Net Core的API网关Ocelot API网关的实现剖析微服务网关OcelotAPI网关Ocelot 使用Polly 处理部分失败问题谈谈微服务中的 API 网关API GatewayOcelot网关Ocelot统一权限验证应用监控怎么做ASP.NET Core之跨平台的实时性能监控.Net Core 2.0 InfluxDBGrafanaApp Metrics 实现跨平台的实时性能监控应用程序的8个关键性能指标以及测量方法使用Metrics监控应用程序的性能下一个计划 : .NET/.NET Core应用性能管理Ocelot监控Ocelot 集成Butterfly 实现分布式跟踪原文https://www.cnblogs.com/inday/p/create-a-ocelot-docker-image.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com