【问题标题】:Dapr and Docker Compose guidanceDapr 和 Docker Compose 指南
【发布时间】:2021-02-02 04:13:30
【问题描述】:

我正在兜圈子试图弄清楚如何做到这一点,但我遇到了以下情况。我正在尝试将 Dapr 整合到我的 ASP.NET Core 微服务中。

我已经按照文档 (dapr init) 在本地安装了 Dapr,因此我在本地运行了三个容器(dapr_redisdapr_placementdapr_zipkin ),我可以通过 Docker Desktop(和docker ps)看到。

我有许多 ASP.NET 核心微服务要运行,但每个服务都在它们自己的 Visual Studio 解决方案中……也就是说,我没有一个解决方案包含我所有的微服务项目。

我的问题是,如何使用 Docker Compose 部署(和调试)单个微服务?我正在尝试研究如何将 Dapr sidecar 注入到我的微服务中,同时让我的微服务引用现有的并且已经在运行的 Dapr 容器,用于 Redis、Placement 等。这可能吗?我已尽力遵循文档,但似乎无法使其正常工作。我的撰写文件目前如下所示:

version: '3.4'

services:

  microservicea:
    image: ${DOCKER_REGISTRY-}microservicea
    build:
      context: .
      dockerfile: MicroserviceA/Dockerfile
    #depends_on:
    #  - redis
    #  - placement
  microservicea-dapr:
    image: "daprio/daprd:edge"
    command: ["./daprd",
      "-app-id", "microservicea",
      "-app-port", "3000",
      "-placement-host-address", "placement:50005",
      "-dapr-grpc-port", "50002",
      "-components-path", "/components"]
    depends_on:
      - microservicea
    network_mode: "service:microservicea"

如果我做错了,处理这种情况的最佳方法是什么?

最终,我正在尝试解决我正在处理微服务 A 的情况,但该服务调用了微服务 B(Dapr 服务到服务调用)。我可以假设微服务 B 已经在本地构建和部署,并在它自己的容器中运行(注入了 Dapr sidecar)。我只需要一个 Docker Compose 文件来构建微服务 A,注入 Dapr sidecar 并在本地部署容器,这样我就可以测试和调试了。

提前致谢。

【问题讨论】:

    标签: asp.net-core docker-compose containers dapr


    【解决方案1】:

    如果我正确理解您的问题,您应该尝试实施以下设置:

    [ [SericeA]-[ServiceA-Dapr] ] -->[docker-network]<--[ [ServiceB]-[ServiceB-Dapr] ]
    

    在这张图上,ServiceA 和它的 Dapr 边车加入了[docker-network]ServiceB 和它的 sidecar 也是如此。

    如果您创建一个新网络:

    docker network create -d bridge my-dapr-network
    

    然后以这种方式更新 ServiceAServiceB 的撰写文件:

    version: '3.4'
    
    networks:
      default:
        external:
          name: my-dapr-network
    
    services:
    
      microservicea:
        image: ${DOCKER_REGISTRY-}microservicea
        build:
          context: .
          dockerfile: MicroserviceA/Dockerfile
    
      microservicea-dapr:
        image: "daprio/daprd:edge"
        command: ["./daprd",
          "-app-id", "microservicea",
          "-app-port", "3000",
          "-placement-host-address", "placement:50005",
          "-dapr-grpc-port", "50002",
          "-components-path", "/components"]
        depends_on:
          - microservicea
        network_mode: "service:microservicea"
    

    这里重要的是这部分:

    networks:
      default:
        external:
          name: my-dapr-network
    

    如果您对这两个撰写文件进行更改,您将能够独立启动/停止它们,并且它们将始终加入同一个现有的外部桥接网络。因此,他们将能够进行交流。

    【讨论】:

    • 我的Docker version 20.10.5 给出services.microservicea.networks.default contains unsupported option: 'external' 错误。可能是什么原因?提前致谢。
    • 是的,我搞砸了缩进。 networks是顶级入口,我修复了代码,谢谢指出
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-03
    • 2021-08-10
    • 1970-01-01
    • 2019-02-05
    • 1970-01-01
    • 2021-12-19
    相关资源
    最近更新 更多