启动我们的应用程序的最佳方式是使用我们提供的docker compose。 docker-compose 使用正确的配置启动所有服务。
现在我们想提供一个 docker-compose ,其中应用程序使用不同的后端运行。在这个作品中,8个10个服务是相同的,2个是不同的。
如何在没有代码重复的情况下实现此目的? 我看到服务可以从另一个docker-compose文件扩展服务,但是这仍然需要列出两个文件中的所有10个服务。
答案 0 :(得分:16)
使用docker-compose 1.6,这应该是可能的。
使用您的公共服务创建docker-compose.yml
:
service01:
image: image01
links:
- service02
service02:
image: image02
第二个文件docker-compose.prod.yml
包含您的独特服务:
service03:
image: image03
links:
- service02
现在您可以使用以下命令启动服务01,02和03:
docker-compose -f docker-compose.yml -f docker-compose.prod.yml
有关更多信息,请参阅官方文档: https://docs.docker.com/compose/extends/#multiple-compose-files
答案 1 :(得分:12)
实现此目的的最简单方法是创建第二个撰写文件。在第二个文件中,您可以使用Docker Compose的extend
功能,该功能允许您从其他文件“继承”服务:https://docs.docker.com/compose/extends/
假设您的原始文件为docker-compose.yaml
,您可以创建swap-backend-compose.yaml
:
service-one:
extends:
file: docker-compose.yaml
service: service-one
service-two:
extends:
file: docker-compose.yaml
service: service-two
environment:
- BACKEND=some_other_value
......等等。
答案 2 :(得分:1)
如评论Version 3 deprecates the extends
keyword中所述,因此这是一个没有它的最小示例:
# BASE - docker-compose.base.yml
version: "3"
services:
api:
build: .
# DEV - docker-compose.dev.yml
version: "3"
services:
api:
command: npm run dev
# PROD - docker-compose.dev.yml
version: "3"
services:
api:
command: npm run prod
一些注意事项:
.dev.yml
,.prod.yml
)可以从基本文件(.base.yml
)继承,添加和替换配置选项build
选项2)添加了自己的command
选项docker-compose.yml
;我在这里添加了.base
只是为了突出继承方面,因为我喜欢更明确的名称。请记住docker-compose looks for docker-compose.yml
and docker-compose.override.yml
by default。