Docker Swarms и Stacks: в чем разница?

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

Таким образом, мое понимание таково:

  • Службы. Службы Docker — это различные компоненты вашего приложения: внешний интерфейс может быть пользовательским интерфейсом React, серверная часть может быть веб-службой Spring Boot, у вас может быть БД MySQL, а также брокер RabbitMQ; все это будут разные службы, составляющие ваше приложение.
  • Кластер: кластеры Docker — это когда у вас есть Swarm, управляющий 1+ сервисами для приложения на 2+ хостах Docker; Кластер просто относится ко всем хостам Docker, на которых запущены ваши сервисные контейнеры.
  • Compose: Docker Compose — это инструмент, используемый для управления службами, группами и стеками.
  • Стек: стеки Docker возникают, когда Swarm Manager управляет несколько Swarm для нескольких сервисов в данном кластере для данного приложения; следовательно, разница между Swarm и Stack заключается в том, что Swarm просто применяется к одной службе, тогда как стек управляет несколькими Swarm и, следовательно, несколькими службами, которые все составляют масштабируемое и распределенное приложение.

Поэтому я спрашиваю: правильно ли я понимаю эти фундаментальные термины или я каким-то образом заблуждаюсь?


person smeeb    schedule 12.06.2017    source источник


Ответы (5)


Службы: Службы Docker — это различные компоненты вашего приложения...

Служба — это рой докеров, которым вы управляете. Вы можете попросить его запустить три экземпляра этого образа, и docker swarm сделает это (если сможет).

Docker Hub показывает все различные образы, которые вы можете запускать.

Кластер: Кластеры Docker — это когда у вас есть Swarm, управляющий 1+ сервисами для приложения на 2+ хостах Docker; Кластер просто относится ко всем хостам Docker, на которых запущены ваши сервисные контейнеры.

Ага. Кластер состоит из узлов, которые являются либо рабочими (которые запускают службы), либо менеджерами (контролируют планирование служб на узлах). Обратите внимание, что узел может быть как рабочим, так и управляющим.

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

Compose: Docker Compose — это инструмент, используемый для управления службами, роями и стеками.

Docker compose используется для объединения изображений в работающее приложение. Например, он может включать внешний прокси-сервер, веб-сайт и внутреннюю базу данных. Эта технология не имеет ничего общего с роем докеров... за исключением того, что вы можете использовать ее для развертывания своего приложения в рое (https://codefresh.io/blog/deploy-docker-compose-v3-swarm-mode-cluster/)

Стек: стеки Docker возникают, когда Swarm Manager управляет несколькими...

Стек используется для облака докеров. Это, вероятно, не то, что вы ищете :)

person Ross Dargan    schedule 12.06.2017
comment
Спасибо @Ross (+1) - всего два (надеюсь!) быстрых дополнительных вопроса, если вы не возражаете: (1) перечитывая документы, вы уверены что Swarm требуется для управления Сервисом? Судя по документам, вы можете просто использовать Compose на одном хосте для управления несколькими сервисными контейнерами без какого-либо участия Swarm. Мысли? И (2) вы уверены, что Docker Stacks только используются Docker Cloud? Опять же, после повторного прочтения документов кажется, что у вас может быть стек вообще без Docker Cloud. Спасибо еще раз! - person smeeb; 12.06.2017
comment
В порядке. Сервис существует только внутри роя :) Так что да, вам абсолютно необходим рой для управления им... однако вам не нужен рой для развертывания образов докеров. На самом деле я настоятельно рекомендую вам не делать этого, пока вы не привыкнете к докеру. Вы правы - создание докеров - отличный способ, и он работает без роя докеров. 2) дважды проверил доки - стеки теперь работают с роем :) - person Ross Dargan; 12.06.2017
comment
Будет ли правильно, если мы скажем, что файл docker-compose определяет стек, который будет развернут в облаке докеров? - person Deniz; 04.04.2019

Docker swarm — это инструмент кластеризации и оркестрации. Он используется для планирования контейнеров на нескольких узлах. Вы можете объединить несколько узлов в кластер, а затем отправить команду «docker run» в этот кластер.

Стек Docker — это набор сервисов, составляющих приложение в определенной среде. Расширение файла стека — yaml (также yml).

person Virendra Jadeja    schedule 12.06.2017
comment
Спасибо @Virendra (+1). Вы знаете, можно ли использовать Docker Stacks вне Docker Cloud или нет? Или они используются исключительно (и полезны!) Docker Cloud? Спасибо еще раз! - person smeeb; 12.06.2017
comment
В чем тогда разница между Stack и Docker Compose? Оба они, кажется, группируют кучу сервисов и запускают их вместе. - person akki; 20.06.2019
comment
@akki docker compose может создавать образы, а стек docker — нет. Docker stack может развертывать несколько реплик, а docker compose не может (без обходных путей), оба могут использоваться вне облака docker, но compose больше подходит для локальных сред - person vmos; 23.10.2019

Я сделал это, чтобы помочь мне понять концепцию стека.

введите здесь описание изображения

person rr789    schedule 09.11.2020

Swarm используется для создания кластеров докеров и управления ими. Он предпочитает управление хостом и управление услугами. Стек опирается на кластер, созданный swarm, который является просто инструментом управления и имеет тенденцию к управлению услугами.

обзор роя

развертывание стека

person bbotte    schedule 22.05.2020

Режим Swarm. Это относится к общей технологии управления многоузловой средой с декларативным синтаксисом. Он состоит из встроенной базы данных raft, распределенной по кворуму менеджеров, и планировщика, который постоянно исправляет разницу между текущим состоянием и целевым состоянием, определенным службами.

Кластер: группа узлов, управляемая режимом Swarm.

Узел: один механизм докера, являющийся частью кластера. Каждый узел может быть рабочим или менеджером. Менеджеры могут выполнять рабочую нагрузку, и они несут ответственность за обслуживание базы данных плота и выбор лидера для запуска планировщика.

Стек. В основном это пространство имен для набора сервисов, сетей и томов, развернутых в режиме Swarm. В настоящее время это конструкция на стороне клиента, которая ищет объекты с определенной меткой. Стек сопоставляется с файлом компоновки, развернутым в режиме Swarm (docker-compose также можно использовать для развертывания файла компоновки в одном механизме докера в качестве проекта компоновки).

Сервис: определение образа, конфигурация, используемая при его развертывании в качестве контейнера, и место для развертывания контейнеров в кластере в режиме Swarm. Служба может привести к созданию одного или нескольких контейнеров с одинаковыми параметрами конфигурации. Swarm Mode определит запись DNS, которая балансирует нагрузку на контейнеры с именем службы. Комбинируя несколько реплик и чередующиеся обновления, можно вносить изменения в службу без простоев.

person BMitch    schedule 09.11.2020