ডেভেলপারদের জন্য Docker: ইমেজ, কন্টেইনার এবং Compose

DevOps2026-09-11TryQuickToolBox

আপনি নিশ্চয়ই Docker সম্পর্কে শুনেছেন এবং এটি কীভাবে আপনার ডেভেলপমেন্ট ওয়ার্কফ্লো সহজ করতে পারে। কিন্তু যদি আপনি কন্টেইনারে নতুন হন, তবে পরিভাষা এবং কমান্ডগুলি অপ্রতিরোধ্যযোগ্য মনে হতে পারে। এই গাইডটি সমস্ত বিভ্রান্তি দূর করে Docker ইমেজ, কন্টেইনার এবং Compose-এর একটি প্র্যাকটিক্যাল ধারণা দেয়—যাতে আপনি আজই এগুলি কার্যকরভাবে ব্যবহার শুরু করতে পারেন।

Docker কী এবং কেন আপনার এটির যত্ন নেওয়া উচিত?

Docker হল একটি প্ল্যাটফর্ম যা আপনার অ্যাপ্লিকেশন এবং তার নির্ভরতাগুলিকে একটি মানক ইউনিটে প্যাকেজ করে যাকে কন্টেইনার বলা হয়। কন্টেইনারগুলি হালকা, পোর্টেবল এবং একে অপরের থেকে বিচ্ছিন্ন, যার মানে আপনি আপনার অ্যাপটি আপনার ল্যাপটপ, সহকর্মীর মেশিন বা প্রোডাকশন সার্ভারে ধারাবাহিকভাবে চালাতে পারেন।

মূল সুবিধা? "এটি আমার মেশিনে কাজ করে" অতীতের বিষয় হয়ে যায়। Docker নিশ্চিত করে যে আপনার কোড যে পরিবেশে চলে তা সর্বত্র অভিন্ন।

ইমেজ বনাম কন্টেইনার: বিল্ডিং ব্লক

শুরু করার আগে, আপনাকে ইমেজ এবং কন্টেইনার-এর মধ্যে পার্থক্য বুঝতে হবে।

সংক্ষেপে: একটি ইমেজ হল রেসিপি, এবং একটি কন্টেইনার হল সেই খাবার যা আপনি এটি থেকে রান্না করেন।

ডেভেলপারদের জন্য প্রয়োজনীয় Docker কমান্ড

এখানে কমান্ডগুলি রয়েছে যা আপনি প্রায়শই ব্যবহার করবেন:

  1. docker pull <image> – Docker Hub-এর মতো একটি রেজিস্ট্রি থেকে একটি ইমেজ ডাউনলোড করুন।
  2. docker images – সমস্ত স্থানীয় ইমেজ তালিকাভুক্ত করুন।
  3. docker run <image> – একটি ইমেজ থেকে একটি কন্টেইনার তৈরি এবং শুরু করুন।
  4. docker ps – চলমান কন্টেইনার তালিকাভুক্ত করুন। সমস্ত কন্টেইনার দেখতে -a যোগ করুন, বন্ধগুলি সহ।
  5. docker stop <container> – একটি চলমান কন্টেইনার সুন্দরভাবে বন্ধ করুন।
  6. docker rm <container> – একটি বন্ধ কন্টেইনার সরান।
  7. docker rmi <image> – একটি ইমেজ সরান।
  8. docker exec -it <container> bash – একটি চলমান কন্টেইনারের ভিতরে একটি ইন্টারঅ্যাকটিভ শেল খুলুন।

উদাহরণস্বরূপ, একটি সাধারণ Nginx ওয়েব সার্ভার চালাতে:

docker run -d -p 8080:80 nginx

এটি nginx ইমেজটি টেনে আনে (যদি ইতিমধ্যে উপস্থিত না থাকে), ডিটাচড মোডে (-d) একটি কন্টেইনার শুরু করে এবং আপনার হোস্টের পোর্ট 8080 কে কন্টেইনারের পোর্ট 80-এ ম্যাপ করে (-p 8080:80)।

Dockerfile দিয়ে নিজের ইমেজ তৈরি করা

আপনার অ্যাপ্লিকেশন প্যাকেজ করতে, আপনি একটি Dockerfile তৈরি করেন—নির্দেশাবলী সহ একটি টেক্সট ফাইল। এখানে একটি Node.js অ্যাপের জন্য একটি সাধারণ উদাহরণ:

# Use an official Node.js runtime as a parent image
FROM node:18-alpine

# Set the working directory
WORKDIR /usr/src/app

# Copy package.json and install dependencies
COPY package*.json ./
RUN npm install

# Copy the rest of the application code
COPY . .

# Expose the port the app runs on
EXPOSE 3000

# Define the command to run the app
CMD ["node", "app.js"]

ইমেজটি তৈরি করুন:

docker build -t my-node-app .

তারপর এটি চালান:

docker run -p 3000:3000 my-node-app

Docker Compose দিয়ে মাল্টি-কন্টেইনার অ্যাপ সহজ করা

বাস্তব-জগতের অ্যাপ্লিকেশনগুলির প্রায়শই একাধিক পরিষেবা প্রয়োজন: একটি ওয়েব সার্ভার, একটি ডেটাবেস, একটি ক্যাশে ইত্যাদি। docker run দিয়ে সেগুলি আলাদাভাবে পরিচালনা করা ক্লান্তিকর হয়ে ওঠে। Docker Compose আপনাকে একটি YAML ফাইল ব্যবহার করে মাল্টি-কন্টেইনার অ্যাপ্লিকেশন সংজ্ঞায়িত এবং চালানোর অনুমতি দেয়।

একটি docker-compose.yml ফাইল তৈরি করুন:

version: '3.8'
services:
  web:
    build: .
    ports:
      - "3000:3000"
    depends_on:
      - db
  db:
    image: postgres:15
    environment:
      POSTGRES_PASSWORD: example
    volumes:
      - postgres_data:/var/lib/postgresql/data
volumes:
  postgres_data:

তারপর সবকিছু শুরু করুন:

docker compose up -d

Compose আপনার জন্য নেটওয়ার্কিং, ভলিউম এবং নির্ভরতা পরিচালনা করে। কন্টেইনার, নেটওয়ার্ক এবং ভলিউম বন্ধ এবং সরাতে, docker compose down চালান।

ডেভেলপমেন্টে Docker-এর জন্য সেরা প্র্যাকটিস

সাধারণ সমস্যা এবং কীভাবে এগুলি এড়ানো যায়

FAQ

Docker ইমেজ এবং কন্টেইনারের মধ্যে পার্থক্য কী?

একটি ইমেজ হল একটি রিড-অনলি টেমপ্লেট যা অ্যাপ্লিকেশন এবং তার পরিবেশকে সংজ্ঞায়িত করে। একটি কন্টেইনার হল সেই ইমেজের একটি চলমান ইনস্ট্যান্স। আপনি একটি ইমেজ থেকে অনেক কন্টেইনার তৈরি করতে পারেন।

একটি একক-কন্টেইনার অ্যাপের জন্য আমার কি Docker Compose প্রয়োজন?

অগত্যা নয়। সাধারণ অ্যাপের জন্য, docker run যথেষ্ট। তবে, Compose পরিবেশ ভেরিয়েবল, ভলিউম এবং নেটওয়ার্কিং পরিচালনা করা সহজ করে তোলে, এমনকি একটি পরিষেবার জন্যও, এবং পরে স্কেলিং সহজ করে।

আমি Docker-এ ডেটা কীভাবে স্থায়ী করব?

ভলিউম ব্যবহার করুন। ভলিউমগুলি কন্টেইনারের ফাইল সিস্টেমের বাইরে সংরক্ষণ করা হয় এবং কন্টেইনার মুছে ফেললেও স্থায়ী হয়। Compose-এ, একটি ভলিউম সংজ্ঞায়িত করুন এবং এটি কন্টেইনারের একটি পাথে মাউন্ট করুন (যেমন volumes: - mydata:/var/lib/data)।

আপনার Docker ওয়ার্কফ্লো অপ্টিমাইজ করতে প্রস্তুত? যখন আপনার কন্টেইনার লগ বিশ্লেষণ করার প্রয়োজন হয়, আমাদের Nginx Log Analyzer ব্যবহার করে দেখুন—লগ ডেটা দ্রুত পার্স এবং ভিজ্যুয়ালাইজ করতে—কন্টেইনারাইজড ওয়েব সার্ভার ডিবাগ করার জন্য উপযুক্ত।