Originally published by ganeshmani009 at cloudnweb.dev
Firstly, Docker is containerization platform where developers can package the application and run as a container.
In simple words, docker runs each application as a separate environment which shares only the resources such as os, memory, etc.
Virtual Machine vs Docker
Here, we can find the difference between the docker and virtual machines.
To read more about docker, Docker Docs
we are gonna see how to dockerize a node.js application. before that, docker has to be installed on the machine. Docker Installation
After installing the docker, we need to initialize the node application.
npm init --yes npm install express body-parser
the first command initializes the package.json file which contains the details about the application and dependencies. the second one install the express and bodyParser
create a file called server.js and paste the following code
'use strict';const express = require(‘express’);
// Constants
const PORT = 8080;
const HOST = ‘0.0.0.0’;// App
const app = express();
app.get(‘/’, (req, res) => {
res.send(‘You have done it !!!\n’);
});app.listen(PORT,()=>{
console.log(Running on http://${HOST}:${PORT}
);
});
this runs the basic express application server. now, we need to create the docker image file. create a file name called Dockerfile and add the following commands
FROM node:8
First we install the node image from the Docker hub to the image
WORKDIR /usr/src/app
Next, we set the /usr/src/app as the working directory in the docker image
COPY package*.json ./
RUN npm install
then copies the package.json from the local machine to docker image. It’s not an efficient way to copy the dependencies from local to docker image.
so we are just copying the package.json and install all the dependencies in the docker image
COPY . .
EXPOSE 8080CMD [ “npm” , “start” ]
it copies all the source code from local to docker image, binds the app to port 8080 in the docker image. docker image port 8080 can be mapped with local machine port. then we run the command
Your Dockerfile should now look like:
# this install the node image from docker hub
FROM node:8this is the current working directory in the docker image
WORKDIR /usr/src/app
#copy package.json from local to docker image
COPY package*.json ./
#run npm install commands
RUN npm install
#copy all the files from local directory to docker image
COPY . .
#this port exposed to the docker to map.
EXPOSE 8080CMD [ “npm” , “start” ]
create a .dockerignore file with the following content:
node_modules
npm-debug.log
now, we need to build our image in the command line as :
$ docker build -t <your username>/node-web-app .
-t flag used to tag a name to image. so, it will be easy to identify with a name instead of id. Note : dot in the end of command is important(else it won’t work)
we could run the image using the following command :
docker run -p 49160:8080 -d <your username>/node-web-app
we can check it using
curl -i localhost:49160
output should be:
HTTP/1.1 200 OK
X-Powered-By: Express
Content-Type: text/html; charset=utf-8
Content-Length: 23
ETag: W/“17-C2jfoqVpuUrcmNFogd/3pZ5xds8”
Date: Mon, 08 Apr 2019 17:29:12 GMT
Connection: keep-aliveYou have done it !!!
To read more
https://github.com/nodejs/docker-node/blob/master/docs/BestPractices.md
Originally published by ganeshmani009 at cloudnweb.dev
=============================
Thanks for reading
If you liked this post, share it with all of your programming buddies!
Follow me on Facebook | Twitter
☞ The Complete Node.js Developer Course (3rd Edition)
☞ Angular & NodeJS - The MEAN Stack Guide
☞ NodeJS - The Complete Guide (incl. MVC, REST APIs, GraphQL)
☞ Best 50 Nodejs interview questions from Beginners to Advanced in 2019
☞ Node.js 12: The future of server-side JavaScript
☞ Docker for Absolute Beginners
☞ How to debug Node.js in a Docker container?
☞ Docker Containers for Beginners
☞ Deploy Docker Containers With AWS CodePipeline
#node-js #docker #web-development