使用docker compose继承或嵌套

时间:2015-10-29 07:21:16

标签: docker-compose

启动我们的应用程序的最佳方式是使用我们提供的docker compose。 docker-compose 使用正确的配置启动所有服务。

现在我们想提供一个 docker-compose ,其中应用程序使用不同的后端运行。在这个作品中,8个10个服务是相同的,2个是不同的。

如何在没有代码重复的情况下实现此目的? 我看到服务可以从另一个docker-compose文件扩展服务,但是这仍然需要列出两个文件中的所有10个服务。

3 个答案:

答案 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)继承,添加和替换配置选项
  • 在此示例中,每个环境文件1)继承了build选项2)添加了自己的command选项
  • 基本文件通常命名为docker-compose.yml;我在这里添加了.base只是为了突出继承方面,因为我喜欢更明确的名称。请记住docker-compose looks for docker-compose.yml and docker-compose.override.yml by default