Multi-Container Application

Use Docker Compose to run a multi-container application

Start building, submit solution and get feedback from the community.
2Submit Solution·
5 upvotes10 upvotes

The goal of this project is to practice using Docker Compose to run a multi-container application in production. You will use Docker Compose to run a Node.js application and a MongoDB database.

Requirements

Create a simple unauthenticated Node.js API service for creating a simple todo list. The API should have the following endpoints:

  • GET /todos — get all todos
  • POST /todos — create a new todo
  • GET /todos/:id — get a single todo by id
  • PUT /todos/:id — update a single todo by id
  • DELETE /todos/:id — delete a single todo by id

The API should connect to MongoDB to store the todo items. You can use Express for the API and Mongoose to connect to MongoDB. You can use nodemon to automatically restart the server when the source code changes.

Requirement #1 - Dockerize the API

You are required to dockerize the API and have a docker-compose.yml file which will spin up a MongoDB container and the API container. If everything works, you should be able to access the API via http://localhost:3000 and the todos should be saved to the MongoDB container. Data should be persisted when the containers are stopped and started.

Requirement #2 - Setup a remote server

Setup a remote server on Digital Ocean, AWS or any other cloud provider. You should use terraform to create the server and Ansible to configure it properly i.e. setup docker, docker-compose, pulling the image from Docker Hub and running the containers.

Requirement #3 - Setup a CI/CD pipeline

Once you have everything working locally, push your code to GitHub and setup a CI/CD pipeline to deploy the application to the remote server. You can use GitHub Actions to setup the pipeline. Make sure to use docker-compose to run the application in the production environment.

Bonus - Setup a reverse proxy

Setup a reverse proxy using Nginx to allow you to access the application via http://your_domain.com. You should use docker-compose to setup the reverse proxy.


After completing this project, you will have a good understanding of Docker Compose, multi-container applications, CI/CD pipelines, and more.

Found a mistake? Help us improve.

Actively Maintained

We are always improving our content, adding new resources and adding features to enhance your learning experience.

Join the Community

roadmap.sh is the 7th most starred project on GitHub and is visited by hundreds of thousands of developers every month.

Rank 7th  out of 28M!

298K

GitHub Stars

Star us on GitHub
Help us reach #1

+90k every month

+1M

Registered Users

Register yourself
Commit to your growth

+1.5k every month

29K

Discord Members

Join on Discord
Join the community

Roadmaps Best Practices Guides Videos FAQs YouTube

roadmap.sh by @kamrify

Community created roadmaps, best practices, projects, articles, resources and journeys to help you choose your path and grow in your career.

© roadmap.sh · Terms · Privacy · Advertise ·

ThewNewStack

The top DevOps resource for Kubernetes, cloud-native computing, and large-scale development and deployment.