В чем разница между файлом стека и файлом Compose?

Я изучаю использование Docker Compose для развертывания приложений в нескольких контейнерах на нескольких хостах. И я нашел два файла конфигурации - файл стека и файл Compose.

В справочнике YAML по файлу облачного стека говорится: файл стека - это файл в формате YAML, который определяет одну или несколько служб, аналогично файлу docker-compose.yml, но с несколькими расширениями.

И из этого сообщения , в нем говорится, что стеки очень похожи на docker-compose, за исключением того, что они определяют службы, а docker-compose определяет контейнеры.

Они выглядят очень похоже, поэтому мне интересно, когда я буду использовать файл стека, а когда - файл Compose?


person dayuloli    schedule 29.03.2017    source источник
comment
Хороший вопрос. Я также хотел бы спросить, зачем нам нужен стек Docker, когда у нас уже есть docker compose? Во второй ссылке говорится, что стек докеров - это служба для движка докеров, а состав докеров - нет. Тогда почему мы не можем просто обновить docker compose и сделать его сервисом?   -  person Dustin Sun    schedule 29.03.2017
comment
@lonelyloner отличный вопрос, я предполагаю, что это потому, что docker-compose - это отдельный инструмент, и он не интегрирован в докер. В Linux мне пришлось установить его отдельно, а в Windows, как мне кажется, он идет вместе с Docker. Надеюсь, в будущем docker объединит их, и останется только файл стека.   -  person Roman Mik    schedule 29.03.2017


Ответы (2)


Концептуально оба файла служат одной цели - развертыванию и настройке ваших контейнеров на движках докеров.

Инструмент Docker-compose был создан первым, и его цель - определять и запускать многоконтейнерные приложения Docker на одном движке Docker. (см. обзор создания докеров)

Вы используете docker-compose up для создания / обновления ваших контейнеров, сетей, томов и так далее.

Где Docker Stack используется в Docker Swarm (инструмент оркестровки и планирования Docker) и, следовательно, у него есть дополнительные параметры конфигурации (например, реплики, развертывание, роли), которые не нужны для одного механизма докеров.

Файл стека интерпретируется командой docker stack. Эту команду можно вызвать только из диспетчера роя докеров.

Вы можете преобразовать docker-compose.yml в docker-cloud.yml и обратно. Однако, как указано в вашем вопросе, вы должны обратить внимание на различия. Кроме того, вы должны иметь в виду, что существуют разные версии для docker-compose. В настоящее время последней версией является версия 3. (https://docs.docker.com/compose/compose-file/)

Изменить: интересный блог, который может помочь понять различия, можно найти здесь https://blog.nimbleci.com/2016/09/14/docker-stacks-and-why-we-need-them/

person Roman Mik    schedule 29.03.2017
comment
Да, это меня смутило, потому что в файле Compose также упоминаются свойства, связанные с роем, такие как deploy, которые игнорируются при использовании docker compose и действуют только docker stack deploy. Думаю, для всех целей и задач для версии 3+ compose они одинаковы? - person dayuloli; 30.03.2017
comment
Версия 3 отличается от 2. Не сильно. Примечательно то, как объявляются объемы. Есть и другие изменения. Версия 3 compose должна иметь возможность работать с роем без изменений, но на самом деле вам нужно добавить конфигурации роя, особенно если в ваших контейнерах есть тома, и вы не можете позволить себе потерю их данных при повторном развертывании. - person Roman Mik; 30.03.2017
comment
Стек @sudo docker работает только с Docker Swarm. docker-compose - это надстройка к док-станции, которая помогает организовать службы на одном движке докера. Стек Docker - это детище docker-compose. надеюсь, в будущем они объединят оба вместе и просто сохранят стек докеров - person Roman Mik; 02.10.2017

Примечание. Вопрос предполагает, что справочник по Docker Cloud - это путеводитель для понимания стека, и он полезен, но это не авторитетный источник для стека и компоновки - вместо этого это руководство. это характерно для размещенной службы Docker: «Docker Cloud предоставляет размещенную службу реестра со средствами сборки и тестирования». Документацию по файлам см. В формате файла Compose версии 3, хотя он называется " Compose », это авторитетное место, где функции работают как с compose, так и с swarm / stack и как это сделать.

Вы можете указать группу контейнеров Docker для настройки и развертывания двумя способами:

  1. Docker compose (docker-compose up)
  2. Докерский рой (docker swarm init; docker stack deploy --compose-file docker-stack.yml mystack)

Оба используют YAML-файл, написанный в формате файла Compose версии 3 Docker. Эта ссылка является основным источником, документирующим конфигурацию docker-compose и docker swarm / stack.

Однако есть определенные различия между тем, что вы можете делать в двух файлах yml - конкретными параметрами и конкретными соглашениями об именах:

Параметры

Доступные параметры конфигурации службы задокументированы на странице Создание ссылки на файл - обычно с примечание внизу записи опции, описывающей ее как игнорируемую либо docker stack deploy, либо docker-compose up.

Например, следующие параметры игнорируются при развертывании стек в режиме роения с файлом Compose (версия 3):

build, cap_add, cap_drop, cgroup_parent, container_name, depends_on, devices, external_links, links, network_mode, restart, security_opt, stop_signal, sysctls, tmpfs (версия 3-3.5), userns_mode

... в то время как некоторые параметры игнорируются docker-compose, но работают с docker stack deploy, например:

развернуть, restart_policy

При запуске из командной строки docker stack deploy будет выводить предупреждения о том, какие параметры он игнорирует:

Игнорирование неподдерживаемых опций: ссылки

Именование файлов

  • Для docker-compose up имя файла по умолчанию - docker-compose.yml, если альтернативное имя файла не указано с помощью -f (см. ссылку на создание). Обычно это имя используется по умолчанию и команда запускается без аргументов.

  • Для docker stack deploy в справочнике по развертыванию стека докеров нет файла по умолчанию. Вы можете использовать любое имя, какое захотите, однако вот три соглашения:

    1. use docker-stack.yml, as used in the official Docker for Beginners Ch.3: Deploying an app to a Swarm.
    2. используйте docker-cloud.yml, как указано в справочнике по YML Docker Cloud Stack для службы Docker Cloud.
    3. используйте docker-compose.yml - старое имя по умолчанию для формата файла Compose.
person JeremyDouglass    schedule 07.08.2018
comment
Хороший обзор: -). Меня немного раздражает то, что в справочной документации к файлу Compose есть записи, которые не работают с (Docker-) Compose: - P - person KajMagnus; 06.11.2018
comment
@KajMagnus Я согласен, должен быть фильтр, чтобы видеть только те параметры, которые у вас есть в любом сценарии. - person Jens; 03.05.2020