container vs. virtual machine

در مقاله ای که دوست و همکار عزیزم خانم حانیه مهدی آبادی با عنوان "چرا داکر؟" در انتشارات کاوان به اشتراک گذاشته اند, معرفی مختصری از داکر ارایه شده است, در این مقاله به دو مفهوم container و virtual machine اشاره شد که قصد داریم در اینجا این دو مفهوم را از هم تمییز دهیم و متوجه تفاوت های آنها بشویم.ماشین مجازی یا همان Virtual Machine تفاوت زیادی با یک کامپیوتر فیزیکی مانند لپ تاپ, گوشی هوشمند یا حتی سرور ندارد. همانند کامپیوتر های دیگر حاوی cpu, مموری و دیسک برای ذخیره است و حتی در صورت لزوم میتواند به اینترنت هم متصل بشود. تنها تفاوت این است که کامپیوترهای ما فیزیکی و محسوس هستند در حالیکه ماشینهای مجازی, مجازی هستند :))مجازی سازی فرایند ساخت یک ورژن مجازی از محیط کامپیوتری که داریم می باشد که cpu, مموری, و حافظه را از کامپیوتر یا سرور میزبان قرض میگیرد. به عبارتی ماشین مجازی یک فایل است که به آن image گفته میشود و مانند کامپیوتری مستقل عمل میکند. این کامپیوتر مجازی مستقل, میتواند به عنوان یک محیط محاسباتی جداگانه وجود داشته باشد که روی آن سیستم عامل های مختلف اجرا میشوند. ماشین مجازی جدا از بقیه بخش های سیستم عمل میکند; به این معنی که نرم افزاری که داخل یک ماشین مجازی در حال اجراست ارتباطی با ماشین های مجازی دیگر یا حتی کامپیوتر یا سرور میزبان ندارد.ماشین مجازی کاربردهای زیادی دارد و ممکن است بر حسب نیازهای مختلفی مورد استفاده قرار بگیرد; از جمله آن میتوان به استفاده از سیستم عامل های دیگر به عنوان میزبان, تست اپلیکیشن ها و نرم افزارها در محیطی امن و ایزوله, بک-آپ گرفتن از سیستم عامل فعلی, دسترسی به دیتاهایی که ویروسی شده اند یا استفاده از اپلیکیشن ها و نرم افزارهای قدیمی تر با نصب ورژن قدیمی سیستم عاملی دیگر و… اشاره کرد .از بزگترین مزایایی که ماشین مجازی دارند استقلال آنها از بقیه ماشین های مجازی و سیستم میزبان است. نرم افزاری به نام hypervisor یا virtual machine manager اجازه میدهد در آن واحد چند سیستم عامل روی یک سیستم اجرا شوند و تداخلی با هم نداشته باشند که این منجر به استفاده بهینه از فضای فیزیکی و زمان میشود. این استقلال به آنها قابلیت قابل حمل بودن را نیز اضافه میکند.در این بین مفهوم دیگری با عنوان container مطرح است که گاها با ماشین مجازی اشتباه گرفته میشود.همانند ماشین های مجازی, container ها نیز اپلیکیشن ها و نرم افزارهای مختلف را به صورت ایزوله و محافظت شده از بقیه ی منابع اجرا میکنند با این تفاوت که ماشین مجازی بخشی از سخت افزار را برای راه اندازی محیطی کاملا جداگانه در اختیار میگیرد ولی کانتینر فقط همان نرم افزار خاص و وابستگی هایش را از بقیه ی سیستم جدا میکند و همچنین کانتینرهای مختلف سیستم عامل میزبان را باهم به صورت اشتراکی استفاده میکنند درحالیکه ماشین های مجازی هر کدام مجاز بودند سیستم عاملی مجزا داشته باشند.مزیت کلیدی کانتینر ها نسبت به ماشین های مجازی این است که سربار خیلی کمتری به نسبت ماشین های مجازی دارند از این جهت که فقط حاوی فایل های باینری و کتابخانه ها و وابستگی های مخصوص به همان نرم افزاری که اجرایش میکنند هستند, کرنل یک سیستم عامل میزبان را به صورت اشتراکی استفاده میکنند که این مزیت, آنها را نسبت به ماشین های مجازی کوچکتر میکند و درنتیجه ی آن سریع تر بوت میشوند, استفاده ی بهینه ای از منابع دارند و همچنین قابلیت انتقال نرم افزار ها و اپلیکیشن ها را بیشتر میکنند.برعکس آن ماشین های مجازی بزرگتر هستند و نسبت به کانینرها کندتر بوت میشوند, آنها کاملا از یکدیگر جدا هستند و هرکدام کرنل سیستم عامل مخصوص خود را دارند. ماشین های مجازی برای اجرای چند اپلیکیشن با یکدیگر, ایجاد محیطی ایزوله بین اپلیکیشن های مختلف و اجرای برنامه های قدیمی که روی سیستم عامل های با ورژن قدیمی تر اجرا میشوند بهترین انتخاب هستند.container vs. virtual machineداکر مفهوم کانتینر را ارایه میدهد و همانطور که گفته شد استفاده از ماشین مجازی برای اجرای یک برنامه سربار بسیار زیادی دارد و اصلا مقرون به صرفه نیست, با این حال داکر در سیستم عامل های macOS و windows به صورت یک ماشین مجازی کوچک ارایه میشود, البته اگر دقیق تر به آن نگاه کنیم, ما یک ماشین مجازی کوچک ایجاد میکنیم که توسط آن تمام کانتینر ها را اجرا میکنیم و هرچه تعداد کانتینر ها زیاد میشوند سربار استفاده از ماشین مجازی نیز کمتر میشود.