如何使用 docker-compose 构建不同配置的芹菜工人?

How to build differently configured celery workers using docker-compose?

我正在使用 docker-compose 构建和 运行 芹菜工人。

services:
    ...

    worker-a:
        command: celery -A tasks worker -l "DEBUG" --concurrency=1 -Q qname_a
        restart: always
        environment:
            WORKER_TYPE: a_setting
            ...
        depends_on:
            - ...

    worker-b:
        command: celery -A tasks worker -l "DEBUG" --concurrency=1 -Q qname_b
        restart: always
        environment:
            WORKER_TYPE: b_setting
            ...
        depends_on:
            - ...

如何构建 2 个不同的工作映像(worker-a 和 worker-b),它们执行相同的任务(相同的代码),但使用不同的配置(基于 WORKER_TYPE)并听取不同的声音排队?

如果您的目标是避免重复一段几乎相同的代码,YAML 锚点非常适合定义可重用块。

例如,在下面的配置中,worker-a 的所有配置都可以通过调用 <<: *default 被任何其他服务使用,然后根据需要覆盖任何值:

version: '3'

services:
  worker-a: &default
    image: alpine
    command: env
    environment:
      WORKER_TYPE: a_setting
    # ... more definitions

  worker-b:
    <<: *default
    environment:
      WORKER_TYPE: b_setting

请注意,如果您希望嵌套元素(例如 environment)也具有共同的值,您可能需要执行以下操作:

version: '3'

services:
  worker-a: &default
    image: alpine
    command: env
    environment: &environment
      COMMON_VAR_FOR_ALL: value
      WORKER_TYPE: a_setting
    # ... more definitions

  worker-b:
    <<: *default
    environment:
      <<: *environment
      WORKER_TYPE: b_setting

关于这个主题有一篇很好的文章 here and here