DEV Community

Cover image for Docker: NodeJs and MongoDb Services
Abayomi Ogunnusi
Abayomi Ogunnusi

Posted on


Docker: NodeJs and MongoDb Services

Hello there, This post is a continuation of my docker article. To check click the links.
Docker in and out
Dockerize NodeJs app
To follow along, you must have docker and node installed.

Today, we will learn how we can deploy two services NodeJs app with MongoDb.

Find the source code here


🎯 Node Project Setup
🎯 Docker setup
🎯 Folder structure
🎯 Code breakdown

Initiate the project

npm init -y

Install the dependencies

npm i express dotenv mongoose


Image description

Docker Setup

To pull node and mongo image, go to docker hub and get the official images. click
Make sure your docker deamon is on. Click on the docker desktop to activate the deamon.

To check if your docker is installed on your machine, run docker --version in your terminal
Image description

Pull node image

Image description

Pull the mongo image

Image description

Check the docker images

docker image ls

Folder structure

Here's our folder structure in its most basic architecture.
Image description

Code breakdown

🐋 Database setup

Image description
In this config folder, we imported the mongoose module, connected to our database and exported the configuration.

⚠️ Note:

  1. The docker-node-mongo can be named anything
  2. Notice the mongo:27017/docker-node-mongo, this replaces the localhost we use in our development mode.

🐋 Model and Schema

Image description
Here we import the mongoose library and create a new schema for the user.

🐋 Routes

Image description
We write the business logic and export the express router and thereafter mount it in the main entry file app.js

🐋 .env

Image description

🐋 app.js
const express = require('express');
const dotenv = require('dotenv');
const connectDb = require('./config/db');

const app = express();

const port = process.env.NODE_LOCAL_PORT || 3020;

app.use(express.urlencoded({ extended: true }));

app.get('/', (req, res) => {
  res.send('Hello World');

app.use('/', require('./routes/user'));

app.listen(port, () => {
  console.log(`Server is running on port ${port}`);
Enter fullscreen mode Exit fullscreen mode

Now, let's test our app locally by running the following command:
npm start
Image description

Next, let's stop the server by running Ctrl + C.

Docker file

Image description

The first line is the base image that we want to use.

The WORKDIR command is used to set the working directory for the container.

We copy the package.json file to the current directory.
We install our dependencies.

The COPY command copies the contents of the current directory to the Dockerfile's context.

The EXPOSE command is used to expose ports to the outside world.

The CMD directive is used to specify the command that will be run when the image is run.

⚠️ We could actually go ahead to build this image using this Dockerfile by running the build command like docker build -t [name of container] and then run using docker run -p 8082:8082 [image name] ... but it will not connect to the mongodb service. In other to be able to run the two services we need a docker-compose.yml file

Docker compose file

Image description
Lastly, we setup our docker-compose.yml for the app and mongo service. This file helps us to build and link our NodeJs app to the mongo image.


To test we run this command:
docker-compose up -d

The -d flag means we are running the container in a detached mode.
Image description

To check running containers

Image description

We see the two containers up and running.

Let's go over to our browser
Image description

Testing the POST route.

Image description

Lets check our created user using the docker exec command.
Check the running container
Image description

Enter into the mongo container
Image description

Image description


I hope this post was helpful. Check the above link for the source code if you get stuck while following along.


Traversy Media, Docker with Mongo

Top comments (0)