如何外部化 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_file
、volumes
、stop_grace_period
、deploy
、healthcheck
等定义移动到基础文件,以便我的项目特定文件继承它们并且仅包含:
services:
hello-docker:
image: ...
environment: ...
ports: ...
这可能吗?
旁注:
- 我不是在寻找
extends
关键字,因为它已被弃用!
- 我不是在寻找一种解决方案来在 docker-compose.yml 中外部化某些命令。它必须放在它自己的文件中。
我知道 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
我想将 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_file
、volumes
、stop_grace_period
、deploy
、healthcheck
等定义移动到基础文件,以便我的项目特定文件继承它们并且仅包含:
services:
hello-docker:
image: ...
environment: ...
ports: ...
这可能吗? 旁注:
- 我不是在寻找
extends
关键字,因为它已被弃用! - 我不是在寻找一种解决方案来在 docker-compose.yml 中外部化某些命令。它必须放在它自己的文件中。
我知道 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