Avete un paio di domande, provo a rispondere qui di seguito:
1. È una buona idea di mettere il mio applicazioni in un unico contenitore?
Dipende, ci sono molti casi, motivo per cui si desidera eseguire lo stesso contenitore facendo più cose. Ma dipende molto dalla CPU/RAM/Memoria di utilizzo del lavoro. E come spesso fa?
Comunque per esperienza posso dire che se ho un cronjob dallo stesso contenitore, vorrei utilizzare sempre un lavoratore approccio per questo utilizzando NodeJS core worker_threads
o cluster
modulo. Perché non si desidera che un cronjob impatti il comportamento del thread principale. Ho un esempio di esecuzione di 2 applicazioni su più thread nella seguente repo.
2. devo solo fosso mobile ed eseguire le applicazioni native per linux del mio ec2
Mobile e PM2 sono 2 veramente cose diverse. Docker è fondamentalmente per containerize intero Nodo app, quindi è molto più facile per la nave. PM2 è un process manager per il nodo e fa in modo che l'app è e viene fornito con alcune belle le metriche e i registri di interfaccia utente sul PM2 metriche. Si può sicuramente utilizzare i 2 insieme, come PM2 fa anche in modo che l'app si avvia dopo si blocca.
Tuttavia, se si utilizza pm2 devi usare il pm2-runtime quando si utilizza la finestra mobile. Esempio Dockerfile:
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"]