تصمیم گرفتم کمی بیشتر در مورد کانتینر ها یاد بگیرم و بخش هایی که متوجه میشم رو بنویسم.و یک بخشی رو بعنوان پایه انتخاب کنم و از اونجا شروع کنم به جلو اومدن برای یادگیری کانتینر ها. که اینجا برای شروع استفاده از subsystem های کرنل رو انتخاب کردم.
بخوام یک مسیر کلی برای راهی که قراره طی بشه بگم باید بگم که: بررسی فضاهای نام بصورت کلی و بعد توضیح هرکدوم از ns ها و استفاده از یک سری از ابزار های shell مثل nsenter و unshare. بعد از اون بررسی و توضیح cgroups، تفاوت v1 و v2 سپس نوشتن یک runtime ساده به زبان go با استفاده از cgroups و namesspaces. بعد بررسی OCI specs و runc که خود این احتمالا باعث میشه سراغ iptables , seccomp, selinuxو یک سری از فایل سیستم ها و... هم بریم توی این مسیر. اما خب هدف من یادگیری هستش برای همین مشخص نیست که دقیقا همین مسیر طی بشه. ممکنه وسط راه سراغ چیز های دیگه ای هم بریم یا سراغ یک سری از بخش ها نریم.
معمولا کانتینر هارو ب همرا با اسم Docker میشنویم اما خب داکر فقط یک ابزاره (مجموعه ای از ابزار در واقع) برای استفاده از کانتینر ها. خود کانتینر ها چیزی نیستن جز پروسس(ها)یی که محدود و ایزوله شدن با استفاده از برخی از ویژگی های کرنل و البته چیز های دیگه .
قسمت ۱ - بررسی namespaces و کانتینر ها
این پست به مرور زمان بازنویسی/ آپدیت خواهد شد با توجه به مراحلی که طی میشه و خلاصه ای از سایر قسمت ها خواهد بود.