
ডকার কি এবং এটি কিভাবে কাজ করে?
docker ক্লায়েন্ট একটি REST API এর মাধ্যমে dockerd ডেমনে কমান্ড পাঠায়, যা
ছবি তৈরি করে এবং সেগুলো থেকে পাত্র চালায়।এটি কেন বিদ্যমান। ডকার আপনাকে একটি অ্যাপ্লিকেশনকে এর সমস্ত নির্ভরতা (লাইব্রেরি, কনফিগারেশন, রানটাইম) একটি একক আর্টিফ্যাক্ট - একটি চিত্র --এ প্যাকেজ করতে দেয় এবং এটিকে একটি ডেভেলপার ল্যাপটপে, CI এবং উৎপাদনে একইভাবে চালাতে দেয়৷ এটি ক্লাসিক "আমার মেশিনে কাজ করে" সমস্যার সমাধান করে।
কন্টেইনার বনাম ভার্চুয়াল মেশিন। একটি VM হার্ডওয়্যার ভার্চুয়ালাইজ করে এবং একটি সম্পূর্ণ গেস্ট ওএসকে তার নিজস্ব কার্নেল সহ পাঠায়। একটি ধারক একটি বিচ্ছিন্ন প্রক্রিয়া যা হোস্টের কার্নেল ব্যবহার করে। ফলস্বরূপ, পাত্রগুলি হালকা হয়, এক সেকেন্ডের ভগ্নাংশে শুরু হয় এবং কম সংস্থান ব্যবহার করে। কিন্তু একটি ধারক লাইটওয়েট VM নয়: এটি হোস্ট কার্নেলের সাথে আবদ্ধ থাকে এবং এর বিচ্ছিন্নতা সীমা VM-এর চেয়ে দুর্বল। একটি VM-এর হার্ডওয়্যার-প্রবর্তিত বিচ্ছিন্নতা রয়েছে, যেখানে শেয়ার্ড কার্নেলের একটি দুর্বলতা সম্ভাব্যভাবে একটি ধারক থেকে এড়িয়ে যেতে পারে - এটি গতি এবং ঘনত্বের জন্য ট্রেড-অফ। হোস্ট অবশ্যই কন্টেইনার প্রকারের সাথে মেলে: লিনাক্স কন্টেইনারগুলির একটি লিনাক্স কার্নেল প্রয়োজন, উইন্ডোজ কন্টেইনারগুলির একটি উইন্ডোজ কার্নেল প্রয়োজন৷ ম্যাকওএস এবং উইন্ডোজে, ডকার ডেস্কটপ স্বচ্ছভাবে একটি ছোট লিনাক্স ভিএম চালায় (যেমন WSL2 এর মাধ্যমে), তাই সেখানে লিনাক্স কন্টেইনারগুলি সেই VM-এর কার্নেল শেয়ার করে, আপনার OS-এর কার্নেল নয়।
আর্কিটেকচার (ক্লায়েন্ট-সার্ভার)। ডকারের ডকুমেন্টেশন প্রতি:
dockerক্লায়েন্ট হল ব্যবহারকারীদের ডকারের সাথে ইন্টারঅ্যাক্ট করার প্রাথমিক উপায়;docker runএর মত কমান্ড ডেমনে পাঠানো হয়।dockerdডেমন কনটেইনার তৈরি, চালানো এবং বিতরণের "ভারী উত্তোলন করে" এবং ছবি, কন্টেইনার, নেটওয়ার্ক এবং ভলিউমের মতো বস্তুগুলি পরিচালনা করে।- ক্লায়েন্ট একটি ইউনিক্স সকেট বা একটি নেটওয়ার্ক ইন্টারফেসের মাধ্যমে একটি REST API এর মাধ্যমে ডেমনের সাথে কথা বলে, যাতে তারা বিভিন্ন মেশিনে চলতে পারে।
- একটি রেজিস্ট্রি ছবি সংরক্ষণ করে; ডিফল্ট পাবলিক হল ডকার হাব।
ছবি এবং পাত্র। একটি সহজ উপমা: একটি চিত্র একটি ক্লাসের মতো (বা ডিস্কের একটি প্রোগ্রাম), এবং একটি ধারক এটির একটি উদাহরণ (একটি চলমান প্রক্রিয়া); আপনি একটি ছবি থেকে অনেক কন্টেইনার শুরু করতে পারেন।
- একটি ইমেজ হল একটি পঠনযোগ্য টেমপ্লেট যেখানে একটি ধারক তৈরি করার নির্দেশাবলী রয়েছে, যা স্তরগুলি থেকে তৈরি৷ এটি একটি ডকারফাইল দ্বারা সংজ্ঞায়িত করা হয়েছে; আপনি যখন এটি পরিবর্তন করেন, শুধুমাত্র পরিবর্তিত স্তরগুলি পুনর্নির্মিত হয়।
- একটি ধারক হল একটি চিত্রের একটি চলমান উদাহরণ৷ চিত্রের শুধুমাত্র পঠনযোগ্য স্তরগুলির উপরে এটি একটি পাতলা লিখনযোগ্য স্তর যোগ করে (কপি-অন-রাইট); ধারকটি সরানো হলে সেখানে লেখা কিছু হারিয়ে যায় — ঠিক এই কারণেই স্থায়ী ডেটার ভলিউম প্রয়োজন।
কীভাবে বিচ্ছিন্নতা কাজ করে (হুডের নিচে)। ডকার্ড সরাসরি কার্নেলকে কল করে না — এটি কন্টেইনার লাইফসাইকেল ম্যানেজমেন্টকে কন্টেইনারড-এ অর্পণ করে, যা একটি OCI রানটাইম চালু করে; ডকারে ডিফল্ট হল runc, কিন্তু রানটাইম প্লাগেবল (crun, gVisor, Kata, ইত্যাদি)। প্রকৃত বিচ্ছিন্নতা লিনাক্স কার্নেল বৈশিষ্ট্য থেকে আসে:
- নেমস্পেস সম্পদ বিচ্ছিন্ন করুন (ম্যান7 পৃষ্ঠা প্রতি 8 প্রকার: PID, নেটওয়ার্ক, মাউন্ট, UTS, IPC, ব্যবহারকারী, cgroup, সময়)। একটি প্রক্রিয়া শুধুমাত্র তার নিজস্ব পিআইডি, নিজস্ব নেটওয়ার্ক স্ট্যাক এবং আরও অনেক কিছু "দেখে"।
- cgroups (নিয়ন্ত্রণ গ্রুপ) সম্পদ ব্যবহারের জন্য সীমা এবং অ্যাকাউন্ট (CPU, মেমরি, I/O)।
সাধারণ ফলো-আপ। ছবির স্তরগুলি ক্যাশে করা হয়; docker compose মাল্টি-কন্টেইনার অ্যাপ চালায়; ডেটা ভলিউমের মাধ্যমে টিকে থাকে (একটি ধারক ডিফল্টরূপে ক্ষণস্থায়ী হয়); এবং ওসিআই ইমেজ ফরম্যাট (ইমেজ-স্পেক), রানটাইম (রানটাইম-স্পেক) এবং রেজিস্ট্রি ডিস্ট্রিবিউশন প্রোটোকল (ডিস্ট্রিবিউশন-স্পেক) মানক করে — এই তিনটি স্পেসিফিকেশন ইকোসিস্টেমকে ইন্টারঅপারেবল রাখে।
