Docker Compose - Services: সার্ভিসের বিস্তারিত কনফিগারেশন 🛠️
ডকার কম্পোজ ফাইলের সবচেয়ে গুরুত্বপূর্ণ অংশ হলো services ব্লক। এখানে আমরা প্রতিটি কন্টেইনারকে কিভাবে কনফিগার করা হবে, তা সুনির্দিষ্টভাবে লিখে থাকি। এই গাইডে আমরা সার্ভিসের বিভিন্ন কনফিগারেশন অপশনগুলো বিস্তারিত শিখবো।
১. সার্ভিস ডেফিনিশন (Service Definition)
প্রতিটি কন্টেইনারকে ডকার কম্পোজের ভাষায় একটি Service বলা হয়। একটি প্রজেক্টে অনেকগুলো সার্ভিস থাকতে পারে।
ক) Building from Dockerfile
যদি আপনার ইমেজটি কাস্টম হয় এবং সেটি বিল্ড করার প্রয়োজন পড়ে:
services:
web:
build: . # বর্তমান ডিরেক্টরি
# অথবা ফোল্ডার স্পেসিফিক ভাবে:
# build: ./frontendখ) Using Existing Images
ডকার হাব থেকে কোনো প্রি-বিল্ট ইমেজ ব্যবহার করতে চাইলে:
services:
database:
image: mysql:8.0২. পোর্ট এবং ভলিউম ম্যাপিং
Port Mapping: হোস্ট মেশিনের পোর্টের সাথে কন্টেইনার পোর্টের সংযোগ।
yamlports: - "8080:80" # হোস্ট:কন্টেইনারVolume Mounting: ডেটা ড্রাইভ বা হোস্টের ফোল্ডার মাউন্ট করা।
yamlvolumes: - ./data:/app/data - db-storage:/var/lib/mysql
৩. এনভায়রনমেন্ট ভ্যারিয়েবল (Environment Variables)
অ্যাপের পাসওয়ার্ড বা সিক্রেট কন্টেইনারের ভেতরে পাস করার দুটি পদ্ধতি আছে:
১. সরাসরি উল্লেখ করা:
environment:
- DEBUG=true
- DB_PASSWORD=secret২. ফাইল থেকে লোড করা (Best Practice):
env_file:
- .env৪. কমান্ড ওভাররাইড (Command Override)
ডকার ইমেজে ডিফল্টভাবে যে কমান্ড দেওয়া থাকে (CMD), আপনি চাইলে কম্পোজ ফাইল থেকে তা পরিবর্তন করতে পারেন:
services:
app:
image: my-node-app
command: npm run dev # ডিফল্ট কমান্ডের ওপর এটি কাজ করবে৫. রিস্টার্ট পলিসি (Restart Policies)
কন্টেইনার কোনো কারণে ক্র্যাশ করলে বা বন্ধ হয়ে গেলে এটি কি অটো-স্টার্ট হবে কি না, তা এখান থেকে ঠিক করা যায়:
no: অটোমেটিক রিস্টার্ট হবে না (ডিফল্ট)।always: সবসময় রিস্টার্ট হবে।on-failure: যদি এরর হয়ে বন্ধ হয়, তবেই রিস্টার্ট হবে।unless-stopped: ইউজার নিজে ম্যানুয়ালি স্টপ না করা পর্যন্ত অটো-রিস্টার্ট হবে।
services:
db:
image: postgres
restart: always৬. সার্ভিস কনফিগারেশন সামারি
| কী-ওয়ার্ড | কাজ |
|---|---|
build | লোকাল ডকারফাইল থেকে ইমেজ তৈরি করে |
image | নির্দিষ্ট ইমেজ ব্যবহার করে |
ports | পোর্ট ম্যাপিং হ্যান্ডেল করে |
volumes | ডেটা পারসিস্টেন্স নিশ্চিত করে |
environment | কন্টেইনারে ভ্যারিয়েবল সেট করে |
restart | কন্টেইনারের রিস্টার্ট বিহেভিয়ার ঠিক করে |
TIP
যখন আপনি build এবং image দুটোই একসাথে ব্যবহার করবেন, তখন ডকার কম্পোজ বিল্ড করা ইমেজের নাম হিসেবে image ট্যাগটি ব্যবহার করবে।