Как развернуть многосервисное приложение с помощью стека Docker Swarm

DockerBeginner
Практиковаться сейчас

Введение

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

Понимание Docker Swarm

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

Что такое Docker Swarm?

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

Ключевые понятия Docker Swarm

  • Swarm: Кластер хостов Docker, настроенных для совместной работы.
  • Узел: Отдельный хост Docker, являющийся частью Swarm.
  • Служба: Декларативный способ определения того, как ваше приложение или служба должны быть развернуты и масштабированы по всему Swarm.
  • Задача: Отдельный экземпляр контейнера, работающего в рамках службы.
  • Сеть Overlay: Виртуальная сеть, которая соединяет все узлы в Swarm, позволяя контейнерам взаимодействовать друг с другом.

Преимущества Docker Swarm

  • Высокая доступность: Docker Swarm автоматически управляет состоянием и доступностью ваших служб, перезапуская неисправные задачи и перераспределяя их по всему Swarm.
  • Масштабируемость: Вы можете легко масштабировать свои службы вверх или вниз, изменяя количество реплик.
  • Балансировка нагрузки: Docker Swarm предоставляет встроенную балансировку нагрузки, распределяя входящие запросы по задачам вашей службы.
  • Простота: Docker Swarm — это встроенная функция Docker, что упрощает настройку и управление вашими контейнерными приложениями.
graph TD A[Хост Docker] --> B[Хост Docker] B[Хост Docker] --> C[Хост Docker] C[Хост Docker] --> A[Хост Docker] A[Хост Docker] -- Swarm --> B[Хост Docker] B[Хост Docker] -- Swarm --> C[Хост Docker] C[Хост Docker] -- Swarm --> A[Хост Docker]

Развертывание многосервисного приложения с Docker Compose

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

Создание файла Docker Compose

Для развертывания многосервисного приложения с Docker Compose необходимо создать файл docker-compose.yml, который определяет службы, их конфигурации и то, как они должны быть связаны. Вот пример:

version: "3"
services:
  web:
    image: labex/web-app:v1
    ports:
      - "80:8080"
    depends_on:
      - db
  db:
    image: labex/database:v1
    volumes:
      - db-data:/var/lib/postgresql/data
volumes:
  db-data:

В этом примере две службы: web и db. Служба web использует образ labex/web-app:v1 и экспонирует порт 8080 на порту 80 хоста. Она также зависит от службы db. Служба db использует образ labex/database:v1 и монтирует том для данных базы данных.

Развертывание приложения

Для развертывания приложения можно использовать следующие команды:

## Сборка образов (при необходимости)
docker-compose build

## Развертывание приложения
docker-compose up -d

Команда docker-compose up -d запустит все службы в фоновом режиме.

Масштабирование приложения

Одно из преимуществ использования Docker Compose — возможность легко масштабировать ваши службы. Например, для масштабирования службы web до 3 реплик можно выполнить:

docker-compose scale web=3

Это создаст еще два экземпляра службы web, и Docker Compose автоматически сбалансирует нагрузку между ними.

graph LR client[Клиент] --> load_balancer[Балансировщик нагрузки] load_balancer --> web1[Служба веб-приложения] load_balancer --> web2[Служба веб-приложения] load_balancer --> web3[Служба веб-приложения] web1 --> db[Служба базы данных] web2 --> db web3 --> db

Управление и масштабирование стека Docker Swarm

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

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

Для развертывания приложения в виде стека Docker Swarm можно использовать команду docker stack deploy:

docker stack deploy -c docker-compose.yml my-app

Это создаст службы Swarm на основе конфигураций в вашем файле docker-compose.yml.

Мониторинг стека

Для мониторинга состояния вашего стека Swarm можно использовать следующие команды:

## Список запущенных служб
docker stack services my-app

## Список задач (экземпляров контейнеров) для службы
docker service ps my-app_web

## Просмотр логов для службы
docker service logs my-app_web

Масштабирование стека

Для масштабирования службы в вашем стеке Swarm можно использовать команду docker service scale:

## Масштабирование службы "web" до 5 реплик
docker service scale my-app_web=5

Это создаст еще 4 экземпляра службы web, и Docker Swarm автоматически сбалансирует нагрузку между ними.

graph LR client[Клиент] --> load_balancer[Балансировщик нагрузки] load_balancer --> web1[Служба веб-приложения] load_balancer --> web2[Служба веб-приложения] load_balancer --> web3[Служба веб-приложения] load_balancer --> web4[Служба веб-приложения] load_balancer --> web5[Служба веб-приложения] web1 --> db[Служба базы данных] web2 --> db web3 --> db web4 --> db web5 --> db

Обновление стека

Для обновления вашего стека Swarm с новой версией службы можно использовать команду docker service update:

## Обновление службы "web" до использования нового образа
docker service update my-app_web --image labex/web-app:v2

Это позволит выполнить обновление службы web поэтапно, заменяя старые контейнеры новыми без прерывания работы службы.

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

Резюме

К концу этого руководства вы получите глубокое понимание Docker Swarm и как использовать его для развертывания и управления многосервисным приложением. Вы сможете настроить кластер Docker Swarm, определить службы вашего приложения с помощью Docker Compose и развернуть весь стек как масштабируемую и устойчивую систему.