У вас есть пара вопросов, я постараюсь ответить на них ниже:
1. Хорошая ли идея помещать мои приложения в один контейнер?
Это зависит от того, есть много случаев, когда вы хотели бы запускать один и тот же контейнер, выполняя несколько задач. Но это действительно зависит от использования процессора/оперативной памяти/памяти в задании. И как часто это происходит?
В любом случае, исходя из опыта, я могу сказать, что если бы я запускал cronjob из одного и того же контейнера, я бы всегда использовал для этого рабочий подход, используя либо ядра NodeJS worker_threads
или cluster
модуль. Потому что вы не хотите, чтобы cronjob влиял на поведение основного потока. У меня есть пример запуска 2 приложений в нескольких потоках в следующем репозитории.
2. должен ли я просто отказаться от докера и запускать приложения в родном Linux моего ec2
Докер и PM2-это 2 действительно разные вещи. Docker в основном предназначен для контейнеризации всего вашего приложения узла, поэтому его гораздо проще отправить. PM2-это менеджер процессов для узла, который следит за тем, чтобы ваше приложение работало и имело несколько хороших показателей, и регистрирует пользовательский интерфейс в показателях PM2. Вы определенно можете использовать 2 вместе, так как PM2 также гарантирует, что ваше приложение запустится после сбоя.
Однако, если вы используете pm2, вам необходимо использовать pm2-время выполнения при использовании docker. Пример Файла настройки:
FROM node:16.9.0
WORKDIR /home/usr/app
COPY . .
RUN npm ci && npm run build
# default command is starting the server
CMD ["npx", "pm2-runtime", "npm", "--", "start"]