درک کانتینرهای داکر: استفاده از فضاهای نام و cgroup های کرنل لینوکس

کانتینرهای داکر روش توسعه، استقرار و مدیریت برنامههای کاربردی را متحول کردهاند. در هسته عملکرد داکر دو ویژگی کلیدی هسته لینوکس وجود دارد: فضاهای نام و cgroups (گروه های کنترل). این ویژگیها Docker را قادر میسازد تا فرآیندها را ایزوله کند و منابع را به طور مؤثر مدیریت کند، و اطمینان حاصل شود که کانتینرها به طور کارآمد و ایمن اجرا میشوند. در این وبلاگ، به جزئیات چگونگی استفاده Docker از این ویژگیها برای ارائه یک پلت فرم کانتینریسازی قوی خواهیم پرداخت.
فضاهای نام چیست؟
فضاهای نام یک جنبه اساسی از هسته لینوکس هستند که برای فرآیندها ایزوله می کنند. آنها به یک سیستم لینوکس اجازه می دهند چندین نمونه جدا شده از منابع سیستم را اجرا کند. هر فضای نام یک نمونه جداگانه از یک منبع سیستم جهانی را فراهم می کند، به این معنی که فرآیندها در فضای نام های مختلف نمی توانند مستقیماً یکدیگر را ببینند یا با یکدیگر تعامل داشته باشند. Docker از چندین نوع فضای نام برای دستیابی به این ایزوله استفاده می کند:
-
فضای نام PID: شناسههای فرآیند (PID) را جدا میکند تا پردازشهای داخل یک کانتینر شمارهگذاری PID خاص خود را داشته باشند که از 1 شروع میشود. این تضمین میکند که فرآیندهای داخل یک ظرف نمیتوانند فرآیندهای خارج از آن را ببینند یا بر آن تأثیر بگذارند.
-
فضای نام NET: جداسازی پشته شبکه را فراهم می کند. هر کانتینر دارای رابط های شبکه، آدرس های IP، جداول مسیریابی و پورت های خود است. این به کانتینرها اجازه می دهد تا پیکربندی شبکه خود را مستقل از میزبان داشته باشند.
-
فضای نام MNT: نقاط اتصال سیستم فایل را جدا می کند. کانتینرها میتوانند نقاط اتصال و فایلسیستمهای مخصوص به خود را داشته باشند و اطمینان حاصل کنند که تغییرات در سیستم فایل داخل یک کانتینر بر میزبان یا سایر کانتینرها تأثیر نمیگذارد.
-
فضای نام UTS: نام میزبان و نام دامنه را جدا می کند. هر کانتینر میتواند نام میزبان خود را داشته باشد که برای پیکربندیها و برنامههای مرتبط با شبکه مفید است.
-
فضای نام IPC: منابع ارتباط بین فرآیندی (IPC) مانند بخش های حافظه مشترک، صف های پیام و سمافورها را جدا می کند. این تضمین می کند که منابع IPC داخل یک کانتینر از خارج قابل دسترسی نیستند.
-
فضای نام کاربر: شناسه های کاربر و گروه را جدا می کند. این به کانتینرها اجازه میدهد مجموعهای از شناسههای کاربر و گروه متفاوت از میزبان داشته باشند و با فعال کردن کانتینرهای غیر ریشهای برای اجرای فرآیندهایی با امتیازات بالا در داخل کانتینر، امنیت را افزایش میدهد.
cgroup ها چیست؟
گروه های کنترل یا cgroup ها یکی دیگر از ویژگی های مهم هسته لینوکس است که داکر برای مدیریت و محدود کردن منابع مورد استفاده کانتینرها از آن استفاده می کند. Cgroup ها کنترل دقیقی بر تخصیص و استفاده از منابع سیستم مانند CPU، حافظه، ورودی/خروجی دیسک و پهنای باند شبکه ارائه می کنند. در اینجا نحوه استفاده Docker از cgroup ها آمده است:
-
مدیریت CPU: Docker می تواند استفاده از CPU یک کانتینر را با تنظیم محدودیت های cgroup محدود کند. این تضمین می کند که هیچ کانتینری نمی تواند CPU را در انحصار خود درآورد و به توزیع عادلانه منابع CPU بین چندین کانتینر اجازه می دهد.
-
مدیریت حافظه: Cgroup ها به Docker اجازه می دهند محدودیت های استفاده از حافظه را برای کانتینرها تعیین کند. اگر یک کانتینر از حافظه تخصیص داده شده خود فراتر رود، می توان آن را محدود یا خاتمه داد و از تأثیرگذاری بر پایداری سیستم میزبان جلوگیری کرد.
-
مدیریت بلوک ورودی/خروجی: Docker میتواند پهنای باند ورودی/خروجی دیسک را که برای یک کانتینر در دسترس است، کنترل کند. این مانع از کاهش عملکرد کانتینرهای دیگر یا سیستم میزبان می شود.
-
مدیریت پهنای باند شبکه: Cgroup ها همچنین می توانند پهنای باند شبکه در دسترس یک کانتینر را محدود کنند و اطمینان حاصل کنند که منابع شبکه به طور عادلانه بین کانتینرها به اشتراک گذاشته شده است.
چگونه داکر جداسازی و مدیریت منابع را پیادهسازی میکند
هنگامی که یک کانتینر داکر را اجرا می کنید، دایمون داکر مجموعه جدیدی از فضاهای نام و گروه های c را برای کانتینر ایجاد می کند. این تنظیم تضمین می کند که کانتینر در محیط ایزوله خود با استفاده از منابع کنترل شده عمل می کند. در اینجا یک فرآیند گام به گام ساده از آنچه در زیر کاپوت اتفاق می افتد آورده شده است:
-
ایجاد فضای نام: داکر از
unshare
وclone
سیستم برای ایجاد فضای نام جدید برای کانتینر فراخوانی می کند. این شامل تنظیم فضای نام PID، NET، MNT، UTS، IPC و USER جداگانه است. -
راه اندازی cgroups: داکر cgroup ها را برای کانتینر پیکربندی می کند تا محدودیت های منابع را اعمال کند. این شامل ایجاد یک سلسله مراتب جدید cgroup و تخصیص فرآیندهای کانتینر به این cgroup ها است.
-
راه اندازی کانتینر: هنگامی که فضاهای نام و cgroup ها تنظیم شدند، Docker فرآیندهای کانتینر را در محیط جدید شروع می کند. این فرآیندها به گونهای اجرا میشوند که گویی در یک سیستم جداگانه، با منابع مجزای خود و دید محدود به سیستم میزبان هستند.
-
نظارت و مدیریت منابع: Docker به طور مداوم استفاده از منابع کانتینرها را نظارت می کند. اگر یک کانتینر از منابع تخصیص داده شده خود فراتر رود، Docker اقدامات مناسبی را بر اساس پیکربندیهای cgroup انجام میدهد، مانند محدود کردن استفاده از CPU یا پایان دادن به کانتینر.
نتیجه
داکر با استفاده از فضاهای نام هسته لینوکس و cgroup ها، راهی قدرتمند و کارآمد برای جداسازی فرآیندها و مدیریت منابع در محیط های کانتینری ارائه می کند. این جداسازی تضمین میکند که کانتینرها به طور ایمن و مستقل اجرا میشوند، در حالی که قابلیتهای مدیریت منابع مانع از تأثیرگذاری کانتینرها بر عملکرد و پایداری سیستم میزبان میشوند. درک این مکانیسم های اساسی برای بهینه سازی استفاده از Docker در محیط های توسعه و تولید شما بسیار مهم است.
چه یک توسعه دهنده، مدیر سیستم یا مهندس DevOps باشید، درک مفاهیم فضای نام و cgroup ها توانایی شما را برای استفاده موثر از Docker برای ساخت برنامه های کاربردی مقیاس پذیر، قابل اعتماد و ایمن افزایش می دهد.