Dockerizing a basic Node.js/Nest.js application

Today we will Dockerize a Node.js application. We will use Nest.js for today. But the commands and processes are exactly the same for any Node.js application built by some other frameworks (like Express.js).

What is Nest.js, and why are we using it?

Nest.js is a progressive Node.js framework. There are so many ways to structure Nodejs projects especially when we use Express or other similar frameworks. But it can be a problem when multiple people work on the same project. Nest.js comes to the rescue in these scenarios. It follows a certain pattern of creating a project and helps to keep the different modules of our app separate from each other, which is great!

Getting started with Nest.js

First, we need to install the Nest.js cli. Run the following command on your terminal.

npm i -g @nestjs/cli

After installation is complete, we can easily scaffold a new Nest.js app like this.

nest new example-app

After initializing, we can go into the project directory and start the project immediately!

cd example-app

yarn start:dev

Your project will run at port 3000 on your local host. Open your browser and go to http://localhost:3000/, and you will get a ‘Hello World’ response!

The first response from NestJS app!

What is Docker, and why should we use it?

Docker is a way of containerizing your application so that you don’t have to worry about the different runtime, dependencies, or versions. If a docker Image runs on your local machine, it will run on any machine. It’s great for easily deploying our apps or sharing with others. We will dockerize our app step by step now.

Step 1: Install Docker

For installation of docker, go here https://docs.docker.com/get-docker/

Step 2: Add Docker to your project

Add a new file named Dockerfile inside your root directory.

Step 3: Add Docker Commands

Add the following code to your Dockerfile.

Let’s analyze the code line by line.

FROM node:12

Here we are setting our base image upon which our app will run. Here we are choosing node:12 it is an official image of the node which can be found in the docker hub.

WORKDIR /app

we set our work directory, which is named app.

ADD package.json /app/package.json

we move the package.json file into our working directory.

RUN npm install

we run our usual npm install inside our root directory

ADD . /app

we move the contents into the app directory

we expose the 3000 port in the container so that it can communicate with the outside of the container. it will depend on which port your application is running on. for nests, usually, it’s 3000

CMD ["npm", "run", "start"]

finally, we run our command to start the app. Any docker file can have only one CMD command in this.

Step 4: Build your Docker image

Run the following command to build your docker image. run this from the same root directory of your project

docker build . -t example-app

Here we are naming our image by using the -t. we can give any name to our image. for consistency, we are using the project name here. it will take a while to build the image.

Step 5: Run the docker image

We can view the images by running them.

docker images

It will list all the images on our machine

images in our machine

we can see that our image has ‘latest’ as a tag. It is given by default. We can retag our image if we want to. Now to run our image, we first need to stop the running instance of the project by Ctrl+ C and then run the following command ….

docker run --rm -it -p 3000:3000/tcp example-app:latest

This command has several parts, but the most important part is to look into the 3000:3000/tcp here; the first 3000 means the port of our local host that we want to be mapped into the running docker image. And the second 3000 is the exposed port from inside the docker container as we set before.

If we want to see if that worked, we can go to our browser as before and go to. http://localhost:3000/ to see if it worked as expected.

Step 6: Playing with it

Now you can change your code, rebuild the image, and run again to see if the change is found in the docker image.

You can find the code of the project here. https://github.com/Mohammad-Faisal/example-nestjs-app

Get in touch with me via LinkedIn


Share this post


Read more articles...

team

Docker Practical Cheat Sheet

team

How to use FFMpeg with NodeJS and Docker

team

Express and Database with Docker for Local Development

Profile Image

Who I am

Hi, I amMohammad Faisal, A full-stack software engineer @Cruise , working remotely from a small but beautiful country named Bangladesh.

I am most experienced inReactJS,NodeJS andAWS

Buy Me a Coffee Widget