sza*_*gab 2 docker docker-compose
我有一个docker-compose.override.yml启动 10 个不同服务的文件,这些服务仅在容器名称和它们运行的命令上有所不同。他们还需要各种环境变量、多个卷等。
该文件看起来像这样,但它有 10 个部分,每个部分实际上有更多的配置。
我不喜欢所有的重复。
有没有办法将所有公共配置部分移到其他地方并让所有服务都使用这些信息?
也许还有其他解决方案?
version: "3"
services:
service-1:
image: my-image
tty: true
environment:
- APP_ENVIRONMENT=dev
working_dir: /source
volumes:
- .:/source:ro
command: run_services_1
service-2:
image: my-image
tty: true
environment:
- APP_ENVIRONMENT=dev
working_dir: /source
volumes:
- .:/source:ro
command: run_services_2
Run Code Online (Sandbox Code Playgroud)
Dan*_*nyB 11
通过使用YAML 锚点和别名功能,可以轻松地重用 docker-compose 文件中的代码块。
例如:
services:
service1: &default
image: alpine
environment:
APP_ENVIRONMENT: dev
command: env
service2:
<<: *default
command: echo some other command
service3:
<<: *default
environment:
APP_ENVIRONMENT: prod
Run Code Online (Sandbox Code Playgroud)
对于更高级的情况,您还可以使用这两个技巧:
&default或其他标记。这是这两个功能的简单示例:
services:
bash:
build: .
# Only the below will be used for anyone inheriting from &default
<<: &default
image: me/my-image
environment:
APPENV: dev
web: &web
# Inherit from default
<<: *default
command: env
prod:
# Inherit from web
<<: *web
environment:
APPENV: production
Run Code Online (Sandbox Code Playgroud)
您可以将其与仅包含或类似内容的简单 Dockerfile 一起尝试FROM alpine。
最后,值得一提的是 docker-compose 支持隐藏的配置块,他们称之为扩展字段。任何以 开头的内容x-都会被忽略,因此可以使用它来定义模板,例如:
x-service: &service
depends_on: [nginx]
restart: always
services:
service1:
<<: *service
command: ...
service2:
<<: *service
command: ...
image: ...
Run Code Online (Sandbox Code Playgroud)
附带提示:version: 3从您的文件中删除,除非有特定原因。新的 docker compose 不再需要它。
| 归档时间: |
|
| 查看次数: |
1814 次 |
| 最近记录: |