Развертывание в Swarm

Пререквизиты

  • Скачайте и установите Docker Desktop, как описано в Get Docker.

  • Отработайте процесс контейнеризации приложения в Part 2.

  • Убедитесь, что Swarm включен на вашем Docker Desktop, набрав docker system info и отыскав сообщение Swarm: active (возможно, вам придется немного прокрутить страницу вверх).

Если Swarm не запущен, просто введите docker swarm init в приглашении командной строки, чтобы установить его.

Введение

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

Чтобы проверить, что наше контейнерное приложение хорошо работает на Swarm, мы воспользуемся встроенной средой Swarm от Docker Desktop прямо на нашей машине для разработки, чтобы развернуть наше приложение, а затем передадим его для запуска на полном кластере Swarm в производстве. Среда Swarm, созданная Docker Desktop, является полнофункциональной, то есть в ней есть все возможности Swarm, которыми ваше приложение будет пользоваться на реальном кластере, доступные с удобной машины для разработки.

Опишите приложения с помощью стековых файлов

Swarm никогда не создает отдельные контейнеры, как мы делали на предыдущем этапе этого руководства. Вместо этого все рабочие нагрузки Swarm планируются как сервисы, которые представляют собой масштабируемые группы контейнеров с дополнительными сетевыми функциями, поддерживаемыми Swarm автоматически. Более того, все объекты Swarm могут и должны быть описаны в манифестах, называемых стек-файлами. Эти файлы YAML описывают все компоненты и конфигурации вашего приложения Swarm и могут использоваться для легкого создания и уничтожения вашего приложения в любой среде Swarm.

Давайте напишем простой стековый файл для запуска и управления нашим приложением Todo, образ контейнера getting-started, созданный в Part 2 учебника Quickstart. Поместите следующее в файл с именем bb-stack.yaml:

version: '3.7'

services:
  bb-app:
    image: getting-started
    ports:
      - "8000:3000"

В этом YAML-файле Swarm у нас всего один объект: service, описывающий масштабируемую группу одинаковых контейнеров. В данном случае вы получите только один контейнер (по умолчанию), и этот контейнер будет основан на вашем образе getting-started, созданном в Части 2 из руководства Quickstart. Кроме того, мы попросили Swarm перенаправить весь трафик, поступающий на порт 8000 на нашей машине разработки, на порт 3000 внутри нашего get-started контейнера.

Примечание

Сервисы Kubernetes и сервисы Swarm очень разные! Несмотря на схожее название, эти два оркестранта подразумевают под термином «сервис» совершенно разные вещи. В Swarm сервис обеспечивает как планирование , так и сетевые возможности, создавая контейнеры и предоставляя инструменты для маршрутизации трафика к ним. В Kubernetes планирование и работа с сетью обрабатываются отдельно: *развертывания (или другие контроллеры) управляют планированием контейнеров в виде стручков, а сервисы отвечают только за добавление сетевых функций к этим стручкам.

Разверните и проверьте ваше приложение

  1. Разверните свое приложение в Swarm:

    $ docker stack deploy -c bb-stack.yaml demo
    

    Если все идет хорошо, Swarm сообщит о создании всех ваших объектов стека без каких-либо нареканий:

    Creating network demo_default
    Creating service demo_bb-app
    

    Обратите внимание, что в дополнение к вашей службе Swarm по умолчанию также создает сеть Docker, чтобы изолировать контейнеры, развернутые как часть вашего стека.

  2. Убедитесь, что все сработало, перечислив свои услуги:

    $ docker service ls
    

    Если все прошло успешно, ваша служба сообщит, что создана 1/1 ее копий:

    ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
    il7elwunymbs        demo_bb-app         replicated          1/1                 getting-started:latest   *:8000->3000/tcp
    

    Это указывает на то, что 1/1 контейнеров, которые вы запросили как часть ваших услуг, запущены. Также мы видим, что порт 8000 на вашей машине разработки перенаправляется на порт 3000 в вашем запускающемся контейнере.

  3. Откройте браузер и посетите ваше приложение Todo по адресу localhost:8000; вы должны увидеть ваше приложение Todo, такое же, как и когда мы запускали его как отдельный контейнер в Части 2 Краткого руководства.

  4. Как только вы будете удовлетворены, удалите свое заявление:

    $ docker stack rm demo
    

Заключение

На данном этапе мы успешно использовали Docker Desktop для развертывания нашего приложения в полнофункциональной среде Swarm на нашей машине разработки. Мы еще мало что сделали со Swarm, но теперь дверь открыта: вы можете начать добавлять другие компоненты в свое приложение и использовать все возможности и силу Swarm прямо на своей машине.

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

Справочники на Swarm и CLI

Дополнительную документацию по всем новым объектам Swarm и командам CLI, использованным в этой статье, можно найти здесь: