Простое приложение с Docker: запуск сервиса, масштабирование приложения
Запуск приложения с балансировкой нагрузки
Прежде чем мы сможем использовать команду docker stack deploy, мы сначала запустим:
docker swarm init
Примечание. Описание docker swarm будет в последующих постах. Если вы не запустите docker swarm init, вы получите сообщение об ошибке “this node is not a swarm manager”.
Теперь давайте запустим это. Вы должны дать своему приложению имя. Здесь установлено значение getstartedlab:
docker stack deploy -c docker-compose.yml getstartedlab
В нашем единственном стеке службы запущено 5 экземпляров нашего развернутого образа на одном хосте. Рассмотрим их подробней.
Получите идентификатор службы (service ID) для одной службы в нашем приложении:
docker service ls
Ищите выходные данные для web службы, с добавлением имени вашего приложения. Если вы назвали его так же, как показано в этом примере, это имя getstartedlab_web. Также указывается идентификатор службы, а также количество реплик, имя образа и открытые порты.
В качестве альтернативы, вы можете запустить docker stack services, за которыми следует имя вашего стека. В следующем примере команда позволяет просмотреть все службы, связанные со стеком getstartedlab:
docker stack services getstartedlab
ID NAME MODE REPLICAS IMAGE PORTS
bqpve1djnk0x getstartedlab_web replicated 5/5 username/repo:tag *:4000->80/tcp
Один контейнер, запущенный в службе, называется задачей (task). Задачам присваиваются уникальные идентификаторы, которые увеличиваются численно, вплоть до количества реплик, определенных вами в docker-compose.yml. Перечислите задачи для вашего сервиса:
docker service ps getstartedlab_web
Задачи также отображаются, если вы просто перечислите все контейнеры в вашей системе, хотя это не фильтруется сервисом:
docker container ls -q
Вы можете запустить curl -4 http://localhost:4000 несколько раз подряд или перейти по этому URL в вашем браузере и нажать несколько раз обновить.
В любом случае, идентификатор контейнера изменяется, демонстрируя распределение нагрузки; при каждом запросе для ответа выбирается одна из 5 задач. Идентификаторы контейнера соответствуют вашему выводу из предыдущей команды (docker container ls -q).
Чтобы просмотреть все задачи стека, вы можете запустить docker stack ps, а затем имя вашего приложения, как показано в следующем примере:
docker stack ps getstartedlab
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
uwiaw67sc0eh getstartedlab_web.1 username/repo:tag docker-desktop Running Running 9 minutes ago
sk50xbhmcae7 getstartedlab_web.2 username/repo:tag docker-desktop Running Running 9 minutes ago
c4uuw5i6h02j getstartedlab_web.3 username/repo:tag docker-desktop Running Running 9 minutes ago
0dyb70ixu25s getstartedlab_web.4 username/repo:tag docker-desktop Running Running 9 minutes ago
aocrb88ap8b0 getstartedlab_web.5 username/repo:tag docker-desktop Running Running 9 minutes ago
Разбор трудностей
Запуск Windows 10?
В Windows 10 PowerShell уже должен быть доступен curl, но в противном случае вы можете получить эмулятор терминала Linux, такой как Git BASH, или загрузить wget для Windows, который очень похож.
Медленное время отклика?
В зависимости от конфигурации сети вашей среды, контейнеры могут отвечать на запросы HTTP до 30 секунд. Это не указывает на производительность Docker или swarm, а скорее на неудовлетворенную зависимость Redis, о которой мы поговорим позже. Пока счетчик посетителей не работает по той же причине; мы еще не добавили сервис для сохранения данных.
Масштабировать приложение
Вы можете масштабировать приложение путем изменения значения поля replicas в docker-compose.yml, сохранения изменений и повторного запуска команды docker stack deploy:
docker stack deploy -c docker-compose.yml getstartedlab
Docker выполняет обновление на месте, нет необходимости сначала сносить стек или уничтожать любые контейнеры.
Теперь перезапустите docker-контейнер ls -q, чтобы увидеть, как развернутые экземпляры реконфигурированы. Если вы масштабируете реплики, запускается больше задач и, следовательно, больше контейнеров.
Свертывание приложения и swarm
Сверните приложение с помощью docker stack rm:
docker stack rm getstartedlab
Сверните swarm.
docker swarm leave --force
Читайте также:
- Простое приложение с Docker: определение контейнера с помощью Dockerfile
- Простое приложение с Docker: сборка и запуск приложения в контейнере
- Простое приложение с Docker: публикация образа
- Простое приложение с Docker: сервисы и файл docker-compose.yml
Комментарии
Отправить комментарий