در این مقاله قصد داریم تکنولوژی container را مورد مطالعه قرار دهیم. برای جذاب تر شدن و بیان بهتر این تکنولوژی ابتدا به یک نوع روش مجازی سازی به نام مجازی سازی سطح سیستم عامل یا همان OS Level Virtualization می پردازیم که پایه و اساس بحث ما است.
تا کنون هرجا از مجازی سازی سخنی به میان آمده است، ذهن عموم افراد به سمت موجودیتی به نام hypervisor سوق داده میشود که این موجودیت بر روی سرورهای فیزیکی نصب شده و ماشین های مجازی بر روی آن راهاندازی میشوند و هر ماشین مجازی سیستم عامل و منابع مجزای خود را دارد و استفاده از سخت افزار توسط hypervisor مدیریت می شود. اما در مجازی سازی سطح سیستم عامل دیگر موجودیتی به نام hypervisor وجود نداشته و با تغییراتی که در هسته سیستم عامل به وجود می آید برای هر کاربر یک فضای کاری بر روی خود سیستم عامل به وجود آمده که این فضاها از هم کاملا ایزوله می باشند. در مجازی سازی سطح سیستم عامل با توجه به حذف لایه hypervisor و ایجاد فضاهای ایزوله توسط فراخوانی های سیستمی یا همان system callها سرعت عملیات و اجرای برنامه ها بالاتر می رود و در مصرف منابع و حافظه به دلیل استفاده حداکثری از سیستم عامل صرفه جویی بیشتری می گردد. در شکل زیر نمایی از این دونوع مجازی سازی را می بینیم.
در Container ها و Image ها، محیط های ایزوله، سبک وزن و بسته های قابل اجرایی هستند که تمام نیاز هایی که برای اجرای یک نرم افزار شامل کتاب خانه ها و ... است را دارا می باشند.بهتر است با یک مثال تعریف container را ساده سازی کنیم. فرض کنیم به صورت گروهی قصد مسافرت به شمال را داریم. هر کدام از اعضای گروه می توانند ماشین شخصی خود را جهت مسافرت بیاورند یا می توانند با اتوبوس VIP اقدام به سفر کنند علاوه بر اینکه هر شخص به تعداد مورد نیاز خود صندلی و فضا برای وسایل سفر خود استفاده می کند، هزینه بین تمام اعضا گروه تقسیم شده و هر شخص به اندازه مصرف خود هزینه پرداخت می کند و از ترافیک و هدر رفت منابع جلوگیری می گردد.
در مثال بالا سفر با ماشین های شخصی دقیقا همان استفاده از یک ماشین مجازی است که توسط hypervisor ایجاد شده و تمام منابع مربوط به ازای هر سیستم عامل به آن اختصاص داده شده است و برنامه نویس برای یک برنامه خود مجبور به تهیه یک سیستم عامل با منابع مجازی آن است. اما وقتی از مجازی سازی سطح سیستم عامل استفاده می گردد دقیقا مانند سفر با اتوبوس VIP است که اتوبوس بین همه اعضای گروه به اشتراک گذاشته شده و هر شخص صندلی خود را دارد که از دیگران ایزوله است. در مجازی سازی سطح سیستم عامل نیز هر برنامه نویس فضای ایزوله مورد نیاز خود را از سیستم عامل می گیرد و برنامه خود را در آن فضا می نویسد و بقیه برنامه ها نیز می توانند به صورت ایزوله از هم در فضای ایزوله گرفته شده از سیستم عامل ایجاد شوند. در اینجا سیستم عامل حکم همان اتوبوس را داشته و هر کدام از فضاهای ایزوله ایجاد شده توسط سیستم عامل حکم همان صندلی را دارند. پس containerها درواقع همان فضا های ایزوله ای هستند که توسط سیستم عامل در مجازی سازی سطح سیستم عامل ایجاد می شوند. حال که با یک مثال به صورت خیلی ساده با مفهوم container آشنا شدیم بهتر است تخصصی تر نیز به این موضوع نگاه کنیم. شکل زیر به خوبی مفهوم container ها را نمایش داده است.
در شکل بالا بر روی زیرساخت فیزیکی یا مجازی، یک سیستم عامل مانند ubuntu نصب می شود و توسط یک موتور ساخت و مدیریت container مانند docker مجازی سازی سطح سیستم عامل بر روی هاست صورت می گیرد. همانطور که بیان شد محیط های ایزوله که هرکدام حاوی مجموعهای از باینری ها و کتابخانه ها و همچنین برنامه کاربردی مورد نظر است به نام container بر روی هاست اجرا و مدیریت میشوند. مدیریت منابع، کلاستربندی، لودبالانس و قابلیت های دیگر بر روی containerها توسط لایه پایینی یعنی سیستم عامل (که بر روی این سیستم عامل،موتور مدیریت و ایجاد container قرار دارد) انجام می گیرد. موتورهای مدیریت و ساخت container و docker در مقاله ای جداگانه به طور کامل مورد بررسی قرار می گیرند.
در این مقاله سعی شد تا با یک مثال با مجازی سازی سطح سیستم عامل و در نتیجه با مفهوم container (البته با دیدگاه تکنولوژی docker) به صورتی مقدماتی آشنا شویم و ویژگی های متمایز کننده آن از یک ماشین مجازی را بیان کردیم و در آخر نیز با معماری ابتدایی آن آشنا شدیم. قصد داریم در طی چند مقاله مجزا این تکنولوژی را به طور کامل تشریح کنیم. در مقاله بعد با مبحث موتورهای ساخت و مدیریت container و معماری عملکرد آن ها آشنا می شویم. با ما همراه باشید.