Docker Compose Introduction: মাল্টি-কন্টেইনার ম্যানেজমেন্ট 🎼
একটি প্রজেক্টে যখন অনেকগুলো কন্টেইনার (যেমন: Frontend, Backend, Database, Redis) একসাথে কাজ করে, তখন প্রতিটির জন্য আলাদাভাবে docker run কমান্ড দেওয়া বেশ কষ্টসাধ্য। এই সমস্যা সমাধানের জন্যই Docker Compose ব্যবহার করা হয়। এটি একটি টুল যা আপনাকে একটি মাত্র ফাইল ব্যবহার করে পুরো অ্যাপ্লিকেশন স্ট্যাকটি ডিফাইন এবং রান করতে সাহায্য করে।
১. Docker Compose কি?
ডকার কম্পোজ হলো একটি অর্কেস্ট্রেশন টুল (Orchestration Tool) যা একটি YAML ফাইলের মাধ্যমে মাল্টি-কন্টেইনার অ্যাপ্লিকেশনগুলো পরিচালনা করে।
- The Concept: একটি ফাইলের ভেতর সব কন্টেইনারের কনফিগারেশন লিখে রাখা হয় এবং একটি মাত্র কমান্ডে (
docker-compose up) সব সার্ভিস একসাথে চালু করা হয়।
২. docker-compose.yml এর স্ট্রাকচার
কম্পোজ ফাইলের মূল ভিত্তি হলো Services, Networks, এবং Volumes। নিচে একটি বেসিক উদাহরণ দেওয়া হলো:
version: "3.8" # কম্পোজ ফাইল ভার্সন
services:
web: # সার্ভিসের নাম
build: . # বর্তমান ডিরেক্টরি থেকে ইমেজ বিল্ড করবে
ports:
- "80:80"
networks:
- app-net
db:
image: postgres:14
environment:
POSTGRES_PASSWORD: example
networks:
- app-net
networks:
app-net:
driver: bridge৩. সার্ভিস ডেফিনিশন (Service Definition)
কম্পোজ ফাইলে প্রতিটি কন্টেইনারকে একটি Service বলা হয়। প্রতিটি সার্ভিসে আপনি নির্দিষ্ট করতে পারেন:
- কোন ইমেজ ব্যবহার হবে? (
image:বাbuild:) - কোন পোর্টে চলবে? (
ports:) - এনভায়রনমেন্ট ভ্যারিয়েবল কি হবে? (
environment:) - মেমোরি লিমিট কত হবে?
৪. ডিপেনডেন্সি ম্যানেজমেন্ট (Dependency Management)
কম্পোজ ফাইলে আপনি বলে দিতে পারেন কোনো সার্ভিস অন্য সার্ভিসের ওপর নির্ভর করে কি না। যেমন- ডাটাবেস চালু না হওয়া পর্যন্ত অ্যাপ চালু হবে না:
services:
web:
build: .
depends_on:
- db৫. ইন্সটলেশন (Installation)
- Docker Desktop: আপনি যদি উইন্ডোজ বা ম্যাক-এ ডকার ডেস্কটপ ব্যবহার করেন, তবে ডকার কম্পোজ আগে থেকেই ইন্সটল করা থাকে।
- Linux: লিনাক্সে ডকার কম্পোজ আলাদাভাবে ইন্সটল করতে হতে পারে। তবে বর্তমানে
docker compose(স্ল্যাশ ছাড়া) কমান্ডটি ডকার সিএলআই (CLI)-এর সাথেই ডিফল্ট হিসেবে থাকে।
৬. ভার্সন কম্প্যাটিবিলিটি (Version Compatibility)
কম্পোজ ফাইলের শুরুতে একটি version উল্লেখ করা হয় (যেমন: 3.0, 3.8)।
- আপনার ডকার ইঞ্জিনের ভার্সনের সাথে সামঞ্জস্য রেখে সঠিক ভার্সন ব্যবহার করতে হয়।
- আধুনিক ডকার ভার্সনে ভার্সন উল্লেখ করা এখন ঐচ্ছিক (Optional), তবে সুরুতে এটি রাখা প্র্যাকটিস হিসেবে ভালো।
TIP
ডকার কম্পোজ মেইনলি লোকাল ডেভেলপমেন্ট এবং টেস্টিংয়ের জন্য বেশি ব্যবহৃত হয়। প্রোডাকশনে হাই-লেভেল অর্কেস্ট্রেশনের জন্য অনেক সময় কুইবারনেটিস (Kubernetes) ব্যবহার করা হয়।