Skip to content

Docker Compose File Structure: গভীর বিশ্লেষণ 🏗️

ডকার কম্পোজ ফাইল (docker-compose.yml) হলো আপনার পুরো ইনফ্রাস্ট্রাকচারের একটি ব্লু-প্রিন্ট। এই গাইডে আমরা একটি পূর্ণাঙ্গ উদাহরণের মাধ্যমে এই ফাইলের প্রতিটি অংশ বিস্তারিতভাবে শিখবো।


১. ডকার কম্পোজ ফাইলের পূর্ণাঙ্গ উদাহরণ

নিচের উদাহরণটিতে একটি ওয়েব সার্ভার (Nginx), একটি API (Node.js), এবং একটি ডাটাবেস (Postgres) একসাথে সেটআপ করা হয়েছে:

yaml
version: "3.8"

services:
  # ১. ফ্রন্টএন্ড ওয়েব সার্ভার
  web:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
    networks:
      - frontend
    depends_on:
      - api

  # ২. ব্যাকএন্ড API
  api:
    build: ./api
    environment:
      - NODE_ENV=production
    networks:
      - frontend
      - backend

  # ৩. ডাটাবেস
  db:
    image: postgres:13
    environment:
      POSTGRES_PASSWORD: secret
    volumes:
      - db-data:/var/lib/postgresql/data
    networks:
      - backend

networks:
  frontend: # ওয়েব এবং এপিআই-এর মধ্যে যোগাযোগের জন্য
  backend: # এপিআই এবং ডাটাবেসের মধ্যে যোগাযোগের জন্য

volumes:
  db-data: # ডাটাবেসের তথ্য স্থায়ীভাবে সেভ রাখার জন্য

২. ফাইলের প্রধান অংশসমূহ (Main Sections)

version

এটি ডকার কম্পোজ ইঞ্চিনের ভার্সন নির্দেশ করে। আধুনিক ভার্সনগুলোতে এটি অপশনাল হলেও প্র্যাকটিস হিসেবে রাখা ভালো।

services

এখানে আপনি আপনার অ্যাপ্লিকেশনের প্রতিটি কন্টেইনারকে ডিফাইন করেন। প্রতিটি সার্ভিস একটি আলাদা কন্টেইনার হিসেবে চলবে।

  • image: ডকার হাব থেকে কোনো ইমেজ ব্যবহার করার জন্য।
  • build: কাস্টম ডকারফাইল থেকে ইমেজ তৈরি করার জন্য (./api ফোল্ডারের ভেতর ডকারফাইল খুঁজবে)।
  • ports: হোস্ট এবং কন্টেইনারের মধ্যে পোর্ট ম্যাপিং।
  • depends_on: সার্ভিসের রানিং অর্ডার ঠিক করে (যেমন: api চালু হওয়ার আগে db চালু হতে হবে)।

networks

সার্ভিসগুলোর মধ্যে আইসোলেশন এবং যোগাযোগ নিশ্চিত করে। এখানে frontend এবং backend দুটি আলাদা নেটওয়ার্ক ব্যবহার করা হয়েছে যাতে ওয়েব সার্ভার সরাসরি ডাটাবেসে এক্সেস না পায় (সিকিউরিটি)।

volumes

ভলিউম ব্যবহার করা হয় ডেটা স্থায়ী করার জন্য। এখানে db-data নামক একটি ভলিউম তৈরি করা হয়েছে যাতে ডাটাবেস রিস্টার্ট দিলেও ডেটা মুছে না যায়।


৩. গুরুত্বপূর্ণ কি-ওয়ার্ডসমূহ (Keywords)

  • environment: কন্টেইনারের ভেতরে এনভায়রনমেন্ট ভ্যারিয়েবল (যেমন: পাসওয়ার্ড বা এপিআই কি) পাস করার জন্য।
  • volumes (mapping):(./html:/usr/share/nginx/html) লোকাল হোস্টের কোনো ফোল্ডার কন্টেইনারের ভেতরে মাউন্ট করার জন্য।

IMPORTANT

ডকার কম্পেজ ফাইলে Indentation (স্পেস বা ট্যাব) খুব গুরুত্বপূর্ণ। একটি ভুল স্পেস পুরো ফাইলটিকে ইনভ্যালিড করে দিতে পারে।

Released under the MIT License.