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
Post a Comment