In this article, We are going to cover How to Create Docker Image for Node JS Application/How to Deploy Node js Application on Docker
Table of Contents
Introduction
Node.js is free and an open-source cross-platform JavaScript run-time environment that allows server-side execution of JavaScript code. NPM(Node Package Manager) is command line tool for Node.js packages that installs, updates and uninstall packages in your projects.
Docker provides a robust client-server application architecture with a powerful server, REST API and command-line interface client.
Prerequisites
- Ubuntu 16/18/20.04 LTS
- SSH access with sudo privileges
- Firewall Port: 3000
Install Node JS and NPM on Ubuntu
If you are using Ubuntu OS then Install Node JS and NPM on Ubuntu using below articles
How to Install Node.js and NPM on Ubuntu 20.04 LTS
How to Install Latest Node.js and NPM on Ubuntu 19.04,18.04/16.04 LTS
If you are using other OS then follow Node JS Official Site to Install if not installed
Step 1: Creating Node.js Application
Lets create the directory named nodejsdocker to add node js files to test.
$ sudo mkdir nodejsdocker
Navigate to nodejsdocker directory
$ cd nodejsdocker
Create the package.json file where you will specify all dependencies of your Node JS application
$ sudo nano package.json
paste the below lines into it
{ "name": "Docker_NodeJS_App", "version": "0.1", "description": "Node.js Application with Docker", "main": "server.js", "scripts": { "start": "node server.js" }, "dependencies": { "express": "^4.17.1" } }
Next create the server.js page to test Node JS application with express framework
$ sudo nano server.js
Paste the below lines in it
'use strict'; const express = require('express'); // Constants const PORT = 3000; const HOST = '0.0.0.0'; const app = express(); app.get('/', (req, res) => { res.send('Testing Node JS Application'); }); app.listen(PORT, HOST); console.log(`Running on http://${HOST}:${PORT}`);
Step 2: How to Create Docker Image for Node JS Application
Before creating Docker Image for Node JS application install the docker using below link if not installed.
How to Install Docker on Ubuntu 19.10/18.04/16.04 LTS
How to Install Docker on Windows 10
For other OS follow Docker Official Guide
Next create the Dockerfile with below command in Project root directory
$ sudo nano Dockerfile
Paste the below Dockerfile instructions in it
FROM node:12 # To Create nodejsapp directory WORKDIR /nodejsapp # To Install All dependencies COPY package*.json ./ RUN npm install # To copy all application packages COPY . . # Expose port 3000 and Run the server.js file to start node js application EXPOSE 3000 CMD [ "node", "server.js" ]
Now build the Docker Image using below command
$ sudo docker build -t nodejsdocker .
Sample Output:
added 50 packages from 37 contributors and audited 50 packages in 6.293s found 0 vulnerabilities Removing intermediate container 3e97b890d792 ---> 6a354a5d9d56 Step 5/7 : COPY . . ---> 9f75f8ce0d6f Step 6/7 : EXPOSE 3000 ---> Running in 66c4a65f7392 Removing intermediate container 66c4a65f7392 ---> 9009232a55e9 Step 7/7 : CMD [ "node", "server.js" ] ---> Running in 8d4d96bc2877 Removing intermediate container 8d4d96bc2877 ---> ba86a68c01e4 Successfully built ba86a68c01e4 Successfully tagged nodejsdocker:latest
once build is successful , you can see list of docker images using below command
$ docker images
Output:
REPOSITORY TAG IMAGE ID CREATED SIZE nodejsdocker latest ba86a68c01e4 5 minute ago 922MB <none> <none> 5c85c5a4da87 5 minute ago 922MB <none> <none> 29fa5eed7d5e 5 minute ago 918MB node 12 e163934eebb0 5 minute ago 918MB alpine latest a24bb4013296 5 minute ago 5.57MB
We have covered, How to create Docker Image for Node JS Application.
Run the Docker container , -p is used to map the public port to docker container internal port, Here I am using same port for both.
$ docker run -p 3000:3000 nodejsdocker
Output:
docker run -p 3000:3000 nodejsdocker Running on http://0.0.0.0:3000
If you want to run Docker container in detached mode use below command
$ docker run -p 3000:3000 -itd CONTAINER_ID
To check docker Process
$ docker ps
Output:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ac89891c8dfb nodejsdocker "docker-entrypoint.s…" 10 minute ago Up 37 minutes 0.0.0.0:3000->3000/tcp nostalgic_robinson
To check Docker Container logs
$ docker logs CONTAINER_ID
Output:
Running on http://0.0.0.0:3000
Testing the Docker Container
Open your favorite browser and type server IP with container public port
$ Server_IP:port
Output:
OR
You can test also using curl command
$ curl -i http://localhost:3000 HTTP/1.1 200 OK X-Powered-By: Express Content-Type: text/html; charset=utf-8 Content-Length: 27 ETag: W/"1b-uO/TfUtLPwJy4DS2pakC/kf+9oA" Date: Thu, 11 Jun 2020 04:55:34 GMT Connection: keep-alive Testing Node JS Application
To stop Docker container
$ docker stop CONTAINER_ID
Pushing Docker Image to Docker Hub Repository
If you want to push the docker image to Docker Hub Registery. First login to https://hub.docker.com with ID and password using command line
$ docker login Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one. Username: fosstechnix Password: Login Succeeded
Now push Docker Image to Docker Hub Repository
$ docker push nodejsdocker
Error: denied: requested access to the resource is denied:docker
If you are getting above error while pushing docker images to docker hub repository first time then first tag the Docker Image and try to push again
$ docker tag nodejsdocker fosstechnix/nodejsdocker
Push the Docker Image again
$ docker push fosstechnix/nodejsdocker
Conclusion
In this article, We have covered How to Create Docker Image for Node JS Application/How to Deploy Node js Application on Docker, building the Docker Image from Dockerfile, Running the Node JS Docker Container and Testing Node JS Docker Container.
Related Article:
Docker Installation
How to Install Docker on Ubuntu 19.10/18.04/16.04 LTS
How to Install Docker on Windows 10
Dockerfile Instructions
Dockerfile Instructions with Examples
Docker Image
Shell Script to Build Docker Image [2 Steps]
Docker Compose
Docker Compose Keycloak Postgres [2 Steps]
Docker Commands
100 Docker Basic Commands with Examples
81 Docker Command Cheat Sheet in Image and PDF Format
Docker Interview Questions and Answers for Freshers
50 Real Time Docker Interview Questions and Answers
Reference