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
解决方案
通过使用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
对于更高级的情况,您还可以使用以下两个技巧:
- 仅将配置块的一部分标记为属于
&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
FROM alpine
您可以将其与仅包含或类似内容的简单 Dockerfile 一起尝试。
最后,值得一提的是 docker-compose 支持隐藏的配置块,他们称之为扩展字段。任何以开头的x-
都被忽略,所以这可以用来定义模板,例如:
x-service: &service
depends_on: [nginx]
restart: always
services:
service1:
<<: *service
command: ...
service2:
<<: *service
command: ...
image: ...
附带提示:version: 3
除非您有特定原因,否则请从您的文件中删除。新的 docker compose 不再需要它。
推荐阅读
- android - 如何在 MarketingCloudSdk salesforce 推送通知中实现 Deeplinking?
- php - 如何从解码的base64字符串中获取pdf
- python - 以编程方式生成/写入芹菜日志到文件中
- python - Python和排序字典
- amazon-web-services - AWS SDK:ECS -> createTaskSet -> 如何设置最后一个任务定义版本
- yii2 - Yii2 activequery显示数据查看
- html - 在同一画布中为 p5.js 和 babylon.js 绘制元素
- c++ - 派生类的函数重载
- c# - Razor PageHandler PartialViewResult 模型类型不匹配
- azure - Azure SQL 多个弹性池(多租户 SaaS)