Node.js lightweight Docker image including the PM2 runtime for production applications.
This Docker image in association with PM2, increase application uptime, increase performance (spawn multiple processes and load-balance network query without any code change) and allow graceful state change, adapted to production environment.
$ docker pull keymetrics/pm2-docker-alpine
- keymetrics/pm2-docker-alpine:latest with the latest version of Node.js
- keymetrics/pm2-docker-alpine:7 with Node.js 7.4
- keymetrics/pm2-docker-alpine:6 with Node.js 6.9
- keymetrics/pm2-docker-alpine:4 with Node.js 4.7
- keymetrics/pm2-docker-alpine:next with Node.js latest and pm2@next
These images are automatically built from the Docker hub based on this Github repository folder arrangement.
Running the container
Make sure you declared a process file called process.yml, this file will be started by PM2.
# Get example app $ git clone https://github.com/keymetrics/pm2-docker-alpine # Run example app, mounted as a volume $ docker run -p 80:3000 -v `pwd`/example_app:/app keymetrics/pm2-docker-alpine
For Keymetrics linking you can set the extra env variables:
-e "KEYMETRICS_SECRET=YYY -e "KEYMETRICS_PUBLIC=XXX" -e "INSTANCE_NAME=hostname"
Append to pm2-docker CMD directive:
- --json to output logs in JSON
- --format to output logs in key=val style
- --raw to display logs in raw format
Monitoring CPU/Usage of each process
$ docker exec -it <container_id> pm2 monit
Listing managed processes
$ docker exec -it <container_id> pm2 list
Get more information about a process
$ docker exec -it <container_id> pm2 show <app_name>
0sec downtime reload all applications
$ docker exec -it <container_id> pm2 reload all
Automatically synchronize your application with git
Add into your Dockerfile:
RUN pm2 install pm2-auto-pull
Or try it:
$ docker exec -it <container_id> pm2 install pm2-auto-pull
Make sure the .git is present in your application source folder.