какой смысл использовать pm2 и docker вместе? - PullRequest
0 голосов
/ 05 июля 2018

Мы успешно используем pm2 для запуска приложений на наших серверах. В настоящее время мы переходим в докер, и мы увидели http://pm2.keymetrics.io/docs/usage/docker-pm2-nodejs/

Но какой смысл в действительности использовать оба вместе? Разве Docker не предоставляет все, что делает pm2?

Ответы [ 2 ]

0 голосов
/ 19 марта 2019

Обычно нет смысла использовать pm2 внутри докера.

Как PM2, так и Docker являются менеджерами процессов, и они оба могут выполнять пересылку журналов, перезапускать сбойные рабочие и многое другое. Если вы запустите pm2 внутри докера, вы сможете скрыть возможные проблемы с вашим сервисом, по крайней мере, следующие:

1) Если вы запустите один процесс на контейнер с pm2, вы не получите много, кроме увеличения потребления памяти. Перезапуск может быть выполнен с помощью чистого докера с политикой перезапуска . Другие докерские среды (например, ECS или Kubernetes) также могут это делать.

2) Если вы запустите несколько процессов, вы усложните мониторинг. Показатели ЦП и памяти больше не доступны напрямую для вашей окружающей среды.

3) Запросы на проверку работоспособности для одного процесса PM2 будут распределены по работникам, которые могут скрывать нездоровые цели

4) Сбои рабочих скрыты pm2, вы вряд ли когда-либо узнаете о них из вашей системы мониторинга (например, CloudWatch)

5) Балансировка нагрузки становится более сложной, поскольку у вас фактически будет несколько уровней балансировки нагрузки.

Кроме того, запуск нескольких процессов внутри контейнера Docker противоречит философии Docker, предусматривающей сохранение одного процесса на контейнер.

Один сценарий, о котором я могу подумать, - это если у вас очень ограниченный контроль над вашей средой докера. В этом случае запуск pm2 может быть единственным вариантом, позволяющим контролировать планирование рабочих процессов.

0 голосов
/ 05 июля 2018

Как правило, только один процесс на контейнер. Помня об этом, вы запускаете свой процесс внутри контейнера, используя node start server.js, как вы это делали без докера. Что произойдет здесь, если сбой сервера nodejs? ваш контейнер будет убит в этом случае. какой из них следует избегать.

Ваш контейнер будет уничтожен всякий раз, когда сервер nodejs выйдет из строя, потому что основной процесс выйдет из строя, и этот процесс должен быть на переднем плане как основной процесс контейнера.

Так что в конечном итоге для этого есть pm2. Вот как вы можете использовать pm2 и supervisord вместе, чтобы достичь этого.

Если вы также ищете пример, вот файл dockerfile и требуемый файл конфигурации. Используя альпийское самое легкое изображение 2 МБ.

FROM alpine:3.7
COPY supervisord.conf /etc/supervisord.conf
#installing nodejs and supervisord
RUN apk add  --no-cache --repository http://dl-cdn.alpinelinux.org/alpine/v3.7/main/ \
    --repository http://dl-cdn.alpinelinux.org/alpine/v3.7/community/ \  
   sudo supervisor nodejs>=8 
RUN npm i pm2  -g
COPY pm2.conf  /etc/supervisord.d/pm2.conf

supervisord.conf

[unix_http_server]
file = /tmp/supervisor.sock
chmod = 0777
chown= nobody:nogroup

[supervisord]
logfile = /tmp/supervisord.log
logfile_maxbytes = 50MB
logfile_backups=10
loglevel = info
pidfile = /tmp/supervisord.pid
nodaemon = true
umask = 022
identifier = supervisor

[supervisorctl]
serverurl = unix:///tmp/supervisor.sock

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[include]
files = /etc/supervisord.d/*.conf

pm2.conf

[supervisord]
nodaemon=true

[program:pm2]
command:pm2 start pm2_processes.yml --no-daemon
startretries:5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...