Docker- Part-3
আমরা যারা কন্টেইনারাইজেশন নিয়ে কাজ করি, তারা প্রতিদিন docker run কমান্ডটি ব্যবহার করছি। কিন্তু এই একটি কমান্ড দেওয়ার পর পর্দার আড়ালে ঠিক কী কী ঘটে? কিভাবে Docker Daemon আমাদের রিকোয়েস্টটি প্রসেস করে এবং Linux Kernel-এর সাথে কথা বলে একটি আইসোলেটেড এনভায়রনমেন্ট তৈরি করে?
আজকের আর্টিকেলে আমি Docker Engine-এর আর্কিটেকচার এবং এর অভ্যন্তরীণ বিভিন্ন কম্পোনেন্ট যেমন— dockerd, containerd, runc, Namespaces এবং Cgroups নিয়ে সহজ ভাষায় আলোচনা করেছি।
Docker Engine
Docker Engine হলো Docker-এর মূল অংশ। এটি একটি client-server application যা দিয়ে আমরা container create, stop, delete, start, clean ইত্যাদি করি। এর প্রধান তিনটি অংশ রয়েছে:
- Docker CLI
- Docker Daemon (dockerd)
- Container Runtime
Docker CLI (Docker Client)
এটি হলো interface যেখানে আমরা docker-এর বিভিন্ন কমান্ড লিখি। যেমন: docker run, docker build ইত্যাদি। সোজা কথা user input নেয়ার interface বা user এর সাথে interact করার মাধ্যমে।
Docker Daemon (dockerd)
- এটি হচ্ছে docker-এর মস্তিষ্ক। সব কাজের আসল দায়িত্ব পালন করে এটি।
- ক্লায়েন্টের কাছ থেকে রিকোয়েস্ট গ্রহণ করে ইমেজ, কন্টেইনার ও নেটওয়ার্ক ম্যানেজ করে।
- এটি একটি ব্যাকগ্রাউন্ড প্রসেস। এটি সবসময় listen করে যে কোনো নতুন কমান্ড আসছে কি না। এটি অনেকটা 'বিগ ব্রাদার' বা প্যারেন্ট প্রসেসের মতো যা পুরো সিস্টেমের দেখাশুনা করে।
- Docker Daemon সবসময় অন থাকে। PC start করার সাথে সাথে এটি start হয়ে যায়। Request-এর জন্য wait করে।
Container Runtime
Container Runtime হলো docker-এর সেই উপাদান যা actual container চালায়। এই Runtime আবার দুই ধরণের:
- containerd (High level Runtime)
- runc (low level Runtime)
*containerd (High level Runtime): *
- এটি docker image ম্যানেজ করে,
- container life cycle manage করে
- এবং network, storage handle করে।
runc (low level Runtime):
- এটি Kernel এর সাহায্য নিয়ে কন্টেইনার তৈরি করার কাজ করে।
- এটি Namespace ও Cgroup ব্যবহার করে।
Execution Flow (কিভাবে কাজ করে)
যখন আমরা লিখি docker run hello-world, তখন:
- Step 1 (Request): User docker CLI এর মাধ্যমে dockerd (daemon) কে request পাঠায়। dockerd সেটা রিসিভ করে।
- Step 2 (Delegation): dockerd নিজে container তৈরি না করে সেই দায়িত্ব পাঠিয়ে দেয় containerd-এর কাছে।
- Step 3 (Execution): containerd আবার runc কে কল করে। runc সরাসরি OS এর Kernel-এর সাথে কথা বলে।
- Step 4 (Isolation): Kernel তখন Namespace এবং Cgroup ব্যবহার করে একটি isolated (আলাদা) পরিবেশ তৈরি করে। আর এভাবেই একটি container তৈরি হয়।
Top comments (0)