2015-10-29 2 views
12

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

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

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

ответ

11

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

... и прочее.

+0

Спасибо. Однако для этого все еще требуется перечислить все 10 сервисов в файле 'swap-backen-compose.yaml', и если я добавлю новую услугу, я должен отредактировать бот-файлы. Я искал способ наследовать или включать весь состав. –

+1

@ RetoGmür - Я просто пережил то же самое. К сожалению, в настоящее время нет способа расширить файл конфигурации Docker Compose. –

+0

Я думаю, вас будет интересовать https://github.com/docker/compose/pull/2051, который доступен в последней версии RC https://github.com/docker/compose/releases/tag/1.5. 0rc2 – dnephin

8

С 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

Смежные вопросы