Skip to content

Aayushsah6969/Docker_Tutorial

Repository files navigation

🐳 MERN Docker Starter β€” Complete Beginner to Entry-Level Guide

A clean, end-to-end MERN stack setup using Docker and Docker Compose. This repository is designed for first-time Docker users who want a smooth full-stack workflow.


🎯 Project Goal

  • Run a full MERN stack using Docker
  • Understand images, containers, volumes, and networking
  • Enable reproducible development environments
  • Prepare for production-ready container workflows

🧱 Tech Stack

  • Frontend: React (Vite)
  • Backend: Node.js + Express
  • Database: MongoDB (containerized)
  • DB GUI: Mongo Express
  • Containerization: Docker + Docker Compose

πŸ“ Project Structure

mern-docker-app/
β”‚
β”œβ”€β”€ client/              # React frontend
β”œβ”€β”€ server/              # Express backend
β”œβ”€β”€ docker-compose.yml   # Multi-container orchestration
β”œβ”€β”€ .dockerignore
└── README.md

πŸš€ Quick Start (TL;DR)

1️⃣ Prerequisites

  • Docker installed
  • Docker Compose available
  • Git installed

Verify:

docker --version
docker compose version

2️⃣ Start the Full Stack

From project root:

docker compose up -d --build

3️⃣ Open in Browser

Service URL
Frontend http://localhost:5173
Backend http://localhost:5000
Mongo Express http://localhost:8081

4️⃣ Stop the Project

docker compose down

🧠 How the Architecture Works

Browser
  ↓
Frontend Container (Vite)
  ↓
Backend Container (Express)
  ↓
MongoDB Container
  ↓
Mongo Express (GUI)

All services communicate via Docker network.


πŸ”‘ Important Concepts

  • Image β†’ blueprint
  • Container β†’ running instance
  • Volume β†’ persistent storage
  • Network β†’ container communication
  • Compose β†’ multi-service manager


πŸ“š DOCKER LEARNING NOTES (10 CHAPTERS)


πŸ“˜ Chapter 1 β€” Why Docker Exists

Problem

β€œWorks on my machine” issue due to environment differences.

Common causes:

  • Node version mismatch
  • Missing dependencies
  • OS differences
  • Library conflicts

Docker Solution

Docker packages:

  • application
  • runtime
  • dependencies
  • configs

Result:

  • portable
  • consistent
  • reproducible

πŸ“˜ Chapter 2 β€” Core Terminology

Image

  • Read-only blueprint
  • Contains app + runtime
  • Built from Dockerfile

Container

  • Running instance of image
  • Isolated environment
  • Ephemeral by default

Docker Engine

  • Core runtime that manages containers

Docker Hub

  • Public registry for images

πŸ“˜ Chapter 3 β€” Basic Commands

Essential commands:

docker run hello-world
docker ps
docker ps -a
docker stop <id>
docker rm <id>
docker images

Key learning:

Docker can run software instantly without installing locally.


πŸ“˜ Chapter 4 β€” Images Deep Dive

Key Ideas

  • Images are layered
  • Layers enable caching
  • Smaller images deploy faster
  • Prefer specific tags (not latest)

Example:

docker pull node:18-alpine

πŸ“˜ Chapter 5 β€” Dockerfile Mastery

Core Instructions

  • FROM
  • WORKDIR
  • COPY
  • RUN
  • CMD
  • EXPOSE

Backend Example

FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["node", "server.js"]

Optimization Rule

Copy package.json first to leverage layer caching.


πŸ“˜ Chapter 6 β€” Volumes & Persistence

Default Behavior

Containers are ephemeral.

Data inside container β†’ lost on removal.

Solution

Use Docker volumes.

Example:

docker volume create mongo-data

When to Use

  • Databases
  • uploads
  • persistent state

πŸ“˜ Chapter 7 β€” Networking

Key Rule

Inside containers:

localhost refers to the container itself.

Container-to-Container

Use service name:

mongodb://mongo-db:27017

Host-to-Container

Use port mapping:

-p 5000:5000

πŸ“˜ Chapter 8 β€” Docker Compose

Purpose

Run multi-container apps with one command.

Key File

docker-compose.yml

Most Used Commands

docker compose up -d
docker compose down
docker compose ps
docker compose logs

MERN Advantage

Compose runs:

  • frontend
  • backend
  • database

together.


πŸ“˜ Chapter 9 β€” Best Practices

Always Use

  • .dockerignore
  • specific image tags
  • environment variables
  • named volumes

Avoid

  • latest tag
  • hardcoded secrets
  • unnecessary large images

Rebuild Rule

After Dockerfile change:

docker compose up -d --build

πŸ“˜ Chapter 10 β€” Real-World Workflow

Development Flow

docker compose up
↓
code
↓
test
↓
docker compose down

Production Flow

GitHub push
↓
CI builds image
↓
Server runs container

Recommended Production Pattern

  • containers are stateless
  • database is managed (e.g., MongoDB Atlas)
  • environment variables used

πŸ§ͺ Troubleshooting Guide

Port Already in Use

sudo lsof -i :<port>

Container Not Starting

docker compose logs <service>

Rebuild After Changes

docker compose up -d --build

🏁 Current Skill Level

After completing this setup, you can:

  • dockerize Node/React apps
  • manage multi-container systems
  • debug container issues
  • handle volumes and networking
  • run MERN stack via Docker

βœ… Entry-level Docker competency achieved


πŸš€ Future Improvements

  • Production React build + nginx
  • MongoDB Atlas integration
  • CI/CD pipelines
  • Multi-stage Docker builds
  • Kubernetes (advanced)

πŸ‘¨β€πŸ’» Author

Built as a hands-on Docker learning project for MERN developers.


⭐ If This Helped

Consider starring the repo and sharing with fellow developers.

Happy Containerizing! 🐳

About

A clean, end-to-end MERN stack setup using Docker and Docker Compose. This repository is designed for first-time Docker users who want a smooth full-stack workflow.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors