DEV Community

Emdadul Islam
Emdadul Islam Subscriber

Posted on

Docker কি জিনিস?

তানিম: আরে সাকিব ভাই! শুনলাম তুমি এখন Docker নিয়ে কাজ করো। এটা আবার কী জিনিস? কিছু বুঝতে পারছি না।

সাকিব: আরে তানিম! Docker খুবই মজার একটা জিনিস। তুই কি কখনো চট্টগ্রাম বন্দরে গেছিস? ওখানে বিশাল বিশাল কন্টেইনার দেখেছিস?

তানিম: হ্যাঁ দেখেছি। সেই বড় বড় বাক্সগুলো যেগুলো জাহাজে করে আনা-নেওয়া হয়?

সাকিব: একদম! Docker এর কনসেপ্টটাও ঠিক ওইরকম। তবে এখানে সফটওয়্যার কন্টেইনারে প্যাক করা হয়। আমি বুঝিয়ে বলি।

Docker কি জিনিস?

সাকিব: Docker হলো একটা Containerization Platform। সহজ ভাষায় বললে, এটা তোর অ্যাপ্লিকেশনকে একটা বাক্সে প্যাক করে রাখে, যাতে সেটা যেকোনো কম্পিউটারে একইভাবে চলে।

তানিম: মানে? আমি তো আমার কোড লিখে অন্যের কম্পিউটারেও চালাতে পারি।

সাকিব: হা হা! সেটাই তো সমস্যা! তুই কি কখনো এমন হয়েছে যে তোর কোড তোর কম্পিউটারে চলে, কিন্তু বন্ধুর কম্পিউটারে চলে না?

তানিম: আরে হ্যাঁ! অনেকবার হয়েছে। বলে "আমার কম্পিউটারে তো চলে!"

সাকিব: এইটাই Docker সমাধান করে। ধর তুই ঢাকা থেকে চট্টগ্রামে খাবার পাঠাচ্ছিস। তুই কিভাবে পাঠাবি?

তানিম: একটা কন্টেইনারে প্যাক করে পাঠাব, যাতে খাবার নষ্ট না হয়।

সাকিব: ঠিক! Docker ও তোর অ্যাপ্লিকেশনকে একটা কন্টেইনারে প্যাক করে। এই কন্টেইনারে থাকে:

  • তোর কোড
  • তোর কোড চালানোর জন্য যা যা লাগে (Python, Node.js, Java)
  • সব ডিপেন্ডেন্সি লাইব্রেরি
  • কনফিগারেশন ফাইল

Docker এর মূল অংশগুলো

১. Container (কন্টেইনার)

সাকিব: Container হলো চলমান অ্যাপ্লিকেশনের বাক্স। যেমন তুই একটা কন্টেইনারে খাবার রেখে পাঠালি, খাবার তখন "চলমান" অবস্থায়।

তানিম: মানে আমার অ্যাপ যখন চালু হয়, তখন সেটা Container?

সাকিব: একদম! Container = চলমান অ্যাপ্লিকেশন। যেমন:

আমার MongoDB Container → ডাটাবেস চালু আছে
আমার Node.js Container → API সার্ভার চালু আছে  
আমার React Container → ফ্রন্টএন্ড চালু আছে
Enter fullscreen mode Exit fullscreen mode

২. Image (ইমেজ)

সাকিব: Image হলো Container বানানোর রেসিপি বা ব্লুপ্রিন্ট। যেমন তুই বিরিয়ানি বানানোর রেসিপি লিখে রাখলি।

তানিম: মানে Image থেকে Container তৈরি হয়?

সাকিব: হ্যাঁ! একটা Image থেকে অনেকগুলো Container তৈরি করতে পারিস। যেমন একটা বিরিয়ানির রেসিপি দিয়ে অনেকগুলো বিরিয়ানি রান্না করতে পারিস।

Image (রেসিপি) → Container (চলমান খাবার)
├── Container-1: আমার কম্পিউটারে চালু
├── Container-2: অফিসের সার্ভারে চালু  
└── Container-3: ক্লাউডে চালু
Enter fullscreen mode Exit fullscreen mode

৩. Dockerfile

সাকিব: Dockerfile হলো রেসিপি লেখার নিয়ম। যেমন তুই বিরিয়ানির রেসিপি লিখবি:

১. ৫০০ গ্রাম চাল নাও
২. ১ কেজি গরুর মাংস নাও
৩. পানিতে ভিজিয়ে রাখো
৪. চুলায় বসাও
৫. ৪৫ মিনিট রান্না করো
Enter fullscreen mode Exit fullscreen mode

তানিম: Dockerfile এও কি এমনই লেখা হয়?

সাকিব: একদম! দেখ:

# এই রেসিপিটা Ubuntu কম্পিউটারের জন্য
FROM ubuntu:20.04

# Node.js ইনস্টল করো  
RUN apt-get update && apt-get install nodejs npm

# আমার কোড কপি করো
COPY . /app

# কোডের ফোল্ডারে যাও
WORKDIR /app

# লাইব্রেরি ইনস্টল করো
RUN npm install

# অ্যাপ চালু করো
CMD ["node", "server.js"]
Enter fullscreen mode Exit fullscreen mode

৪. Docker Hub

সাকিব: Docker Hub হলো রেসিপির দোকান। যেমন ইউটিউবে রান্নার ভিডিও থাকে, Docker Hub এ বিভিন্ন সফটওয়্যারের Image থাকে।

তানিম: মানে আমি সেখান থেকে Image ডাউনলোড করতে পারি?

সাকিব: হ্যাঁ! যেমন:

  • nginx Image দিয়ে ওয়েব সার্ভার
  • mysql Image দিয়ে ডাটাবেস
  • python:3.9 Image দিয়ে Python অ্যাপ
  • node:16 Image দিয়ে Node.js অ্যাপ

৫. Volume (ভলিউম)

সাকিব: Volume হলো স্থায়ী গুদাম। Container বন্ধ হয়ে গেলে তার ভিতরের ডাটা চলে যায়। কিন্তু Volume এর ডাটা থেকে যায়।

তানিম: এটা কখন লাগে?

সাকিব: ডাটাবেসের ক্ষেত্রে। যেমন তোর MongoDB Container বন্ধ হলে যেন ডাটা হারিয়ে না যায়, সেজন্য Volume ব্যবহার করা হয়।

Container (সাময়িক) ← → Volume (স্থায়ী ডাটা)
Enter fullscreen mode Exit fullscreen mode

যেমন তুই হোটেলে থাকিস (Container), কিন্তু তোর মূল্যবান জিনিস ব্যাংকের লকারে (Volume) রাখিস।

৬. Network (নেটওয়ার্ক)

সাকিব: Network হলো Container গুলোর মধ্যে যোগাযোগের মাধ্যম। যেমন অ্যাপার্টমেন্টের ফ্ল্যাটগুলোর মধ্যে ইন্টারকম সিস্টেম।

তানিম: এটা কেন লাগে?

সাকিব: যেমন তোর:

  • Frontend Container → Backend Container এর সাথে কথা বলবে
  • Backend Container → Database Container এর সাথে কথা বলবে
Frontend Container ←→ Backend Container ←→ Database Container
       (Network দিয়ে যোগাযোগ)
Enter fullscreen mode Exit fullscreen mode

একটা সহজ উদাহরণ

সাকিব: ধর তুই একটা সিম্পল To-Do অ্যাপ বানাচ্ছিস।

তানিম: ওকে, তার জন্য কি কি লাগবে?

সাকিব:

  • Frontend: React.js
  • Backend: Node.js + Express
  • Database: MongoDB

ঐতিহ্যগত পদ্ধতি (Docker ছাড়া):

সমস্যা:
❌ তোর কম্পিউটারে Node.js 14, বন্ধুর কম্পিউটারে Node.js 16
❌ তোর কম্পিউটারে MongoDB আছে, বন্ধুর নেই
❌ Production সার্ভারে অন্য ভার্সন
❌ "Works on my machine" সমস্যা
Enter fullscreen mode Exit fullscreen mode

Docker এর পদ্ধতি:

সমাধান:
✅ সবাই একই Container ব্যবহার করবে
✅ Container এর ভিতর সব কিছু ঠিক আছে
✅ যেকোনো কম্পিউটারে একইভাবে চলবে
✅ Development = Production
Enter fullscreen mode Exit fullscreen mode

তানিম: এটা কিভাবে করবো?

সাকিব: দেখ, তিনটা Dockerfile বানাবি:

Frontend Dockerfile:

FROM node:16
COPY . /app
WORKDIR /app
RUN npm install
CMD ["npm", "start"]
Enter fullscreen mode Exit fullscreen mode

Backend Dockerfile:

FROM node:16
COPY . /app
WORKDIR /app
RUN npm install
CMD ["node", "server.js"]
Enter fullscreen mode Exit fullscreen mode

সব একসাথে চালানো (docker-compose.yml):

version: '3'
services:
  frontend:
    build: ./frontend
    ports:
      - "3000:3000"

  backend:
    build: ./backend
    ports:
      - "5000:5000"

  database:
    image: mongo:5.0
    volumes:
      - mongodb_data:/data/db

volumes:
  mongodb_data:
Enter fullscreen mode Exit fullscreen mode

তানিম: এখন যদি আমি docker-compose up কমান্ড দিই?

সাকিব: তাহলে তিনটা Container একসাথে চালু হবে! আর সবাই একে অপরের সাথে কথা বলতে পারবে।

Docker এর সুবিধা

১. "Works Everywhere" গ্যারান্টি

সাকিব: তোর কোড যদি তোর কম্পিউটারে Docker Container এ চলে, তাহলে সেটা যেকোনো জায়গায় চলবে।

তানিম: মানে আর "আমার কম্পিউটারে তো চলে" বলতে হবে না?

সাকিব: একদম না! Docker এর স্লোগানই হলো: "Build once, run anywhere"

২. দ্রুত Deployment

সাকিব: ঐতিহ্যগত পদ্ধতিতে সার্ভারে অ্যাপ Deploy করতে অনেক সময় লাগে। Docker এ ৫-১০ সেকেন্ড!

তানিম: এত দ্রুত কিভাবে?

সাকিব: Container আগে থেকেই তৈরি। শুধু চালু করতে হয়। যেমন তুই instant noodles বানাও - সব উপাদান আগে থেকেই প্যাকেটে আছে।

৩. Resource Efficiency (কম রিসোর্স)

সাকিব: Virtual Machine এর চেয়ে Docker অনেক কম Memory আর CPU ব্যবহার করে।

Virtual Machine:
├── Host OS (Windows/Linux)
├── Hypervisor (VMware/VirtualBox)  
├── Guest OS (Ubuntu) ← অনেক Memory
├── App Libraries
└── Application

Docker:
├── Host OS (Linux)
├── Docker Engine
├── App Libraries ← শুধু এইটুকু দরকার
└── Application
Enter fullscreen mode Exit fullscreen mode

৪. Easy Scaling

সাকিব: ট্রাফিক বেড়ে গেলে নতুন Container তৈরি করা যায় সেকেন্ডেই।

তানিম: Virtual Machine এ কত সময় লাগে?

সাকিব: VM তৈরি করতে ৫-১০ মিনিট, Container তৈরি করতে ৫-১০ সেকেন্ড!

৫. Microservices Architecture

সাকিব: Docker দিয়ে খুব সহজে Microservices বানানো যায়। যেমন:

E-commerce App:
├── User Service Container
├── Product Service Container  
├── Order Service Container
├── Payment Service Container
└── Notification Service Container
Enter fullscreen mode Exit fullscreen mode

প্রতিটা Service আলাদাভাবে Scale করা যায়।

Docker কমান্ড গুলো

তানিম: এই যে এত কথা বললে, আসলে কিভাবে ব্যবহার করবো?

সাকিব: কয়েকটা বেসিক কমান্ড শিখলেই হবে:

মূল কমান্ড সমূহ:

# Image ডাউনলোড করা
docker pull nginx

# Container চালানো
docker run -p 80:80 nginx

# চলমান Container দেখা
docker ps

# সব Container দেখা (বন্ধ + চালু)
docker ps -a

# Container বন্ধ করা
docker stop container_name

# Container মুছে ফেলা
docker rm container_name

# Image দেখা
docker images

# Image মুছে ফেলা  
docker rmi image_name

# Container এর ভিতর ঢোকা
docker exec -it container_name bash
Enter fullscreen mode Exit fullscreen mode

Image তৈরি করা:

# Dockerfile থেকে Image বানানো
docker build -t my-app .

# Image চালানো
docker run -p 3000:3000 my-app
Enter fullscreen mode Exit fullscreen mode

Docker Compose:

# সব Container একসাথে চালু
docker-compose up

# Background এ চালু
docker-compose up -d

# সব Container বন্ধ
docker-compose down

# Logs দেখা
docker-compose logs
Enter fullscreen mode Exit fullscreen mode

বাস্তব জীবনের উদাহরণ

তানিম: কোন কোন কোম্পানি Docker ব্যবহার করে?

সাকিব: প্রায় সব টেক কোম্পানি! যেমন:

১. Netflix

  • ১০০০+ Microservices
  • প্রতিদিন ৪০০০+ Deployment
  • সব Container এ

২. Uber

  • গাড়ির লোকেশন ট্র্যাকিং
  • মিলিয়ন রাইড প্রসেসিং
  • Docker Containers এ

৩. PayPal

  • ১৫০+ Applications
  • সব Docker এ মাইগ্রেট করেছে

৪. বাংলাদেশে

  • Pathao: Ride Sharing Services
  • Foodpanda: Food Delivery
  • bKash: Payment Processing
  • Grameenphone: Telecom Services

Docker শেখার পথ

তানিম: আমি শিখতে চাই। কোথা থেকে শুরু করবো?

সাকিব:

১ম সপ্তাহ: Basic Concepts

  • Docker কি এবং কেন
  • Container vs VM
  • Docker Install করা
  • প্রথম Container চালানো

২য় সপ্তাহ: Dockerfile

  • Dockerfile লেখা
  • Image তৈরি করা
  • Docker Hub এ push করা

৩য় সপ্তাহ: Multi-Container

  • Docker Compose
  • Networks এবং Volumes
  • Database Container যোগ করা

৪র্থ সপ্তাহ: Production

  • Best Practices
  • Security
  • Monitoring

প্রয়োজনীয় জ্ঞান:

  • Linux Commands: কারণ বেশিরভাগ Container Linux based
  • Basic Programming: যেকোনো ভাষা (Python, Node.js, Java)
  • Command Line: Terminal ব্যবহার করা

সাধারণ ভুলভ্রান্তি

তানিম: নতুনরা কি কি ভুল করে?

সাকিব:

১. Container কে VM মনে করা

ভুল ধারণা: Container = Virtual Machine
সঠিক ধারণা: Container = Process Isolation
Enter fullscreen mode Exit fullscreen mode

২. Data সামলানো না

সমস্যা: Container restart হলে data হারিয়ে যায়
সমাধান: Volume ব্যবহার করো
Enter fullscreen mode Exit fullscreen mode

৩. সিকিউরিটি Ignore করা

ভুল: root user দিয়ে Container চালানো
সঠিক: non-root user ব্যবহার করো
Enter fullscreen mode Exit fullscreen mode

৪. বড় Image বানানো

ভুল: 2GB+ Image size
সঠিক: Multi-stage build, Alpine Linux ব্যবহার
Enter fullscreen mode Exit fullscreen mode

৫. Health Check না করা

সমস্যা: Container চালু আছে মনে হলেও App কাজ করছে না
সমাধান: Health Check যোগ করো
Enter fullscreen mode Exit fullscreen mode

ভবিষ্যৎ ক্যারিয়ার

তানিম: Docker শিখলে কি ধরনের কাজ পাবো?

সাকিব: অনেক সুযোগ!

১. DevOps Engineer

  • বেতন: ৬-২০ লাখ টাকা
  • কাজ: CI/CD Pipeline, Infrastructure Management

২. Backend Developer

  • বেতন: ৫-১৮ লাখ টাকা
  • কাজ: API Development, Microservices

৩. Cloud Engineer

  • বেতন: ৮-২৫ লাখ টাকা
  • কাজ: AWS, Azure, Google Cloud

৪. Site Reliability Engineer

  • বেতন: ১০-৩০ লাখ টাকা
  • কাজ: Production System Reliability

তানিম: এত ভাল বেতন কেন?

সাকিব: কারণ:

  • সব কোম্পানি এখন Containerization করছে
  • Docker skills এর চাহিদা বেশি
  • কিন্তু দক্ষ লোক কম

Docker vs অন্যান্য Technology

তানিম: Docker ছাড়াও কি অন্য বিকল্প আছে?

সাকিব: হ্যাঁ, কিন্তু Docker সবচেয়ে জনপ্রিয়:

Container Platforms:

  • Docker: সবচেয়ে জনপ্রিয়, সহজ
  • Podman: Docker এর বিকল্প
  • LXC/LXD: সিস্টেম Container
  • rkt: CoreOS এর (এখন বন্ধ)

Orchestration:

  • Kubernetes: Production এ সবচেয়ে ভাল
  • Docker Swarm: সহজ, ছোট প্রজেক্টের জন্য
  • Nomad: HashiCorp এর

প্র্যাকটিক্যাল প্রজেক্ট

সাকিব: তত্ত্ব শিখে লাভ নেই, হাতে-কলমে শিখতে হবে। এই প্রজেক্টগুলো করো:

১. Personal Blog (১ম প্রজেক্ট)

Tech Stack: Node.js + MongoDB
Goal: Dockerfile লেখা, Container চালানো
Enter fullscreen mode Exit fullscreen mode

২. Todo App (২য় প্রজেক্ট)

Tech Stack: React + Express + MySQL
Goal: Multi-container setup, Docker Compose
Enter fullscreen mode Exit fullscreen mode

৩. E-commerce API (৩য় প্রজেক্ট)

Tech Stack: Microservices Architecture
Goal: Multiple services, Network communication
Enter fullscreen mode Exit fullscreen mode

৪. Chat Application (৪র্থ প্রজেক্ট)

Tech Stack: Socket.io + Redis
Goal: Real-time features, Scaling
Enter fullscreen mode Exit fullscreen mode

Docker Best Practices

সাকিব: Production এ যাওয়ার আগে এই নিয়মগুলো মানতে হবে:

১. Image Size কমানো

# ভুল - বড় Image
FROM ubuntu:20.04
RUN apt-get update && apt-get install python3

# সঠিক - ছোট Image  
FROM python:3.9-alpine
Enter fullscreen mode Exit fullscreen mode

২. Multi-stage Build

# Build stage
FROM node:16 AS builder
COPY . /app
WORKDIR /app
RUN npm install && npm run build

# Production stage
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
Enter fullscreen mode Exit fullscreen mode

৩. Security

# Root user ব্যবহার করো না
RUN addgroup -g 1001 -S nodejs
RUN adduser -S nextjs -u 1001
USER nextjs
Enter fullscreen mode Exit fullscreen mode

৪. Health Check

HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
  CMD curl -f http://localhost:3000/health || exit 1
Enter fullscreen mode Exit fullscreen mode

শেষ কথা

সাকিব: Docker শেখা মানে আধুনিক সফটওয়্যার ডেভেলপমেন্টের একটা গুরুত্বপূর্ণ স্কিল অর্জন করা। এটা এখন ইন্ডাস্ট্রি স্ট্যান্ডার্ড।

তানিম: আজকে তোমার বোঝানোর পর মনে হচ্ছে Docker আসলে খুবই সহজ!

সাকিব: সহজই তো! Container মানে হলো সফটওয়্যারের সুটকেস। তোর সব জিনিস গুছিয়ে প্যাক করে রাখো, যেকোনো জায়গায় নিয়ে গিয়ে খুলে ব্যবহার করো!

তানিম: Perfect analogy! আজ থেকেই Docker ইনস্টল করে শুরু করি।

সাকিব: গ্রেট! মনে রাখিস, প্রতিদিন একটু একটু প্র্যাকটিস করলে ১ মাসেই তুই Docker এক্সপার্ট হয়ে যাবি। কোনো সমস্যা হলে যোগাযোগ করিস!

তানিম: ধন্যবাদ ভাই! এত সহজভাবে বুঝানোর জন্য। Container এর জগতে স্বাগতম আমাকে!

সাকিব: হাহা! ওয়েলকাম টু দ্য কন্টেইনার ওয়ার্ল্ড! এখন যা, Docker Hub থেকে nginx Image pull করে প্রথম Container চালিয়ে দে। হ্যাপি Dockerizing!


এই ব্লগ পোস্টটি যদি Docker বুঝতে সাহায্য করে থাকে, তাহলে শেয়ার করুন এবং কমেন্টে আপনার অভিজ্ঞতা জানান!

Top comments (1)

Collapse
 
ronald_tudu_1338108201404 profile image
Ronald Tudu

ভালো লেখা । ধন্যবাদ ।