社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  docker

Dapr牵手.NET学习笔记:用docker-compose部署服务

dotNET跨平台 • 4 年前 • 467 次点击  

上一篇聊到用两个物理机(一个win,一个mac)来部署dapr和服务 ,实现order调用pay的负载均衡。本篇说一下在windows上的docker部署这三个服务,达到与上一篇的效果。

三个服务的部署架构是这样的


首先要把OrderSystem(服务端口80)项目docker化,Dockerfile内容为:
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS baseWORKDIR /appEXPOSE 80
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS buildWORKDIR /srcCOPY ["/OrderSystem/OrderSystem.csproj", "OrderSystem/"]RUN dotnet restore "OrderSystem/OrderSystem.csproj"COPY . .WORKDIR "/src/OrderSystem"RUN dotnet build "OrderSystem.csproj" -c Release -o /app/build
FROM build AS publishRUN dotnet publish "OrderSystem.csproj" -c Release -o /app/publish
FROM base AS finalWORKDIR /appCOPY --from=publish /app/publish .ENTRYPOINT ["dotnet", "OrderSystem.dll"]


其实要把PaymentSystem(服务端口80)项目docker化,Dockerfile内容为:

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS baseWORKDIR /appEXPOSE 80
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS buildWORKDIR /srcCOPY ["/PaymentSystem/PaymentSystem.csproj", "PaymentSystem/"]RUN dotnet restore "PaymentSystem/PaymentSystem.csproj"COPY . .WORKDIR "/src/PaymentSystem"RUN dotnet build "PaymentSystem.csproj" -c Release -o /app/build
FROM build AS publishRUN dotnet publish "PaymentSystem.csproj" -c Release -o /app/publish
FROM base AS finalWORKDIR /appCOPY --from=publish /app/publish .ENTRYPOINT ["dotnet", "PaymentSystem.dll"]


同时再添加一个docker-compose项目(右键 OrderSystem或PaymentSystem,Add,选择Container Orchestrator Support即可),命名为B2C,目录结构如下:

其中docker-compose.yml内容如下

version: '3.4'
services: ordersystem: image: ${DOCKER_REGISTRY-}ordersystem build: context: ../ dockerfile: /OrderSystem/Dockerfile ports: - "3500:3500" volumes: - ../OrderSystem:/OrderSystem ordersystem-dapr: image: "daprio/daprd:latest" command: [ "./daprd", "-app-id", "order", "-app-port", "80" ] depends_on: - ordersystem network_mode: "service:ordersystem" paymentsystem1: image: ${DOCKER_REGISTRY-}paymentsystem build: context: ../ dockerfile: /PaymentSystem/Dockerfile ports: - "3601:3500" volumes: - ../PaymentSystem:/PaymentSystem paymentsystem1-dapr: image: "daprio/daprd:latest" command: [ "./daprd", "-app-id", "pay", "-app-port", "80" ] depends_on: - paymentsystem1 network_mode: "service:paymentsystem1"
paymentsystem2: image: ${DOCKER_REGISTRY-}paymentsystem build: context: ../ dockerfile: /PaymentSystem/Dockerfile volumes: - ../PaymentSystem:/PaymentSystem ports: - "3602:3500" paymentsystem2-dapr: image: "daprio/daprd:latest" command: [ "./daprd", "-app-id", "pay", "-app-port", "80" ] depends_on: - paymentsystem2 network_mode: "service:paymentsystem2"
为了使PaymentSystem部署多个副本,我在docker-compose.yml中配置了paymentsystem1和paymentsystem2,它们使用的都是PaymentSystem项目的信息。关于docker-compose就不多说了。

进入B2C目录,启动三个服务,命令如下:

docker-compose up -d

就会在docker中启动三个服务,一个order,两个pay,如下:


看一下结果吧,同样是postman,输入localhost:3500/v1.0/invoke/order/method/order,就会看到pay会轮询调用。

paymentsystem1


paymentsystem1


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/120366