সরাসরি প্রধান সামগ্রীতে চলে যান

docker - Namespaces & cgroups কী

Docker মূলত দুইটা Linux core feature এর উপর দাঁড়িয়ে আছে — Namespaces আর cgroups (control groups)। এগুলো দিয়েই Docker container কে isolate আর control করে।


🧩 Namespaces কী? (Isolation)

Namespaces process-গুলোকে আলাদা “virtual view” দেয় যেন তারা মনে করে তারা একাই পুরো সিস্টেম ব্যবহার করছে।

Docker container-এর ভিতরের process মনে করে:

  • তার নিজেরই PID 1
  • নিজের network
  • নিজের filesystem
  • নিজের hostname

আসলে সবটাই host এর উপরেই চলছে, কিন্তু namespace আলাদা বলে তারা বুঝতে পারে না।

Docker এ ব্যবহৃত প্রধান namespaces

| Namespace | কাজ | | --- | --- | | PID | আলাদা process tree | | NET | আলাদা network stack (IP, ports, routes) | | MNT | আলাদা filesystem (mount) | | UTS | আলাদা hostname | | IPC | Shared memory আলাদা করে | | USER | আলাদা user mapping |

📌 উদাহরণ:

একই server-এ ১০টা Docker container চললেও প্রত্যেকটার ভিতরে ps aux চালালে শুধু নিজের process-ই দেখা যায় — এটা PID namespace এর কাজ।


⚙️ cgroups কী? (Resource Control)

cgroups (control groups) দিয়ে Linux kernel বলে দেয় কে কত resource ব্যবহার করতে পারবে।

Docker ব্যবহার করে:

  • কত CPU ব্যবহার করতে পারবে
  • কত memory (RAM) নিতে পারবে
  • কত disk I/O
  • কত network bandwidth

Example

docker run --memory=512m --cpus=1 nginx

এখানে:

  • container শুধু 512MB RAM পাবে
  • 1 CPU-এর বেশি ব্যবহার করতে পারবে না

এই limitation enforced করে cgroups।


👀 সহজ ভাষায় পার্থক্য

| বিষয় | Namespaces | cgroups | | --- | --- | --- | | কাজ | আলাদা করে রাখে | কতটুকু পাবে সেটার limit দেয় | | ফোকাস | Isolation | Resource limiting | | উদাহরণ | আলাদা IP | RAM limit 512MB | | Docker কোনটা ব্যবহার করে | ✔ | ✔ |

এক লাইনে:

Namespace = আলাদা করে

cgroups = সীমা বেঁধে দেয়


✅ Docker container কিভাবে কাজ করে (flow)

  1. Linux kernel namespace দিয়ে isolation করে
  2. cgroups দিয়ে resource limit করে
  3. Filesystem copy-on-write (overlayFS) দেয়
  4. একটা container তৈরি হয়

এই চারটা মিলেই "magic" container।


আপনি চাইলে পরের ধাপে আমি দেখাতে পারি:

✅ Terminal দিয়ে Namespace কিভাবে দেখা যায়

✅ cgroup folder structure কী

✅ Docker container inside Linux view diagram

বলুন: "show with commands"

মন্তব্যসমূহ

এই ব্লগটি থেকে জনপ্রিয় পোস্টগুলি

সিজ্জিন (Sijjin) vs ইল্লিয়িন (Illiyin) পার্থক্য Difference

Sijjin (سِجِّين) এবং Illiyin (عِلِّيِّين) —এ দুটি শব্দ কুরআনে এসেছে এবং দুটোই মানুষের আমলনামা সংরক্ষণ সম্পর্কিত স্থানকে নির্দেশ করে। ১. সিজ্জিন (Sijjin) সিজ্জিন হলো পাপীদের (কাফের, মুনাফিক ও দুরাচারীদের) আমলনামা সংরক্ষণের স্থান। এটি সাত তলদেশের নীচে এক কারাগার বা অন্ধকার জগতে অবস্থিত বলে উল্লেখ রয়েছে। সূরা আল-মুতাফফিফীন (৮৩:৭-৯) তে বলা হয়েছে: "كَلَّا إِنَّ كِتَابَ الْفُجَّارِ لَفِي سِجِّينٍ ۝ وَمَا أَدْرَاكَ مَا سِجِّينٌ ۝ كِتَابٌ مَرْقُومٌ" অর্থ: "না, পাপীদের আমলনামা সিজ্জিনে সংরক্ষিত। তুমি কি জানো, সিজ্জিন কী? এটি এক লিখিত দলিল।" সিজ্জিনকে একটি কারাগার, সংকীর্ণ স্থান, বা নিচের স্তরে অবস্থিত এক অন্ধকার দুনিয়া হিসেবে ব্যাখ্যা করা হয়। ২. ইল্লিয়িন (Illiyin) ইল্লিয়িন হলো সৎকর্মশীলদের (মুমিন ও নেককারদের) আমলনামা সংরক্ষণের স্থান । এটি সপ্তম আসমানের ওপরে সংরক্ষিত এক সম্মানিত স্থান। সূরা আল-মুতাফফিফীন (৮৩:১৮-২১) তে বলা হয়েছে: "كَلَّا إِنَّ كِتَابَ الْأَبْرَارِ لَفِي عِلِّيِّينَ ۝ وَمَا أَدْرَاكَ مَا عِلِّيُّونَ ۝ كِتَابٌ مَرْقُومٌ ۝ يَش...

জাভা ফিডব্যাক এবং স্ট্রাকচার্ড কনকারেন্সি: বিবর্তনের গল্প

Introduction এই ভিডিওর নির্দিষ্ট অংশে জাভা ল্যাঙ্গুয়েজ আর্কিটেক্ট ব্রায়ান গোয়েটজ (Brian Goetz) আলোচনা করেছেন কীভাবে জাভার নতুন ফিচারগুলো তৈরি হয় এবং এতে সাধারণ ডেভেলপারদের মতামতের গুরুত্ব কতটুকু। বিশেষ করে Structured Concurrency -এর মতো জটিল ফিচারগুলো কেন বারবার 'Preview' অবস্থায় থাকে এবং কীভাবে কমিউনিটির ফিডব্যাক সেই ফিচারগুলোকে আরও নিখুঁত করতে সাহায্য করে, তা এখানে সহজভাবে বোঝানো হয়েছে। ১. ভালো ফিডব্যাক আসলে কী? ভিডিও রেফারেন্স: [ 34:53 ] ব্রায়ান গোয়েটজ বলছেন যে, জাভা টিম যখন কোনো নতুন ফিচারের খসড়া (Draft) বা প্রস্তাব (JEP) প্রকাশ করে, তখন তারা এমন কিছু জানতে চায় যা তারা নিজেরা আগে ভাবেনি। বিস্তারিত: একজন ডেভেলপার হিসেবে আমরা যখন কোনো নতুন ফিচার দেখি, আমাদের প্রথম প্রতিক্রিয়া হয় সেটার Syntax বা লেখার ধরন নিয়ে। কিন্তু ব্রায়ানের মতে, "এই লেখাটা কেন এমন হলো?" বা "এটা কোটলিন বা স্কালা-র মতো কেন নয়?"—এই ধরনের ফিডব্যাক খুব একটা কাজে আসে না। আসল দামী ফিডব্যাক হলো সেইটা, যা নতুন কোনো বাস্তব সমস্যা (Edge Case) তুলে ধরে। আমার চিন্তা: আপনি যদি কেবল দ...

Microservice Error Handling

একদম ঠিক বলেছেন ভাই 💯 — তুমি এখন microservice design-এর আসল beauty ধরেছো 👏 ✅ হ্যাঁ — যদি প্রতিটা service independent হয় (loosely coupled architecture), তাহলে একটা service fail করলে আরেকটা fail করবে না (at least directly না)। তবে, এখানে একটু গভীর বিষয় আছে — “independent” মানে কি logical independence, নাকি runtime independence?” এইটা বোঝা খুব জরুরি। চলো ধাপে ধাপে পরিষ্কারভাবে দেখি 👇 ⚙️ ১️⃣ Microservice Independence মানে কী? একটা system এ একাধিক service থাকে, যেমন: 🧾 Order Service 💳 Payment Service 🚚 Delivery Service ✉️ Notification Service 🔹 Logical Independence: প্রতিটা service এর নিজের data, business logic, আর deploy pipeline আলাদা। 📌 উদাহরণ: Payment service down থাকলেও Order service order create করতে পারবে (pending state এ রাখবে)। Delivery service নিজের data manage করবে, Payment এর DB access করবে না। 👉 মানে “tight coupling” নেই — service গুলা নিজের domain handle করে। 🔹 Runtime Independence: প্রতিটা service run হয় আলাদা instance/container এ। তাদের মধ্যে ...