¿Debo usar forever / pm2 dentro de un contenedor (Docker)?


Estoy refactorizando un par de nodos.js services. Todos ellos solían comenzar con forever en servidores virtuales, si el proceso se bloqueaba simplemente se reiniciaban.

Ahora, pasando a las estructuras de aplicación contenerizadas y sin estado, creo que el proceso debe salir y el contenedor debe reiniciarse en caso de fallo.

¿Es eso correcto? Hay beneficios o desventajas?

Author: Patrick, 2015-03-09

3 answers

Mi opinión es no usar un supervisor de proceso en contenedor (para siempre, pm2) y en su lugar usar la política de reinicio de docker a través de --restart=always (o uno de los otros sabores de esa opción). Esto está más en línea con la filosofía general de docker, y debería funcionar de manera muy similar a la supervisión del proceso en el contenedor, ya que los contenedores de docker comienzan a ejecutarse muy rápidamente.

El defensor más fuerte para ejecutar la supervisión del proceso en el contenedor que he visto está en el phusion baseimage-docker README si desea explorar la otra posición sobre este tema.

 44
Author: Peter Lyons,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-09 14:59:04

Si bien es una buena idea usar --restart=always como a prueba de fallos, el reinicio del contenedor es relativamente lento (5+ segundos con el simple servidor de nodos de Hello World descrito aquí), por lo que puede minimizar el tiempo de inactividad de la aplicación usando algo como forever.

Un inconveniente de reiniciar el proceso dentro del contenedor es que la recuperación de fallas ahora puede ocurrir dos formas, lo que podría tener implicaciones para su monitoreo, etc.

 16
Author: Aidan Feldman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-27 06:21:04

El nodo necesita una configuración de clúster si se está ejecutando en un servidor con varias CPU.

Con PM2 obtienes eso sin escribir ningún código adicional. http://pm2.keymetrics.io/docs/usage/cluster-mode /

A menos que esté utilizando un grupo de servidores con instancias de CPU únicas, diría que usa PM2 en producción.

Pm2 también será más rápido de reiniciar que docker

 0
Author: Richard Torcato,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-20 14:41:02