使用docker compose从堆栈复制单个服务?

使用docker compose从堆栈复制单个服务?,docker,docker-compose,docker-swarm,Docker,Docker Compose,Docker Swarm,我有点困惑,因为我习惯于在单服务器环境中使用docker compose。现在我有了使用Docker Swarm集群和Docker compose的想法(这是我更了解的),但我有点困惑如何让它符合我的应用程序的需要。例如: 我的应用程序由一个经理应用程序和多个工作者组成。我的想法是让manager应用程序在Docker Swarm manager的服务器上运行(可能吗?),然后使用Docker compose仅通过其余Swarm群集节点复制工人 小地图应该是这样的: Server A ->

我有点困惑,因为我习惯于在单服务器环境中使用docker compose。现在我有了使用Docker Swarm集群和Docker compose的想法(这是我更了解的),但我有点困惑如何让它符合我的应用程序的需要。例如:

我的应用程序由一个
经理
应用程序和多个
工作者
组成。我的想法是让
manager
应用程序在Docker Swarm manager的服务器上运行(可能吗?),然后使用Docker compose仅通过其余Swarm群集节点复制工人

小地图应该是这样的:

Server A -> manager
Server B -> worker1, worker2, worker3
Server C -> worker4, worker5
工人通过
docker compose.yml
文件中
environment
部分中定义的IP和端口连接到管理器


我的问题是:如何仅在一台服务器上启动
manager
,以及如何仅在其他节点中复制
worker
s,而不在每个集群节点上使用
manager
?(因为我不想要/不需要)。提前谢谢

您可以通过
约束定义

version: '3.8'

services:
  manager:
    hostname: 'manager'
    image: traefik
    deploy:
      placement:
        max_replicas_per_node: 1
        constraints: [node.role == manager]
  service:
    image: service
    deploy:
      mode: replicated
      replicas: 5
      placement:
        constraints: [node.role == worker]