Как развернуть laravel в Docker-контейнере, пока выполняются задания - PullRequest
0 голосов
/ 12 декабря 2018

Мы пытаемся перенести нашу настройку laravel на использование docker.Докеризация приложения laravel была прямой, однако мы столкнулись с проблемой, когда при выполнении развертывания во время выполнения запланированных заданий они будут уничтожены, так как контейнер уничтожен.Какова лучшая практика здесь?Кажется, что наличие отдельного контейнера для запуска планировщика laravel не решит проблему.

1 Ответ

0 голосов
/ 12 декабря 2018
  • Запустите запланированное задание в другом контейнере, чтобы вы могли масштабировать его независимо от приложения laravel.
  • Запустите несколько контейнеров запланированного задания, чтобы некоторые из них можно было остановить, чтобы обновить их, пока старыепродолжит обработку заданий.
  • Docker отправит сигнал SIGTERM контейнеру и дождется, когда контейнер будет корректно завершен, прежде чем выдать SIGKILL (время между этими двумя сигналами настраивается, по умолчанию 10 секунд).Это позволит аккуратно завершить текущую работу (или сохранить контрольную точку для продолжения позже).

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

Примечание: планировщик laravel основан на cron и будет запускать процессы, которые будут убиты docker.Чтобы предотвратить это, планировщик должен добавить задание в очередь laravel.Очередь является приоритетным процессом, и SIGTERM получит возможность аккуратно остановить / сохранить ее, которую она получит перед уничтожением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...