مقدمهای بر کانتینر (Container)
در این مقاله قصد داریم تکنولوژی Container را مورد مطالعه قرار دهیم. برای جذابتر شدن و بیان بهتر این تکنولوژی ابتدا به یک نوع روش مجازی سازی به نام مجازی سازی سطح سیستمعامل یا همان OS Level Virtualization میپردازیم که پایه و اساس بحث ما است.
مجازی سازی سطح سیستمعامل
تاکنون هرجا از مجازی سازی سخنی به میان آمده است، ذهن عموم افراد به سمت موجودیتی به نام هایپروایزر (Hypervisor) سوق داده میشود که این موجودیت بر روی سرورهای فیزیکی نصب شده و سرو ابری روی آن راهاندازی میشوند و هر سرور ابری، سیستمعامل و منابع مجزای خود را دارد و استفاده از سخت افزار توسط هایپروایزر (Hypervisor) مدیریت میشود.
اما در مجازی سازی سطح سیستمعامل دیگر موجودیتی به نام هایپروایزر (Hypervisor) وجود نداشته و با تغییراتی که در هسته سیستمعامل به وجود میآید برای هر کاربر یک فضای کاری بر روی خود سیستمعامل به وجود آمده که این فضاها از هم کاملا ایزوله هستند. در مجازی سازی سطح سیستمعامل با توجه به حذف لایه هایپروایزر (Hypervisor) و ایجاد فضاهای ایزوله توسط فراخوانیهای سیستمی یا همان System Callها سرعت عملیات و اجرای برنامهها بالاتر میرود و در مصرف منابع و حافظه به دلیل استفاده حداکثری از سیستمعامل صرفهجویی بیشتری میگردد. در شکل زیر نمایی از این دو نوع مجازی سازی را میبینیم.
تکنولوژی کانتینر (Container) چیست؟
در کانتینرها (Container) و Imageها، محیطهای ایزوله، سبک وزن و بستههای قابل اجرایی هستند که تمام نیازهایی که برای اجرای یک نرمافزار شامل کتابخانه ها و … است را دارا هستند. بهتر است با یک مثال تعریف کانتینر (Container) را سادهسازی کنیم.
فرض کنید به صورت گروهی قصد مسافرت به شمال را دارید. هر کدام از اعضای گروه میتوانند ماشین شخصی خود را جهت مسافرت بیاورند یا میتوانند با اتوبوس VIP اقدام به سفر کنند، علاوه بر اینکه هر شخص به تعداد مورد نیاز خود صندلی و فضا برای وسایل سفر خود استفاده میکند، هزینه بین تمام اعضا گروه تقسیم شده و هر شخص به اندازه مصرف خود هزینه پرداخت میکند و از ترافیک و هدر رفت منابع جلوگیری میگردد.
ایزولهسازی
در مثال بالا سفر با ماشینهای شخصی دقیقا همان استفاده از یک سرور ابری است که توسط هایپروایزر (Hypervisor) ایجاد شده و تمام منابع مربوط به ازای هر سیستمعامل به آن اختصاص داده شده است و برنامهنویس برای یک برنامه خود مجبور به تهیه یک سیستمعامل با منابع مجازی آن است. اما وقتی از مجازی سازی سطح سیستمعامل استفاده میگردد دقیقا مانند سفر با اتوبوس VIP است که اتوبوس بین همه اعضای گروه به اشتراک گذاشته شده و هر شخص صندلی خود را دارد که از دیگران ایزوله است.
در مجازی سازی سطح سیستمعامل نیز هر برنامهنویس فضای ایزوله مورد نیاز خود را از سیستمعامل میگیرد و برنامه خود را در آن فضا مینویسد و بقیه برنامهها نیز میتوانند به صورت ایزوله از هم، در فضای ایزوله گرفته شده از سیستمعامل ایجاد شوند. در اینجا سیستمعامل حکم همان اتوبوس را داشته و هر کدام از فضاهای ایزوله ایجاد شده توسط سیستمعامل، حکم همان صندلی را دارند. پس Containerها در واقع همان فضاهای ایزولهای هستند که توسط سیستمعامل در مجازی سازی سطح سیستمعامل ایجاد میشوند.
حال که با یک مثال به صورت خیلی ساده با مفهوم کانتینر (Container) آشنا شدیم بهتر است تخصصیتر نیز به این موضوع نگاه کنیم. شکل زیر به خوبی مفهوم Containerها را نمایش داده است.
معماری ابتدایی
در شکل بالا بر روی زیرساخت فیزیکی یا مجازی، یک سیستمعامل مانند Ubuntu نصب میشود و توسط یک موتور ساخت و مدیریت Container مانند Docker مجازی سازی سطح سیستمعامل بر روی هاست صورت میگیرد.
همان طور که بیان شد، محیطهای ایزوله که هر کدام حاوی مجموعهای از باینریها و کتابخانهها و همچنین برنامه کاربردی موردنظر است به نام Container، بر روی هاست اجرا و مدیریت میشوند. مدیریت منابع، کلاستربندی، لودبالانس و قابلیتهای دیگر بر روی Containerها توسط لایه پایینی یعنی سیستمعامل (که بر روی این سیستمعامل موتور مدیریت و ایجاد Container قرار دارد) انجام میگیرد. موتورهای مدیریت و ساخت Container و Docker در مقالهای جداگانه به طور کامل مورد بررسی قرار میگیرند.
در این مقاله سعی شد تا با یک مثال با مجازی سازی سطح سیستمعامل و در نتیجه با مفهوم Container (البته با دیدگاه تکنولوژی Docker) به صورتی مقدماتی آشنا شویم و ویژگیهای متمایز کننده آن از یک سرور ابری را بیان کنیم. در آخر نیز با معماری ابتدایی آن آشنا شدیم. قصد داریم در طی چند مقاله مجزا این تکنولوژی را به طور کامل تشریح کنیم. در مقاله بعد با مبحث موتورهای ساخت و مدیریت Container و معماری عملکرد آنها آشنا میشویم. با ما همراه باشید.