DOCKER

Mongo run virtually use Docker 

docker run -d -p 27017:27017 mongo

docker run    ======  Create container

-d ============== Run Container as Detach Mode 

-p 27017:27017===== First Port is use for Host Port and 2nd one is Container Port

mongo=========== Pull original Image on Official Website on Docker Hub 


Create image code 

# FROM: Base image

FROM node:18

# WORKDIR: Set working directory inside the container

WORKDIR /app

# COPY again for the rest of the source files

COPY . .

# RUN: Execute a command (e.g., install dependencies)

RUN npm install

# Build 

RUN npm run build

# EXPOSE: Open a port (for external access)

EXPOSE 3000

# CMD: Final command to run the app

CMD ["npm", "start"]



Build Image


docker build -t image_name . 

docker build -t my-node-app .

docker build -t my-node-app:v1.0 .


Running Image 

docker run -p 3000:3000 image_name

docker run -p 3000:3000 my-app



LAYER DOCKER 


# Build stage

1.FROM node:18 AS build      --- layer 

2.WORKDIR /app                    --- layer 

3.COPY . .                                 --- layer 

4.RUN npm install                     --- layer 

5.RUN npm run build                --- layer 

6.Expose                                   --- layer 

7.CMD                                      --- layer 

1'st time

RUN, COPY , WORKDIR  command creates a new layer and save in Cached 

2nd Time

Change source code and package.json

Above layer run so RUN every time run and save in cache 


Optimize the Docker 


1.FROM node:18 

2.WORKDIR /app

3.Copy Package* .                                                          Update this line 

4.RUN npm install

5.RUN npm run build

6.COPY . .

7.Expose 

8.CMD



VOLUME 
If you restart a Mongo Docker container, you will notice that your data goes away. 

1. Start Mongo 

docker run -p 27017:27017 -d mongo

2. Docker Kill

docker kill <container_id>

3. Docker Restart 

docker run -p 27017:27017 -d mongo


Conclusion: The loss problem is resolved by volume. How?

V: Volume 

mongo_data:/data/db:   data store mongo_data to /data/db

--name my-mongo: name Your container Easy to reference


Create  Volume 

docker run -v volume_database:/data/db -p 27017:27017 mongo

Docker Run

docker kill <container_id>

Docker Restart 

docker run -v volume_database:/data/db -p 27017:27017 mongo


COMPOSE

Docker Compose is a tool designed to help you define and run multi-container Docker applications.

With Compose, you use a YAML file to configure your application's services, networks, and volumes. 




version: '3.8'


services:

  mongo:

    image: mongo:latest

    container_name: mongo_db

    ports:

      - "27017:27017"

    volumes:

      - mongo_data:/data/db


  backend:

    build: ./backend   # Your backend Dockerfile folder

    container_name: backend_app

    ports:

      - "3000:3000"

    environment:

      - MONGO_URL=mongodb://mongo:27017/mydatabase

    depends_on:

      - mongo


volumes:

  mongo_data:


Explanation:

mongo service

Uses official mongo image

Maps port 27017

Mounts volume mongo_data to /data/db (persistent DB storage)

backend service

Builds your backend app from ./backend folder

Exposes port 3000

Passes environment variable MONGO_URL pointing to mongo container

Waits for mongo to start (depends_on)

volumes

Defines the named volume mongo_data

Start Compose 

docker-compose up

Stop Compose/Every thing 

docker-compose down --volumes 




BASIC COMMAND 

🐳 Docker Commands (General)

Command Description
docker --version Check Docker version
docker info Show system-wide Docker info
docker ps List running containers
docker ps -a List all containers (running + stopped)
docker images List downloaded images
docker network ls List Docker networks
docker volume ls List Docker volumes


📦 Image & Build Commands

Command Description
docker build -t image_name . Build an image from Dockerfile in current dir
docker pull image_name Download image from Docker Hub
docker rmi image_name Remove Docker image


🧱 Container Commands

Command Description
docker run image_name Run a container from image
docker run -d image_name Run in detached mode (background)
docker run -p 3000:3000 image_name Map host:container ports
docker run --name my_app image_name Assign a name to the container
docker exec -it container_name bash Access container terminal
docker stop container_name Stop a running container
docker start container_name Start a stopped container
docker restart container_name Restart container
docker rm container_name Remove a stopped container


📁 Volume Commands

Command Description
docker volume create volume_name Create a new named volume
docker volume ls List volumes
docker volume inspect volume_name Show details of a volume
docker volume rm volume_name Remove a volume (only if not used)





Comments

Popular posts from this blog

Spread and Rest

Shallow Copy and Deep Copy in JavaScript