All Projects β†’ keymetrics β†’ Docker Pm2

keymetrics / Docker Pm2

Licence: mit
🐳 Official Docker Image for PM2 runtime

Projects that are alternatives of or similar to Docker Pm2

Appium Docker Android
Appium Server setup to automate android testing on real devices
Stars: ✭ 360 (-12.62%)
Mutual labels:  docker-image
Pg timetable
pg_timetable: Advanced scheduling for PostgreSQL
Stars: ✭ 382 (-7.28%)
Mutual labels:  docker-image
Matchering
🎚️ Open Source Audio Matching and Mastering
Stars: ✭ 398 (-3.4%)
Mutual labels:  docker-image
Docker Ngrok
An Ngrok v2 container based on wizardapps/ngrok and fnichol/ngrok
Stars: ✭ 368 (-10.68%)
Mutual labels:  docker-image
Js Stack From Scratch
πŸ› οΈβš‘ Step-by-step tutorial to build a modern JavaScript stack.
Stars: ✭ 18,814 (+4466.5%)
Mutual labels:  pm2
Please Contain Yourself
A Docker tutorial written for people who don't actually know Docker already.
Stars: ✭ 385 (-6.55%)
Mutual labels:  docker-image
Manifest Tool
Manifest tool for manifest list object creation/query
Stars: ✭ 355 (-13.83%)
Mutual labels:  docker-image
Trashemail
A hosted disposable email telegram bot; Extremely privacy friendly; Proudly hosted for community.
Stars: ✭ 408 (-0.97%)
Mutual labels:  docker-image
Awesome Docker
🐳 A curated list of Docker resources and projects
Stars: ✭ 20,870 (+4965.53%)
Mutual labels:  docker-image
Docker Bitcoind
πŸ’° Bitcoind Docker image that runs the Bitcoin node in a container for easy deployment
Stars: ✭ 391 (-5.1%)
Mutual labels:  docker-image
Gitlab Time Tracker
πŸ¦ŠπŸ•˜ A command line interface for GitLab's time tracking feature.
Stars: ✭ 371 (-9.95%)
Mutual labels:  docker-image
Mongo Seeding
The ultimate solution for populating your MongoDB database.
Stars: ✭ 375 (-8.98%)
Mutual labels:  docker-image
Docker Guacamole
A self-contained guacamole docker container for x64 and ARM. Remotely connect over SSH, RDP or VNC using HTML5.
Stars: ✭ 389 (-5.58%)
Mutual labels:  docker-image
Max Image Resolution Enhancer
Upscale an image by a factor of 4, while generating photo-realistic details.
Stars: ✭ 361 (-12.38%)
Mutual labels:  docker-image
Gitlab Ci Android
GitLab CI image for building Android apps
Stars: ✭ 399 (-3.16%)
Mutual labels:  docker-image
Docker Statsd Influxdb Grafana
Docker Image with Telegraf (StatsD), InfluxDB and Grafana
Stars: ✭ 352 (-14.56%)
Mutual labels:  docker-image
Fluentd Docker Image
Docker image for Fluentd
Stars: ✭ 383 (-7.04%)
Mutual labels:  docker-image
Docker Ipsec Vpn Server
Docker image to run an IPsec VPN server, with IPsec/L2TP, Cisco IPsec and IKEv2
Stars: ✭ 4,356 (+957.28%)
Mutual labels:  docker-image
Arch Delugevpn
Docker build script for Arch Linux base with Deluge, Privoxy and OpenVPN
Stars: ✭ 404 (-1.94%)
Mutual labels:  docker-image
Picluster
A Simplified Docker Swarm or Kubernetes Alternative to Container Scheduling and Orchestration
Stars: ✭ 390 (-5.34%)
Mutual labels:  docker-image

PM2

Docker Hub

Production ready nodeJS Docker image including the PM2 runtime.

The goal of this image is to wrap your applications into a proper Node.js production environment. It solves major issues when running Node.js applications inside a container like:

  • Correct PID 1 signals Handling & Forwarding
  • Graceful application Start and Shutdown
  • Seamless application clustering to increase performance and reliability

Further than that, using PM2 as a layer between the container and the application brings PM2 features like application declaration file, customizable log system, source map support and other great features to manage your Node.js application in production environment.

Tags available

Image Name Operating system Dockerfile
keymetrics/pm2:latest-alpine Alpine latest-alpine
keymetrics/pm2:15-alpine Alpine 15-alpine
keymetrics/pm2:14-alpine Alpine 14-alpine
keymetrics/pm2:12-alpine Alpine 12-alpine
keymetrics/pm2:10-alpine Alpine 10-alpine
Image Name Operating system Dockerfile
keymetrics/pm2:latest-buster Debian Buster latest-buster
keymetrics/pm2:15-buster Debian Buster 15-buster
keymetrics/pm2:14-buster Debian Buster 14-buster
keymetrics/pm2:12-buster Debian Buster 12-buster
keymetrics/pm2:10-buster Debian Buster 10-buster
Image Name Operating system Dockerfile
keymetrics/pm2:latest-stretch Debian Stretch latest-stretch
keymetrics/pm2:15-stretch Debian Stretch 14-stretch
keymetrics/pm2:14-stretch Debian Stretch 14-stretch
keymetrics/pm2:12-stretch Debian Stretch 12-stretch
keymetrics/pm2:10-stretch Debian Stretch 10-stretch
Image Name Operating system Dockerfile
keymetrics/pm2:latest-jessie Debian Jessie latest-jessie
keymetrics/pm2:15-jessie Debian Jessie 14-jessie
keymetrics/pm2:14-jessie Debian Jessie 14-jessie
keymetrics/pm2:12-jessie Debian Jessie 12-jessie
keymetrics/pm2:10-jessie Debian Jessie 10-jessie
Image Name Operating system Dockerfile
keymetrics/pm2:latest-slim Debian Stretch (minimal packages) latest-slim
keymetrics/pm2:15-slim Debian Stretch (minimal packages) 15-slim
keymetrics/pm2:14-slim Debian Stretch (minimal packages) 14-slim
keymetrics/pm2:12-slim Debian Stretch (minimal packages) 12-slim
keymetrics/pm2:10-slim Debian Stretch (minimal packages) 10-slim

You can find more information about the image variants here.

The build process of these images is automatically triggered each time NodeJS's Docker images are built. The build process of these images is automatically triggered each time Docker PM2's GitHub repo master branch is pushed. The build process of these images is automatically triggered each time PM2's GitHub repo master branch is pushed.

Usage

Let's assume the following folder structure for your project.

`-- your-app-name/
    |-- src/
        `-- app.js
    |-- package.json
    |-- pm2.json     (we will create this in the following steps)
    `-- Dockerfile   (we will create this in the following steps)

Create a pm2 ecosystem file

Create a new file called pm2.json with the following content:

{
  "name": "your-app-name",
  "script": "src/app.js",
  "instances": "2",
  "env": {
    "NODE_ENV": "development"
  },
  "env_production" : {
    "NODE_ENV": "production"
  }
}

You can choose the name of the ecosystem file arbitrarily, but we will assume you called it pm2.json in the following steps.

See the documentation for more information about how to configure the ecosystem file.

Create a Dockerfile file

Create a new file called Dockerfile with the following content:

FROM keymetrics/pm2:latest-alpine

# Bundle APP files
COPY src src/
COPY package.json .
COPY pm2.json .

# Install app dependencies
ENV NPM_CONFIG_LOGLEVEL warn
RUN npm install --production

# Show current folder structure in logs
RUN ls -al -R

CMD [ "pm2-runtime", "start", "pm2.json" ]

See the documentation for more info about the pm2-runtime command.
All options available are listed here.

Build and Run your image

From your Node.js app project folder launch those commands:

$ docker build -t your-app-name .
$ docker run your-app-name

Custom configurations

Enable git auto-pull

If you want to Automatically synchronize your application with git add this into your Dockerfile:

RUN pm2 install pm2-auto-pull

Make sure the .git is present in your application source folder.

Enable Monitor server

If you want to Automatically monitor vital signs of your server add this into your Dockerfile:

RUN pm2 install pm2-server-monit

Use Keymetrics.io dashboard

Keymetrics.io is a monitoring service built on top of PM2 that allows to monitor and manage applications easily (logs, restart, exceptions monitoring, etc...). Once you created a Bucket on Keymetrics you will get a public and a secret key.

To enable Keymetrics monitoring with pm2-runtime, you can whether use the CLI option –public XXXX and –secret YYYY or you can pass the environment variables KEYMETRICS_PUBLIC and KEYMETRICS_SECRET.

From your Node.js app project folder launch those commands:

$ docker build -t your-app-name .
$ docker run -e KEYMETRICS_PUBLIC=XXXX -e KEYMETRICS_SECRET=YYYY your-app-name

Make sure that the ports 80 (TCP outbound), 443 (HTTPS outbound) and 43554 (TCP outbound) are allowed on your firewall.

See the troubleshooting in case you encounter any problem.

Enabling Graceful Shutdown

When the Container receives a shutdown signal, PM2 forwards this signal to your application allowing to close all the database connections, wait that all queries have been processed or that any other final processing has been completed before a successful graceful shutdown.

Catching a shutdown signal is straightforward. You need to add a listener in your Node.js applications and execute anything needed before stopping the app:

process.on('SIGINT', function() {
  db.stop(function(err) {
    process.exit(err ? 1 : 0);
  });
});

By default PM2 will wait 1600ms before sending a final SIGKILL signal. You can modify this delay by setting the kill_timeout option inside your application configuration file.

Expose health endpoint

The --web [port] option allows to expose all vital signs (docker instance + application) via a JSON API.

CMD ["pm2-runtime", "start", "pm2.json", "--web"]

or

CMD ["pm2-runtime", "start", "pm2.json", "--web", "port"]

Useful commands

Command Description
$ docker exec -it <container-id> pm2 monit Monitoring CPU/Usage of each process
$ docker exec -it <container-id> pm2 list Listing managed processes
$ docker exec -it <container-id> pm2 show Get more information about a process
$ docker exec -it <container-id> pm2 reload all 0sec downtime reload all applications

Documentation

The documentation can be found here.

Authors

See also the list of contributors who participated in this project.

License

This project is licensed under the MIT License - see the LICENSE file for details.

License information for the software contained in this image can be found here (pm2) and here (node).

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].