Простое приложение с 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 с настройками по умолчанию (это оверлейная сеть с балансировкой нагрузки).
Читайте также:
- Подготовка вашего Docker окружения
- Простое приложение с Docker: определение контейнера с помощью Dockerfile
- Простое приложение с Docker: сборка и запуск приложения в контейнере
- Простое приложение с Docker: публикация образа
Комментарии
Отправить комментарий