Наследование или вложение с помощью докера

Лучший способ начать наше приложение - использовать предоставленный нами докер. Команда docker-compose запускает все службы с правильной конфигурацией.

Теперь мы хотели бы предоставить компоновку докеров, где приложение работает с другим бэкэнд. В этом составлении 8 из 10 сервисов одинаковы, а 2 - разные.

Как добиться этого без дублирования кода? Я вижу, что служба может распространять услугу из другого файла для компоновки docker, однако для этого все равно потребуется перечислить все 10 служб в обоих файлах.

Ответ 1

Самый простой способ добиться этого - создать второй файл компоновки. Во втором файле вы можете использовать функцию extend Docker Compose, которая позволяет вам "наследовать" службы из другого файла: 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

С 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