如何在不使用 --scale 的情况下使用 docker-compose 指定容器数量?

How to specify number of containers using docker-compose without --scale?

在我的 docker-compose 中,我有多个客户端和工作人员 classes,特别是 A 型客户端、B 型客户端和 C 型客户端,以及他们各自的工作人员 class是的。每次我执行 docker-compose 我需要使用选项 --scale 总共 6 次,如果我想为每个 class 使用多个不同于 1 的容器: --scale cliA=2 --scale cliB=3 [...] .除了在我的 docker-compose.yml 上设置 class 之外,还有一个替代方案,而是为客户端设置一个统一的 class,可以针对每个不同的 class 进行不同的缩放(对于工人)?

我已经推理过了,得出这样的结论是可以的(查看问题末尾的代码以供参考 cli class):

cli:
  image: client
  // More stuff
  scale: 4
    environment:
      CLASSID=A
  scale: 2
    environment:
      CLASSID=B
  // [...]

这个 docker-compose.yml 将能够根据需要创建 classes,而不需要每次都调用 --scale。然而,我检查了 the reference for docker-compose but I haven't found anything that helps me. I found an ,其中提到我可以使用 docker-swarm 来完成这个任务,但我认为这超出了主题的范围(这个问题试图回答一个练习)。

这是 docker-compose.yml 文件的代码:

version: '2'
services:
  cliA:
    image: client
    build: ./client/
    links:
      - bro
    environment:
      - BROKER_URL=tcp://bro:9998
      - CLASSID=A
  // Similar description for cliB, cliC; only CLASSID changes

  worA:
    image: worker
    build: ./worker/
    links:
      - bro
    environment:
      - BROKER_URL=tcp://bro:9999
      - CLASSID=A
  // Similar description for worB, worC; only CLASSID changes

  bro:
    image: broker
    build: ./broker/
    expose:
      - "9998"
      - "9999"

感谢任何帮助。

服务是关于如何 运行 容器以及所有设置的定义。如果你需要多个容器运行不同的设置,你需要不同的服务。您可以使用 Yaml 别名和锚语法有效地将一项服务复制到另一项服务,然后应用更改,例如:

version: "3"
services:
  app1: &app1
    image: app
    environment:
      app: 1
  app2:
    <<*app1
    environment:
      app: 2

将问题分解为多个服务后,您可以遵循 的建议。


我还看到了在撰写文件中使用变量的可能性。例如

version: '2'
services:
  cli:
    image: client
    build: ./client/
    links:
      - bro
    environment:
      - BROKER_URL=tcp://bro:9998
      - CLASSID=${CLASSID}
    scale: ${SCALE}

然后您可以使用各种环境文件进行部署:

$ cat envA.sh
CLASSID=A
SCALE=4
$ cat envB.sh
CLASSID=B
SCALE=2
$ set -a && . ./envA.sh && set +a && docker-compose -p projA up
$ set -a && . ./envB.sh && set +a && docker-compose -p projB up