DEV Community

Cover image for Add a Mongo Database With Docker to Your Project
Sophia Brandt
Sophia Brandt

Posted on • Originally published at rockyourcode.com on

Add a Mongo Database With Docker to Your Project

Quickly Add MongoDB to Your App With Docker

MongoDB is an open-source NoSQL database that stores data in JSON-like documents.

NoSQL databases are a natural choice if you don't know your data requirements upfront.

They are also a good fit for applications like product catalogs or blog content.

That's where an object-oriented approach shines.

Let's see how we can easily add a Mongo database with Docker and Docker Compose.

Prerequisites:

Run MongoDB with Docker

In your project folder, open the terminal and run:

docker run --name mongo -p 27017:27017 -d mongo
Enter fullscreen mode Exit fullscreen mode

The command will pull the default image from Dockerhub and start the database on port 27017 on localhost.

Connect Your App to MongoDB

That's fine and dandy, but how can I use the database from my app?

The easiest way is to use the URL connection string.

For the default configuration, you have to use the following format with the library of your choice (TypeORM or similar):

mongodb://localhost/<db-name>
Enter fullscreen mode Exit fullscreen mode

Replace <db-name> with the name of your database.

Please note that you don't have to supply a username or password. The default setup has no user and no password.

Docker Compose

You can add a docker-compose.yml file to your project. With Docker Compose, you don't have to remember the exact commands for docker run.

In your project folder, add the docker-compose.yml file with the following content:

version: '2.4'

services:
  db:
    image: mongo:4.0.17-xenial
    ports:
      - 27017:27017
    environment:
      - MONGO_INITDB_DATABASE=${DB_NAME}
    restart: always
    volumes:
      - db-data:/data/db:delegated

volumes:
  db-data:
Enter fullscreen mode Exit fullscreen mode

(For alternative MongoDB versions, check out Dockerhub.)

We create a service with the name db (name it however you want). The container runs on port 27017 and binds that port to localhost. That way, you can connect to the database from outside of the container.

We also create a volume. Now the data persists between subsequent Docker runs. Volumes can be tricky, but for local development, that setup should suffice.

You can read more about volumes on the Docker documentation site.

Now we need an environment file to create the database. Create a new file called .env in your project:

DB_NAME=school
Enter fullscreen mode Exit fullscreen mode

You can reuse that file for your app, too. For example, with JavaScript, you can use dotenv to read the content of your file.

Here's an example of a TypeORM configuration:

import { TypeOrmModuleOptions } from '@nestjs/typeorm'
import 'dotenv/config'

export const typeOrmConfig: TypeOrmModuleOptions = {
  type: 'mongodb',
  url: `mongodb://localhost/${process.env.DB_NAME}`,
  useUnifiedTopology: true,
}
Enter fullscreen mode Exit fullscreen mode

Docker Compose Commands

Inside the root directory, open the terminal and type:

docker-compose up -d
Enter fullscreen mode Exit fullscreen mode

The command will start the container in detached mode (in the background).

If you want to stop the container:

docker-compose down -v
Enter fullscreen mode Exit fullscreen mode

(-v for bringing down the volume as well.)

If you want to use the command line to connect to the database:

docker-compose exec db mongo
Enter fullscreen mode Exit fullscreen mode
  • docker-compose exec: execute a command inside a running container
  • db: name of the service (see configuration in docker-compose.yml)
  • mongo: terminal command to run, see mongo

Now you are in the Mongo shell. Let's say you want to see all entries in the database school.

Select database school:

use school
Enter fullscreen mode Exit fullscreen mode

Show all data from the collection lessons:

db.lessons.find().pretty()
Enter fullscreen mode Exit fullscreen mode

Recap

You've seen how to set up a MongoDB instance on your computer with only a few lines of code.

Now you can develop your application with a NoSQL database!

If you'd like to use a relational database, you can read my guide on using Postgres with Docker.

Further Reading

Top comments (0)