Docker Compose File Structure: গভীর বিশ্লেষণ 🏗️
ডকার কম্পোজ ফাইল (docker-compose.yml) হলো আপনার পুরো ইনফ্রাস্ট্রাকচারের একটি ব্লু-প্রিন্ট। এই গাইডে আমরা একটি পূর্ণাঙ্গ উদাহরণের মাধ্যমে এই ফাইলের প্রতিটি অংশ বিস্তারিতভাবে শিখবো।
১. ডকার কম্পোজ ফাইলের পূর্ণাঙ্গ উদাহরণ
নিচের উদাহরণটিতে একটি ওয়েব সার্ভার (Nginx), একটি API (Node.js), এবং একটি ডাটাবেস (Postgres) একসাথে সেটআপ করা হয়েছে:
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 (স্পেস বা ট্যাব) খুব গুরুত্বপূর্ণ। একটি ভুল স্পেস পুরো ফাইলটিকে ইনভ্যালিড করে দিতে পারে।