Руководство по Dapr и Docker Compose

Я хожу по кругу, пытаясь понять, как это сделать, но у меня такая ситуация. Я пытаюсь включить Dapr в свои микросервисы ASP.NET Core.

Я установил Dapr локально, следуя документации ( ), и в результате у меня есть три контейнера, работающих локально ( dapr_redis , dapr_placement и dapr_zipkin ), которые я могу видеть через Docker Desktop (и через ).

У меня есть несколько основных микросервисов ASP.NET для запуска, но каждая служба находится в своем собственном решении Visual Studio ... то есть у меня нет одного решения, содержащего все мои проекты микросервисов.

У меня вопрос: как я могу использовать Docker Compose для развертывания (и отладки) одного микросервиса? Я пытаюсь понять, как внедрить сопроводительный элемент Dapr в свой микросервис, но при этом иметь ссылку на существующие и уже работающие контейнеры 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). Мне просто нужен файл Docker Compose, который будет собирать микросервис A, вставлять побочный файл Dapr и развертывать контейнер локально, чтобы я мог тестировать и отлаживать.

Заранее спасибо.

1 ответ

Если я правильно понял ваш вопрос, попробуйте выполнить следующую настройку:

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

На этой диаграмме и ее коляске Dapr, соединяющей [docker-network]. То же самое и с коляской.

Если вы создаете новую сеть:

      docker network create -d bridge my-dapr-network

А затем обновите свои файлы для создания ServiceA и ServiceB Сюда:

      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

Если вы внесете это изменение в оба файла compose, вы сможете запускать \ останавливать их независимо, и они всегда будут подключаться к одной и той же существующей внешней сети моста. В результате они смогут общаться.

Другие вопросы по тегам