Наследование или вложение с помощью докера
Лучший способ начать наше приложение - использовать предоставленный нами докер. Команда 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