ডকার কম্পোজ একটি শক্তিশালী টুল যা স্থানীয় উন্নয়নের জন্য মাল্টি-কন্টেইনার ডকার অ্যাপ্লিকেশন সংজ্ঞায়িত এবং চালানোর প্রক্রিয়াটিকে সহজ করে তোলে। এটি আপনাকে একটি একক docker-compose.yml ফাইলে আপনার অ্যাপ্লিকেশনের পরিষেবা, নেটওয়ার্ক এবং ভলিউম কনফিগার করতে দেয়, যা আপনাকে একটি একক কমান্ড দিয়ে আপনার সম্পূর্ণ উন্নয়ন পরিবেশ চালু করতে সক্ষম করে।
স্থানীয় উন্নয়নের জন্য ডকার কম্পোজ কেন ব্যবহার করবেন?
- সরলীকৃত সেটআপ: এটি একাধিক নির্ভরতা (যেমন, একটি ওয়েব অ্যাপ, ডেটাবেস এবং ক্যাশিং পরিষেবা) সহ জটিল উন্নয়ন পরিবেশ সেটআপ করার প্রক্রিয়াটিকে সহজ করে তোলে।
- পুনরাবৃত্তিযোগ্য পরিবেশ: নিশ্চিত করে যে আপনার স্থানীয় পরিবেশ উৎপাদনের সাথে ঘনিষ্ঠভাবে মেলে, "আমার মেশিনে কাজ করে" সমস্যাগুলি হ্রাস করে।
- নির্ভরতা ব্যবস্থাপনা: আপনার হোস্ট মেশিনে কোনও দ্বন্দ্ব ছাড়াই সহজেই বিভিন্ন সংস্করণের পরিষেবাগুলি (যেমন, ডেটাবেস, মেসেজ কিউ) পরিচালনা করুন।
- অনবোর্ডিং: নতুন ডেভেলপাররা একটি একক কমান্ড দিয়ে দ্রুত একটি প্রকল্প চালু করতে পারে।
মূল ধারণা
docker-compose.yml(বাcompose.yaml): এই YAML ফাইলটি ডকার কম্পোজের কেন্দ্রবিন্দু। এটি আপনার অ্যাপ্লিকেশন গঠনকারী পরিষেবা, নেটওয়ার্ক এবং ভলিউমগুলি সংজ্ঞায়িত করে।- পরিষেবা (Services): আপনার
docker-compose.ymlএর প্রতিটি পরিষেবা একটি কন্টেইনারের প্রতিনিধিত্ব করে। উদাহরণস্বরূপ, আপনার অ্যাপ্লিকেশনের জন্য একটিwebপরিষেবা, আপনার ডেটাবেসের জন্য একটিdbপরিষেবা এবং ক্যাশিংয়ের জন্য একটিredisপরিষেবা থাকতে পারে। - নেটওয়ার্ক (Networks): ডকার কম্পোজ ডিফল্টভাবে আপনার অ্যাপ্লিকেশনের জন্য একটি একক নেটওয়ার্ক সেট আপ করে, যা পরিষেবাগুলিকে তাদের পরিষেবা নামগুলিকে হোস্টনাম হিসাবে ব্যবহার করে একে অপরের সাথে যোগাযোগ করতে দেয়।
- ভলিউম (Volumes): স্থায়ী ডেটা স্টোরেজের জন্য (যেমন, ডেটাবেস ডেটা) এবং উন্নয়নের সময় লাইভ রিলোড সক্ষম করার জন্য আপনার কন্টেইনারগুলিতে স্থানীয় কোড মাউন্ট করার জন্য ব্যবহৃত হয়।
মৌলিক ওয়ার্কফ্লো এবং কমান্ড
-
docker-compose.ymlএ পরিষেবাগুলি সংজ্ঞায়িত করুন: আপনার প্রকল্পের রুট ডিরেক্টরিতে একটিdocker-compose.ymlফাইল তৈরি করুন।এখানে একটি Redis ক্যাশের সাথে সংযুক্ত একটি Python Flask ওয়েব অ্যাপ্লিকেশনের জন্য একটি সাধারণ উদাহরণ রয়েছে:
```yaml
docker-compose.yml
version: '3.8' # Compose ফাইল ফরম্যাটের সংস্করণ নির্দিষ্ট করে services: web: build: . # বর্তমান ডিরেক্টরির Dockerfile থেকে তৈরি করুন ports: - "8000:5000" # হোস্ট পোর্ট 8000 কে কন্টেইনার পোর্ট 5000 এ ম্যাপ করুন volumes: - .:/code # বর্তমান ডিরেক্টরিকে কন্টেইনারের /code ডিরেক্টরিতে মাউন্ট করুন environment: FLASK_ENV: development # পরিবেশ ভেরিয়েবল সেট করুন REDIS_HOST: redis # হোস্টনাম হিসাবে পরিষেবা নাম 'redis' ব্যবহার করুন redis: image: "redis:alpine" # অফিসিয়াল Redis ইমেজ ব্যবহার করুন ports: - "6379:6379" # Redis পোর্ট ম্যাপ করুন volumes: - redis_data:/data # Redis ডেটা স্থায়ী করুন volumes: redis_data: # নামযুক্ত ভলিউম সংজ্ঞায়িত করুন ```
-
আপনার অ্যাপ্লিকেশন তৈরি এবং চালান: টার্মিনালে আপনার প্রজেক্ট ডিরেক্টরিতে নেভিগেট করুন এবং চালান:
bash docker compose upএই কমান্ডটি ইমেজ তৈরি করবে (যদি প্রয়োজন হয়) এবং আপনারdocker-compose.ymlফাইলে সংজ্ঞায়িত সমস্ত পরিষেবা চালু করবে।পরিষেবাগুলি ব্যাকগ্রাউন্ডে (detached মোডে) চালানোর জন্য, ব্যবহার করুন:
bash docker compose up -d -
পরিষেবাগুলি বন্ধ এবং সরান: আপনি উন্নয়ন শেষ করার পরে, Compose দ্বারা তৈরি সমস্ত কন্টেইনার, নেটওয়ার্ক এবং ভলিউম বন্ধ এবং সরান:
bash docker compose downনামযুক্ত ভলিউমগুলি সরাতেdocker compose down -vব্যবহার করুন (এটি স্থায়ী ডেটা মুছে ফেলবে)। -
লগ দেখুন: আপনার চলমান পরিষেবাগুলির লগ দেখতে:
bash docker compose logs [service_name] # উদাহরণ: docker compose logs web # রিয়েল-টাইমে লগ অনুসরণ করতে -f ব্যবহার করুন: # docker compose logs -f web -
একটি পরিষেবাতে কমান্ড চালান: আপনি
execব্যবহার করে একটি চলমান কন্টেইনারের ভিতরে কমান্ড চালাতে পারেন:bash docker compose exec web bash # এটি 'web' পরিষেবা কন্টেইনারের ভিতরে একটি bash শেল খুলবে।
স্থানীয় উন্নয়নের জন্য সেরা অনুশীলন
- লাইভ রিলোডের জন্য ভলিউম মাউন্টিং: আপনার স্থানীয় কোড ডিরেক্টরি কন্টেইনারে মাউন্ট করুন (
volumes: - .:/code) যাতে কোড পরিবর্তনগুলি ইমেজ পুনরায় তৈরি না করেই তাৎক্ষণিকভাবে প্রতিফলিত হয়। - পরিবেশ ভেরিয়েবল: পরিবেশ-নির্দিষ্ট ভেরিয়েবল (যেমন API কী বা ডেটাবেস শংসাপত্র) পরিচালনা করতে
.envফাইলগুলি ব্যবহার করুন এবং সেগুলিকে আপনারdocker-compose.ymlফাইল এবং সংস্করণ নিয়ন্ত্রণ থেকে দূরে রাখুন। - স্বাস্থ্য পরীক্ষা: নির্ভর পরিষেবাগুলি শুরু হওয়ার আগে প্রস্তুত রয়েছে তা নিশ্চিত করতে আপনার
docker-compose.ymlএ স্বাস্থ্য পরীক্ষা প্রয়োগ করুন। - হালকা ইমেজ: ইমেজগুলির আকার ছোট রাখতে ন্যূনতম বেস ইমেজ (যেমন Alpine ভেরিয়েন্ট) এবং মাল্টি-স্টেজ বিল্ড ব্যবহার করুন।
এই পদক্ষেপগুলি অনুসরণ করে, আপনি আপনার মাল্টি-কন্টেইনার অ্যাপ্লিকেশনগুলির জন্য সামঞ্জস্যপূর্ণ, বিচ্ছিন্ন এবং সহজেই পরিচালনাযোগ্য স্থানীয় উন্নয়ন পরিবেশ তৈরি করতে ডকার কম্পোজের কার্যকরভাবে সুবিধা নিতে পারেন।