Docker Compose সম্পূর্ণ গাইড

প্রতিটি সার্ভিসের জন্য ম্যানুয়াল Docker কমান্ড চালানো বন্ধ করুন।

আপনি যদি একটি আধুনিক অ্যাপ্লিকেশন চালান, তবে আপনার সম্ভবত একটি frontend, একটি backend, একটি database এবং একটি cache রয়েছে। এগুলো একে একে চালানো ধীরগতির এবং এতে ভুল হওয়ার সম্ভাবনা থাকে।

Docker Compose এই সমস্যার সমাধান করে। আপনি একটি YAML ফাইলে আপনার পুরো স্ট্যাকটি সংজ্ঞায়িত করতে পারেন এবং একটি কমান্ডের মাধ্যমে সবকিছু শুরু করতে পারেন।

মূল বিষয়সমূহ

  • Compose ছাড়া: চারটি কন্টেইনারের জন্য আপনাকে চারটি আলাদা কমান্ড চালাতে হবে।
  • Compose সহ: আপনি "docker compose up" চালাবেন এবং সবকিছু শুরু হয়ে যাবে।

গুরুত্বপূর্ণ ধারণাগুলো

• Services: প্রতিটি service একটি কন্টেইনারকে নির্দেশ করে। আপনি আপনার নিজস্ব কোডের জন্য "build" অথবা PostgreSQL বা Redis-এর মতো প্রি-বিল্ট টুলের জন্য "image" ব্যবহার করতে পারেন। • Port Mapping: HOST:CONTAINER ফরম্যাটটি ব্যবহার করুন। এটি আপনার কম্পিউটারের পোর্টকে কন্টেইনার পোর্টের সাথে ম্যাপ করে। • Environment Variables: সাধারণ মানের জন্য "environment" অথবা সিক্রেটগুলো একটি আলাদা .env ফাইলে রাখার জন্য "env_file" ব্যবহার করুন। • Volumes: আপনার ডেটা সুরক্ষিত রাখতে volumes ব্যবহার করুন। Volumes ছাড়া, কন্টেইনার বন্ধ হয়ে গেলে আপনার database ডেটা হারিয়ে যাবে। • Networks: Compose স্বয়ংক্রিয়ভাবে একটি নেটওয়ার্ক তৈরি করে। কন্টেইনারগুলো localhost-এর পরিবর্তে তাদের service name ব্যবহার করে একে অপরের সাথে যোগাযোগ করে। • Depends_on: এটি স্টার্টআপ অর্ডার সেট করে। এটি Docker-কে নির্দেশ দেয় যে backend শুরু করার আগে database শুরু করতে হবে। মনে রাখবেন যে, এটি database পুরোপুরি প্রস্তুত হওয়া পর্যন্ত অপেক্ষা করে না।

ইন্টারভিউ টিপস

  • কখন build বনাম image ব্যবহার করবেন? আপনার কাস্টম অ্যাপ্লিকেশনের জন্য "build" ব্যবহার করুন। Docker Hub থেকে বিদ্যমান টুলের জন্য "image" ব্যবহার করুন।
  • কন্টেইনারগুলো কীভাবে যোগাযোগ করে? তারা Docker নেটওয়ার্কের মধ্যে hostname হিসেবে service name ব্যবহার করে।
  • ডেটা লস কীভাবে এড়ানো যায়? ডাটাবেসের জন্য সর্বদা named volumes ব্যবহার করুন।
  • সিক্রেট কীভাবে হ্যান্ডেল করবেন? এগুলো কখনোই হার্ডকোড করবেন না। একটি .env ফাইল ব্যবহার করুন।

সাধারণ ভুল যা এড়ানো উচিত

  • "latest" ট্যাগ ব্যবহার করা: এটি অপ্রত্যাশিত আপডেট ঘটাতে পারে। "postgres:16"-এর মতো নির্দিষ্ট ভার্সন ব্যবহার করুন।
  • localhost ব্যবহার করা: কন্টেইনারগুলো localhost-এর মাধ্যমে একে অপরকে দেখতে পায় না। service name ব্যবহার করুন।
  • Healthchecks না থাকা: আপনার service আসলে কাজ করার জন্য প্রস্তুত কি না তা মনিটর করতে healthchecks ব্যবহার করুন।

উৎস: https://dev.to/adityaguptareal/docker-compose-complete-guide-1gac