অনেকেই মনে করেন ডকার (Docker) সাধারণ একটি টুল, সফটওয়্যার বা ছোটখাটো কোনো অ্যাপ্লিকেশন। কিন্তু আপনি যদি ডকারের গভীরে গিয়ে বুঝতে চান, তবে প্রথমেই এই ভুল ধারণাটি মাথা থেকে ঝেড়ে ফেলতে হবে। ডকার কোনো একক টুল বা সফটওয়্যার নয়—ডকার হচ্ছে একটি পূর্ণাঙ্গ প্ল্যাটফর্ম (Platform) বা ইকোসিস্টেম (Ecosystem)।
আজকের ব্লগে আমরা সহজ বাংলা ভাষায় বিস্তারিত জানব ডকার ইকোসিস্টেম কী, এর ভেতরের প্রতিটি কম্পোনেন্ট কীভাবে একে অপরের সাথে চেইনের মতো যুক্ত হয়ে কাজ করে এবং টার্মিনালে যখন আমরা docker run hello-world লিখি, তখন ঠিক কী কী ঘটে।
১. ইকোসিস্টেম (Ecosystem) বা প্ল্যাটফর্ম কী?
সহজ কথায়, যখন একাধিক উপাদান বা সত্তা একে অপরের ওপর নির্ভর করে একটি অবিচ্ছেদ্য চেইন বা শৃঙ্খল তৈরি করে কাজ করে, তখন তাকে ইকোসিস্টেম বলে।
প্রকৃতির খাদ্যশৃঙ্খলের (Food Chain) একটি চমৎকার উদাহরণ দেওয়া যাক:
কেঁচো → কেঁচো খায় হাঁস → হাঁসকে খায় সাপ → সাপকে খায় বেজি → বেজিকে খায় ইগল → ইগলকে আবার শিকার করে মানুষ।
এখানে প্রত্যেকে প্রত্যেকের সাথে একটি চেইনে যুক্ত। টেকনোলজির দুনিয়াতেও যখন অনেকগুলো স্বতন্ত্র কম্পোনেন্ট (টুলস, ইঞ্জিন, ডেটাবেজ, ভার্চুয়াল মেশিন) একসাথে একটি চেইনের মাধ্যমে সম্পূর্ণ পরিবেশ গড়ে তোলে, তখন টেকনিক্যাল ভাষায় তাকে আমরা বলি প্ল্যাটফর্ম বা ইকোসিস্টেম।
২. ডকার প্ল্যাটফর্মের মূল কম্পোনেন্টসমূহ
ডকার ইকোসিস্টেম মূলত নিচের প্রধান কম্পোনেন্টগুলোর সমন্বয়ে গঠিত:
-
Docker Client (CLI): এটি ডকারের ক্লায়েন্ট বা কমান্ড লাইন ইন্টারফেস। ব্যবহারকারী হিসেবে আমরা টার্মিনালে যেসব ডকার কমান্ড (যেমন:
docker run,docker build,docker pull) লিখি, ডকার ক্লায়েন্ট সেই কমান্ডগুলো গ্রহণ করে। -
Docker Engine (ডকার ইঞ্জিন): ডকারের মূল চালিকাশক্তি। এর ভেতরে থাকে ব্যাকগ্রাউন্ড সার্ভিস
dockerd(Docker Daemon) এবং কন্টেইনার রানটাইম (containerd,runc)। - Docker Desktop (ডকার ডেস্কটপ): ম্যাক (macOS) বা উইন্ডোজ (Windows) ব্যবহারকারীদের জন্য ডকার ডেস্কটপ একটি লাইটওয়েট লিনাক্স ভার্চুয়াল মেশিন (Linux VM) তৈরি করে দেয়, যাতে লিনাক্স কার্নেল ব্যবহারের মাধ্যমে ডকার ইঞ্জিন কাজ করতে পারে।
- Docker Image (ডকার ইমেজ): একটি কন্টেইনারের ব্লুপ্রিন্ট বা স্ন্যাপশট। ইমেজ থেকেই কন্টেইনার তৈরি করা যায়, আবার কন্টেইনার থেকে নতুন ইমেজ তৈরি করা সম্ভব।
- Docker Hub (ডকার হাব): এটি ডকারের একটি কেন্দ্রীয় ক্লাউড রেজিস্ট্রি বা ডেটাবেজ। এখানে বিশ্বজুড়ে তৈরি হওয়া সব ধরনের ইমেজ (যেমন: Ubuntu, Python, Golang, Redis, PostgreSQL, Hello-World) সংরক্ষিত থাকে।
- Docker Compose (ডকার কম্পোজ): একাধিক কন্টেইনারবিশিষ্ট জটিল অ্যাপ্লিকেশন সহজে কনফিগার ও রান করার টুল।
৩. ডকার ইকোসিস্টেম আর্কিটেকচার ডায়াগ্রাম
নিচে ডকার ইকোসিস্টেমের অভ্যন্তরীণ প্রবাহ ও উপাদানগুলোর সংযোগ দেখানো হলো:
৪. docker run hello-world দিলে ভেতরে কী ঘটে? (Step-by-Step Flow)
ডকার ইকোসিস্টেমের চেইন কীভাবে ধাপে ধাপে কাজ করে, তা একটি প্র্যাকটিক্যাল কমান্ডের মাধ্যমে বোঝা যাক:
docker run hello-world
যখনই আপনি এই কমান্ডটি টার্মিনালে রান করবেন, ব্যাকগ্রাউন্ডে নিচের চেইনটি বাস্তবায়িত হয়:
[User / Terminal]
│
▼ (Command: docker run hello-world)
[Docker Client / CLI]
│
▼ (REST API Request)
[Docker Daemon: dockerd]
│
▼
[Container Runtime: containerd]
├───► (Local Cache Check: ইমেজটি কি লোকালি আছে?)
│ │
│ ├─► [নাই] ──► [Docker Hub] (Pull Image -> Cache locally)
│ └─► [আছে] ──► (সরাসরি ইমেজ ব্যবহার করো)
│
▼
[Low-Level Runtime: runc]
│
▼ (Kernel Features: Namespaces & Cgroups)
[Linux Kernel]
│
▼ (Creates isolated process)
[Running Container: Hello-World]
│
▼ (Response Flow back: Kernel -> runc -> containerd -> dockerd -> Docker CLI)
[Terminal Output: "Hello from Docker!"]
বিস্তারিত ধাপসমূহ:
-
কমান্ড গ্রহণ: Docker CLI কমান্ডটি গ্রহণ করে REST API রিকোয়েস্টের মাধ্যমে ডকার ইঞ্জিনের ব্যাকগ্রাউন্ড ডেমন
dockerd-এর কাছে পাঠায়। -
কন্টেইনার ডেমনের কাজ:
dockerdসার্বক্ষণিক রিকোয়েস্ট হ্যান্ডেল করে এবং কমান্ডটি হাই-লেভেল কন্টেইনার রানটাইমcontainerd-এর কাছে হস্তান্তর করে। -
লোকাল ক্যাশ যাচাই:
containerdচেক করে তার লোকাল স্টোরেজে বা ক্যাশেhello-worldইমেজটি সংরক্ষিত আছে কি না। -
ডকার হাব থেকে পুল করা (যদি লোকালি না থাকে):
- প্রথমবার রান করার সময় লোকাল ক্যাশে ইমেজটি থাকে না। তাই টার্মিনালে মেসেজ আসে:
Unable to find image 'hello-world:latest' locally। - তখন
containerdডকার হাবে (Docker Hub) রিকোয়েস্ট পাঠিয়ে ইমেজটি ডাউনলোড (Pull) করে এবং লোকাল মেশিনে ক্যাশ/স্টোর করে রাখে।
- প্রথমবার রান করার সময় লোকাল ক্যাশে ইমেজটি থাকে না। তাই টার্মিনালে মেসেজ আসে:
-
লো-লেভেল রানটাইম ও কার্নেল কমিউনিকেশন:
-
containerdতখন লো-লেভেল কন্টেইনার রানটাইমrunc-কে বলে কন্টেইনার তৈরি করতে। -
runcসরাসরি অপারেটিং সিস্টেমের Linux Kernel-এর সাথে কথা বলে:- Namespaces: কন্টেইনারের জন্য সম্পূর্ণ পৃথক ও আইসোলেটেড একটি পরিবেশ তৈরি করে।
- Cgroups (Control Groups): কন্টেইনারটি সর্বোচ্চ কতটুকু CPU, RAM বা ডিস্ক ব্যবহার করতে পারবে তার লিমিট নির্ধারণ করে দেয়।
-
-
প্রসেস এক্সিকিউশন ও রেসপন্স ব্যাক:
- কার্নেলের ভেতর একটি আইসোলেটেড প্রসেস চালু হয় এবং
hello-worldপ্রোগ্রামটি রান করে। - আউটপুট তৈরি হলে তা নিচ থেকে ওপরে চেইনের মাধ্যমে ফিরে যায়: Kernel $\rightarrow$ runc $\rightarrow$ containerd $\rightarrow$ dockerd $\rightarrow$ Docker CLI।
- পরিশেষে Docker CLI আমাদের টার্মিনালে সুন্দর মেসেজ প্রিন্ট করে দেখায়: > "Hello from Docker! This message shows that your installation appears to be working correctly."
- কার্নেলের ভেতর একটি আইসোলেটেড প্রসেস চালু হয় এবং
৫. দ্বিতীয়বার একই কমান্ড রান করলে কী হয়?
আপনি যখন দ্বিতীয়বার পুনরায় docker run hello-world কমান্ডটি রান করবেন:
-
containerdলোকাল ক্যাশে দেখবে যেhello-worldইমেজটি ইতিমধ্যে স্টোর করা আছে। - ফলে এটি আর ডকার হাবে যাবে না এবং
Unable to find image...মেসেজটিও আর আসবে না। - লোকাল ইমেজ থেকেই সরাসরি
runcও কার্নেলের মাধ্যমে এক পলকে নতুন একটি কন্টেইনার তৈরি হয়ে মুহূর্তেই আউটপুট চলে আসবে।
৬. ম্যাক বা উইন্ডোজে লিনাক্স কার্নেল কীভাবে আসে?
কন্টেইনার প্রযুক্তির মূল চাবিকাঠি হলো লিনাক্স কার্নেলের ফিচার (Namespaces এবং Control Groups)। ম্যাক (macOS) বা উইন্ডোজ (Windows) এ যেহেতু নিজস্ব লিনাক্স কার্নেল থাকে না, তাই Docker Desktop ব্যাকগ্রাউন্ডে একটি লাইটওয়েট লিনাক্স ভার্চুয়াল মেশিন (Linux VM) চালায়। এই ভিএম-এর লিনাক্স কার্নেলের সাথেই ডকার ইঞ্জিন যুক্ত হয়ে পুরো ইকোসিস্টেমের কার্যকারিতা বজায় রাখে।
এক নজরে মূল পয়েন্টগুলো:
ডকার কী? ডকার কোনো সাধারণ সফটওয়্যার বা টুল নয়; এটি একটি প্ল্যাটফর্ম / ইকোসিস্টেম।
চেইন কাঠামো:
Docker CLI→dockerd→containerd→Docker Hub / Local Cache→runc→Linux Kernel (Namespace & Cgroups)→Container।

Top comments (0)