HeadlinesBriefing HeadlinesBriefing.com

Docker অদ্ভুত: নিজের কন্টেইনার রানটাইম তৈরি করা

Hacker News •
×

আমি মজা করার জন্য নিজের একটি কন্টেইনার রানটাইম তৈরি করার সিদ্ধান্ত নিয়েছি, এবং যদিও আমি এখনও প্রাথমিক পর্যায়ে আছি, আমি শিখেছি যে Docker অদ্ভুত। Docker সম্পর্কে আমার শেখা কিছু অদ্ভুত বিষয় এখানে দেওয়া হলো।

কন্টেইনার বাস্তব নয়। VM-এর মতো নয়, কন্টেইনার কেবল বিশেষ সীমাবদ্ধতাসহ প্রক্রিয়া। আপনার কার্নেল এখনও সেই প্রক্রিয়াটি চালাচ্ছে, এবং আপনি এটি /proc-এ খুঁজে পেতে পারেন। কোনো একক Linux কন্টেইনার ফিচার নেই — কন্টেইনার আসলে একটি ট্রেঞ্চকোটের ভেতরে 5টি ভিন্ন Linux কার্নেল ফিচার। Namespaces হোস্ট ও কন্টেইনার কী দেখতে পারে তা লুকিয়ে রাখে, cgroups রিসোর্স ব্যবহার সীমিত করে, এবং নেটওয়ার্কিং জাদু কন্টেইনারের নেটওয়ার্ককে বিচ্ছিন্ন করে।

ইমেজ কেবল ফোল্ডার। Docker সেগুলোকে কোথাও রাখে এবং chroot (বা pivot_root) কল করে সেই ফোল্ডারকে কন্টেইনারের নতুন রুট ডিরেক্টরি বানায়। Go একটি কন্টেইনার রানটাইমের জন্য কিছুটা খারাপ ভাষা। Docker-এর রানটাইম, runc, Go-তে লেখা, এবং Go-এর ডিজাইন পছন্দগুলো একে কম উপযুক্ত করে তোলে। Go-এর রানটাইম স্বাভাবিকভাবেই মাল্টি-থ্রেডেড, কিন্তু অনেক Linux syscall-এর একক-থ্রেড পরিবেশ দরকার, তাই runc-এ একটি C মডিউল আছে যা Go শুরু হওয়ার আগে চলে। Go-তে fork-ও নেই, তাই runc fork-এর আনুমানিক রূপ হিসেবে /proc/self/exe-কে exec করে।

Docker-এর জন্য root দরকার। Linux কার্নেলের অনেক API-এর root প্রয়োজন, তাই Docker ডেমন সাধারণত root হিসেবে চলে। রুটলেস রানটাইমকে পুরো নেটওয়ার্কিং স্ট্যাক ইউজারস্পেসে নতুন করে বাস্তবায়ন করতে হতে পারে। শেখা মজার! আপনি যে টুল ব্যবহার করেন তার নিজের সংস্করণ লেখা সেটি সম্পর্কে জানার একটি দারুণ উপায়।

উৎস: Hacker News · সারাংশ: HeadlinesBriefing