How to deploy Node.js with Docker

How to deploy Node.js with Docker

Preface

Node will be used as the middle layer in the project, and docker is used to deploy node. The key points and steps of deployment are summarized and recorded here. I will not go into details about the introduction and installation of docker. There are also many related tutorials and articles on the Internet. You can search and view them if you need them.

Project Structure

`-- docker-node
  |-- data
  |-- server
    |-- app.js
    |-- Dockerfile
    |-- process.yml
    |-- package.json
  |-- docker-compose.yml

1. Create a Node.js program

app.js

const express = require('express');
const app = express();

app.get('/', (req, res) => res.send('hello world!'));

app.listen(3008);

2. Create a Dockerfile

FROM node:8.9-alpine

RUN mkdir -p /usr/src/app

WORKDIR /usr/src/app

RUN npm set registry https://registry.npm.taobao.org/

RUN npm install 

CMD ["./node_modules/pm2/bin/pm2-docker", "process.yml"]

From the Dockerfile, we can see that we run the node application through pm2-docker. With PM2, we can monitor file changes to achieve application restart, log storage and other effects. Here we need a process.yml configuration file. For related usage, please refer to the PM2 document.

process.yml

apps:
 - script : 'app.js'
  name : 'dokcer-node'
  exec_mode: 'fork'
  watch : true
  instances: 1
  log_date_format : 'YYYY-MM-DD HH:mm Z'
  ignore_watch: ['node_modules']

3. Create docker-compose.yml

In production environments, we often use more than one container. We can manage multiple Docker containers through a configuration file, and then use docker-compose to start, stop, and restart the application.

docker-compose.yml

version: "3.0"
services:
 server_node:
  container_name: server-node
  build: 
   context: ./server
  volumes:
   - ./server:/usr/src/app
  ports:
   - "3008:3008"
  environment:
   - TZ=Asia/Shanghai

 Portainer:
  image: portainer/portainer:1.11.4
  container_name: portainer
  expose:
   - "9000"
  ports:
   - "9000:9000"
  volumes:
   - /var/run/docker.sock:/var/run/docker.sock
   - ./data/portainer:/data
  environment:
   - TZ=Asia/Shanghai

4. Start the container

After the above files are created, we execute the following command to create our image and start the container

$ docker-compose -f docker-compose.yml up -d

5. Testing

1. Access local port 3008

2. Test the automatic restart function of node when the code changes. We change "hello world!" to "restart!!!!" and refresh the page again.

3. Use Portainer to manage containers. Compared with the command line, the visual interface allows us to easily and quickly view container logs, container configuration, status, and restart and delete containers. We can access the local port 9000 (configured in docker-compese.yml), and the results are as follows.

The above is the full content of this article. I hope it will be helpful for everyone’s study. I also hope that everyone will support 123WORDPRESS.COM.

You may also be interested in:
  • Summary of Node.js service Docker container application practice
  • How to build docker+jenkins+node.js automated deployment environment from scratch
  • Docker uses dockerfile to start node.js application
  • How to set up Node.js with Docker
  • Detailed explanation of using Docker to deploy Node.js development environment under Windows
  • Detailed steps for quickly deploying Node.js applications on Docker
  • How to package Node.js web applications into Docker containers

<<:  An elegant way to handle WeChat applet authorization login

>>:  Detailed tutorial on how to install MySQL 5.7.18 in Linux (CentOS 7) using YUM

Recommend

JavaScript Canvas implements Tic-Tac-Toe game

This article shares the specific code of JavaScri...

Detailed introduction to CSS priority knowledge

Before talking about CSS priority, we need to und...

Analysis of Linux configuration to achieve key-free login process

1.ssh command In Linux, you can log in to another...

Design Association: Why did you look in the wrong place?

I took the bus to work a few days ago. Based on m...

Vue implements scrollable pop-up window effect

This article shares the specific code of Vue to a...

How to use rem adaptation in Vue

1. Development environment vue 2. Computer system...

Steps to install MySQL 5.7 in binary mode and optimize the system under Linux

This article mainly introduces the installation/st...

Example analysis of the use of GROUP_CONCAT in MySQL

This article uses an example to describe how to u...

MySQL multi-table join introductory tutorial

Connections can be used to query, update, and est...

Native js to implement 2048 game

2048 mini game, for your reference, the specific ...

Detailed tutorial on replacing mysql8.0.17 in windows10

This article shares the specific steps of replaci...

MySQL optimization strategy (recommended)

In summary: 1. Consider performance when designin...

Detailed explanation of the solution to permission denied in Linux

Permission denied: The reason for this is: there ...