Должен ли я использовать forever/pm2 внутри контейнера (Docker)?
Я реорганизую пару сервисов node.js. Все они использовали для запуска с forever
на виртуальных серверах, если процесс разбился, они просто перезапускаются.
Теперь, перейдя к контейнерам и структурам без учета состояния, я думаю, что процесс должен выйти, и контейнер должен быть перезапущен при ошибке.
Это правильно? Есть ли преимущества или недостатки?
Ответы
Ответ 1
Мой прием не использует диспетчер процессов внутри контейнера (навсегда, pm2) и вместо этого использует политику перезагрузки докеров через --restart=always
(или один из других вариантов этой опции). Это более подробно с общей философией докеров и должно работать очень точно так же, как в процессе контроля над контейнером, поскольку контейнеры докеров начинают работать очень быстро.
Самый сильный сторонник запуска надзора за процессом в контейнере, который я видел, находится в phusion baseimage-docker README, если вы хотите изучить другую позицию по этой теме.
Ответ 2
В то время как хорошая идея использовать --restart=always
как отказоустойчивую, перезагрузка контейнера относительно медленная (5 + секунд с простым сервером Hello World Node, описанным здесь), поэтому вы можете минимизировать время простоя приложения, используя что-то вроде forever
.
Недопустимость перезапуска процесса в контейнере заключается в том, что восстановление после сбоя теперь может произойти двумя способами, которые могут иметь последствия для вашего мониторинга и т.д.