Простое приложение с Docker: сервисы и файл docker-compose.yml

В этом посте мы масштабируем наше приложение, созданное в предыдущих постах, и включим балансировку нагрузки. Чтобы сделать это, мы должны перейти на один уровень вверх в иерархии распределенного приложения: службы (services).

Stack
Services (в этом посте)
Container (в посте)

О сервисах

В распределенном приложении разные части приложения называются "сервисами" (службы). Например, если вы представляете сайт для обмена видео, он, вероятно, включает в себя сервис для хранения данных приложения в базе данных, сервис для транскодирования видео в фоновом режиме после того, как пользователь что-то загрузил, сервис для внешнего интерфейса и так далее.

Сервисы на самом деле являются просто "контейнерами в производстве" (containers in production). Сервис запускает только образ, но он кодифицирует способ работы образа: какие порты он должен использовать, сколько реплик (экземпляров) контейнера должно работать, чтобы у службы была необходимая емкость, и т.д. Масштабирование службы изменяет количество экземпляров контейнера, на которых выполняется этот фрагмент программного обеспечения, выделяя больше вычислительных ресурсов службе в процессе.

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

Ваш первый файл docker-compose.yml

Файл docker-compose.yml - это файл YAML, который определяет, как контейнеры Docker должны вести себя в рабочей среде (in production).

docker-compose.yml

Сохраните этот файл как docker-compose.yml. Убедитесь, что вы поместили образ, созданный в посте, в реестр и обновите этот .yml, заменив username/repo:tag деталями своего образа.

version: "3"
services:
  web:
    # замените username/repo:tag на ваше имя 
    # и детали образа
    image: username/repo:tag
    deploy:
      replicas: 5
      resources:
        limits:
          cpus: "0.1"
          memory: 50M
      restart_policy:
        condition: on-failure
    ports:
      - "4000:80"
    networks:
      - webnet
networks:
  webnet:

Этот файл docker-compose.yml говорит Docker сделать следующее:

  • Извлечь образ, загруженный из реестра.
  • Запустить 5 экземпляров этого образа в качестве службы, называемой web, и ограничить каждый из них использованием не более 10% процессорного времени от одного ядра (это также может быть, например, “1.5” для обозначения полутора ядер для каждого), и 50 МБ RAM.
  • Немедленно перезапускать контейнеры, если произойдет сбой.
  • Подключить порт 4000 хоста к порту 80 этого сервиса.
  • Поручить web контейнерам использовать общий порт 80 через сеть с балансировкой нагрузки, которая называется webnet. (Внутри сами контейнеры публикуются в порт 80 сети через эфемерный порт.)
  • Определить сеть webnet с настройками по умолчанию (это оверлейная сеть с балансировкой нагрузки).

Читайте также:


Комментарии

Популярные сообщения из этого блога

Язык поисковых запросов в Graylog

Нормальные формы, пример нормализации в базе данных

Хэш-таблица: разрешение коллизий