如何外部化 docker-compose.yml 的一部分?

How to externalize parts of a docker-compose.yml?

我想将 docker-compose.yml 的某些部分外部化,这样我就可以在多个项目中重用这些片段。我的目标是构建某种 docker-compose.base.yml:

这是我目前没有外部化的文件:

version: '3.7'
services:
  hello-docker:
    image: $REGISTRY/hello-docker:latest
    env_file: '.env'
    environment:
      - some.profile=values
    ports:
      - "8090:8080"
    volumes:
      - /etc/timezone:/etc/timezone:ro
    stop_grace_period: 60s
    deploy:
      replicas: 1
      update_config:
        order: start-first
        failure_action: rollback
    healthcheck:
      test: ...

现在我想将 version 定义、env_filevolumesstop_grace_perioddeployhealthcheck 等定义移动到基础文件,以便我的项目特定文件继承它们并且仅包含:

services:
  hello-docker:
    image: ...
    environment: ...
    ports: ...

这可能吗? 旁注:

我知道 yaml anchors 的用法,但它只能在同一个 docker-compose 文件中使用。如果放在不同的文件中,Yaml 锚将失去其功能。

您可以使用 -f 标志应用多个 docker-compose.yml 文件。例如:

$ cat docker-compose.base.yml
version: '3.7'
services:
  hello-docker:
    image: busybox
    command: env
    environment:
      - BASE=foo
      - VERSION=BASE

$ cat docker-compose.yml
version: '3.7'
services:
  hello-docker:
    environment:
      - EXTEND=bar
      - VERSION=EXTEND

$ docker-compose -f docker-compose.base.yml -f docker-compose.yml up
...
hello-docker_1  | BASE=foo
hello-docker_1  | VERSION=EXTEND
hello-docker_1  | EXTEND=bar