در چند سال اخیر دو عنوان مهم در مجازی سازی مورد توجه بسیاری قرار گرفته اند که یکی از آنها ماشین مجازی یا Virtual Machine میباشد که به طور اختصار VM نیز گفته میشود و دیگری فناوری کانتینرینگ یا Containerization هست. در واقعیت، این دو تکنولوژی تکمیل کنندهی یکدیگر و یا به عبارتی مکمل هم هستند.
VM (به عنوان مجازی سازی سخت افزار) و کانتینرینگ خصوصیات و ویژگی های متمایز کننده خود را دارند و میتوان از طریق ادغام آن ها با یکدیگر از مزایای هر دو بهره مند شد. اما در وهلهی اول هر یک را مورد بررسی و مقایسه قرار خواهیم داد تا دریابیم عملکردشان چگونه است و به چه صورت میتوان بهره وری و اثربخشی را از طریق این دو تکنولوژی جدید به بیشترین حد ممکن رساند.
مقایسه ماشین مجازی و کانتینر
به عبارت ساده، کانتینرها ارائه دهنده فرآیند جداسازی در سطح سیستم عامل یا OS-level هستند در حالی که ماشین های مجازی این فرآیند جداسازی را در لایه abstraction یا لایه انتزاعی سخت افزار ارائه میدهند (مانند مجازی سازی سخت افزار). بنابراین در موارد استفاده از IaaS ماشین های مجازی سازی بهترین گزینه هستند اما برای پکیج بودن و قابل حمل بودن نرم افزارهای ماژولار فناوری کانتینرها مناسب خواهد بود. همانطور که گفته شد این دو تکنولوژی در عرصه مجازی سازی می توانند در کنار یکدیگر برای کاربردهای مختلف و یا یکسان بکار گرفته شوند. برای نمونه، کانتینرهای داکر (Docker)را میتوان در داخل VM ایجاد کرد تا یک راهکار مطلوب جهت طراحی ultra-portable بودن نرم افزارها ایجاد شود.
VMware
شرکت VMware که در زمینه ارائه نرم افزارهای مجازی سازی پیشرو این صنعت میباشد به خوبی برای همگان شناخته شده است و محصولات و راهکارهای این شرکت راه را برای نسل جدیدی از فناوری های مجازی سازی هموار کرده اند.vSphere محصول این شرکت، مجموعهای از قابلیت های مجازی سازی است که متشکل از چندین ابزار و سرویس هایی مانند ESXi، vCenter Server، vSphere Client، VMFS، SDKها و موارد دیگر است. این مجموعه به عنوان یک سیستم عامل مجازی سازی محاسباتی ابری و یک سیستم عامل مجازی برای سیستم عامل های guest مانندWindows ، *nix و غیره ارائه میشود.
در داخل مجموعه vSphere، ESXi وجود دارد که از آن به عنوان اصلی ترین تکنولوژی hypervisor نام میبریم و عاملی مهمی در مجازی سازی سخت افزاری میباشد. Hypervisor این امکان را میدهد تا چندین سیستم عامل بر اساس توان منابع سیستمی مانند CPU، مموری، هارد و ... بر روی host نصب شوند. از طرفی ESXi مستقیما بر روی سخت افزار سرور bare-metal اجرا میشود-از این رو هیچگونه نیازی به وجود سیستم عاملی از قبل جهت انجام پروسه ضروری نخواهد بود. زمانی که ESXi نصب میشود microkernel خود را ایجاد میکند که این میکروکرنل 3 نوع اینترفیس را شامل میشود:
• سخت افزار
• سیستم guest
• کنسول سیستم عامل یا سرویس کنسول
اگر چه VMware یکی از اولین ارائه دهنده های ابزار مجازی سازی و hypervisor بود اما شرکت های دیگری نیز محصولاتی مانند Microsoft Hyper-V, Citrix XenServer و Oracle VirtualBox را ارائه کرده اند که از معروف ترین نوع این تکنولوژی هستند.
Docker
پروژه داکر این امکان را در اختیار توسعه دهندگان قرار میدهد تا اپلیکیشن ها را از طریق کانتینرها ایجاد، اجرا و گسترش دهند. اساسا برای DevOps و مبتکران CI/CD، Portable بودن اپلیکیشن ها یکی از ویژگی های پایه و مهمی است که میتوان از طریق داکر آن را فراهم نمود. داکر از طریق Linux Kernel میتواند از قابلیت namespacing بهره مند شود و گروه ها را کنترل کند تا از طریق گسترش و توسعه اپلیکیشن به طور خودکار و streamline، کانتینر را در لایه بالای سیستم عامل host ایجاد کند.
در نسخه 0.9، داکر LXC را با libcontainer خود، که در Go نوشته شده بود، جایگزین کرد و این امکان را برای پشتیبانی اختصاصی گسترده تر جهت استفاده ارائه دهنده های مختلف از آن فراهم آورد. اکنون در نسخه 19، داکر پشتیبانی اختصاصی از Windows را ارائه می دهد و مدیریت host ها و کانتینر داکر را در دستگاه های توسعه دهنده ویندوز ساده میکند به همین جهت بسیاری از شرکت هایی که تولید نرم افزار انجام میدهند به دنبال استفاده از آخرین و جدیدترین نسخه از آن هستند. شرکت Mirantis جزو اولین شرکت هایی بود که از داکر برای رشد و توسعه محصولات و خدمات کسب و کار خود استفاده کرد.
در ادامه به توضیح قابلیت ها و مزایای داکر برای توسعه دهندگان و اپراتورها خواهیم پرداخت:
• پایداری و استقرار بالا-کانتینرهای داکر این امکان را فراهم میکنند تا برنامه ها با حداقل شرایط و منابع نصب و اجرا شوند تا حداقل فضا را در سیستم اشغال کنند.
• قابلیت حمل یا Portable-چون کانتینرهای داکر به طور مستقل به سیستم متصل میشوند بدون هیچ اشکالی اعم از عدم سازگاری قابل اجرا هستند.
• قابلیت استفاده مجدد یا Reuse-کانتینرها برای استفاده دوباره میتوانند آرشیو، اپدیت و به اشتراک گذاشته شوند. همچنین میتوان از طریق کد برای مدیریت کانفیگ پلت فرم ها استفاده نمود.
داکر در مقابل VMware
اگرچه VMware و داکر را میتوان به عنوان فناوری های مجازی سازی طبقه بندی کرد، اما موارد استفاده برای هر یک میتواند کاملاً متفاوت باشد. به عنوان مثال، VMware سخت افزار مجازی را شبیه سازی میکند و باید کلیه موارد اساسی و مهم سیستم را به حساب آورد - اما imageهای ماشین مجازی بطور قابل توجهی بزرگتر از کانتینرها هستند. قابلیت اجرای بسیاری از سیستم عامل های هوشمند به صورت موازی بر روی یک host با VMware وجود خواهد داشت.
از آنجایی که کانتینر داکر توسط موتور Docker (برخلاف Hypervisor) اجرا می شوند، کاملاً جدا و مستقل نیستند. با این حال برخلافVMware ، داکر سیستم عامل مجازی ایجاد نمیكند - در عوض، تمام اجزای مورد نیاز كه روی دستگاه میزبان كار نمیكنند در داخل کانتینر با برنامه پکیج میشوند. از آنجایی که هسته host در میان کانتینر داکر به اشتراک گذاشته میشود، برنامه ها با استفاده از قابلیت portable فقط آنچه را که برای اجرا نیاز دارند با خود حمل میکنند - نه بیشتر، نه کمتر. این امر باعث میشود برنامه های داکر آسان تر و سبک تر شوند و سریعتر از ماشین های مجازی راه اندازی شوند.
کانتینر داکر به طور کلی سریعتر و کم مصرف تر از ماشین های مجازی هستند، اما مجازی سازی از طریق VMware هنوز هم دارای مزایای متمایز یعنی امنیت است. از آنجایی که ماشین های مجازی باعث انزوا در سطح سخت افزار واقعی می شوند، احتمال دخالت و یا بهره برداری کمتر از کانتینر داکر ممکن خواهد بود. بنابراین برای داشتن قابلیت حمل یا portable بودن نرم افزار، docker بهترین راهکار برای شما میباشد.
تفاوت بین VMware و Docker چیست؟
VMware سخت افزار دستگاه را شبیه سازی میکند در حالی که داکر سیستم عاملی را که برنامه شما در آن اجرا میشود را شبیه سازی میکند. داکر یک فناوری مجازی سازی بسیار سبک تر است چون نیازی به شبیه سازی منابع سخت افزاری سرور نخواهد داشت. تمرکز بیشتر بر انتزاع محیط مورد نیاز برنامه است تا سرور فیزیکی VMware، مانند سخت افزار واقعی ماشین مجازی به شما این امکان را بدهد تا سیستم عامل ها و سایر کارهایی را که به یک سرور کامل نیاز دارند، نصب کنید.
آیا داکر نوعی hype است یا نسخه توسعه یافته VMware؟
موارد استفاده برای داکر با پیشرفت در نحوه معماری و بکارگیری برنامه ها تغییر میکند. شرکت های وب مزایای معماری پیشرفته را کشف کرده اند که شامل مقیاس پذیری و در دسترس بودن حداکثری است. کانتینرهای داکر قابلیت سرعت بالا و قابلیت اطمینان را برای موارد مختلف در اختیار میگذارند. با وجود اکوسیستمی که در محیط کانتینر ایجاد میشود ابزارهایی مانند Kubernetes و Apache Mesos، ویژگی های متمایز کنندهی بسیاری را به سازمان های فناوری اطلاعات ارائه میکنند. ابزار داکر مانند CLI، Docker Compose و Docker Swarm پشتیبانی فوق العادهای را برای استقرار برنامه های تحت ابر یا Cloud ارائه میدهند.
آیا داکر از VMware سریع تر است؟
نصب و راه اندازی یک کانتینر داکر سریعتر از شروع یک کانتینر VMware خواهد بود. از طرفی، یک کانتینر داکر منبع بسیار سبک تری نسبت به VMware است. این کانتینر نسبت به RAM و سایر نیازهای یک ماشین مجازی دارای بار کمی است. با این حال، این بدان معنا نیست که وقتی کانتینر را اجرا می کنید، برنامه های شما لزوما سریعتر از برنامه هایی هستند که بر روی یک ماشین مجازی VMware کار می کنند. سیستم عامل های مجازی مانند VMware ESXi ، Xen و KVM عملکردی با bare-metal دارند و میتوانند در شرایطی بسیار سریع و با بازدهی بالا عمل کنند. محیط خاص برنامه تعیین کننده مشخصات دستگاه مانند سرعت، رم و غیره است.
آیا میتوان داکر را در ماشین مجازی اجرا کرد؟
از آنجایی که VMware و داکر در سطوح مختلف با مجازی سازی سروکار دارند و میتوان گفت که این دو مکمل یکدیگرند، استفاده از این دو تکنولوژی بصورت هم زمان امکان پذیر است و بسیاری از سازمان ها این روند را انجام میدهند. برای مثال میتوانید داکر را در یک سیستم عامل مانند Ubuntu یا Photon VMware که با یک ماشین مجازی مانند VMware ESXi در حال اجراست، اجرا کنید.
ترکیب VMware و داکر
اجرای داکر در ماشین های مجازی VMware نه تنها امکان پذیر است بلکه بسیاری از تیم ها و شرکت های IT برای استفاده از برنامه های خود به آن متکی هستند. در حالی که یک محصولی دسکتاپ مانند VMware Workstation برای استفاده توسعه دهندگان در طول فرآیند توسعه در دسترس خواهد بود و ابزار خوبی برای توسعه باشد اما برای تولید و ایجاد اپلیکیشن مناسب نخواهد بود. در عوض شما میتوانید از دیگر محصولات VMware مانند VMware vSphere و ESXi استفاده کنید که شما را به ماشین های مجازی بسیار کارآمد مجهز میکند. VMware ESXi یک hypervisor bare-metal است که با امنیت و کارایی بالا ساخته شده است. این سیستم مستقیما بر روی سرور شما نصب میشود و بر منابع سرور فیزیکی کنترل مستقیم دارد. ESXi دارای یک footprint سبک است و تقریباً 150 مگابایت را در اختیار شما قرار میدهد که با پشتیبانی از پیکربندی ماشین های مجازی تا رم TB6، 128 CPU و امکان اتصال 120 دستگاه مهیا میشود.
شما از گزینه های بی شماری برای استفاده از سیستم عاملی که در بالای ماشین مجازی VMware جهت اجرای کانتینرها استفاده میشود، بهره مند خواهید بود. رویکرد دیگری که برای استفاده از Photon VMware وجود دارد این است که یک سیستم عامل با محوریت کانتینر، برنامه سبکی میباشد و عملکردی بهینه خواهد داشت. گزینه دیگر اجرای سیستم عامل های دلخواه است که قبلاً از آنها استفاده میکنید مانندUbuntu ، CentOS یا Debian که همگی با محصولات VMware کار میکنند و سازگار هستند. علاوه بر این تنظیمات، ارتباط برقرار کردن با سرویس های در حال اجرا در ماشین های مجازی VMware یا انواع دیگر ماشین های مجازی نیز ساده است. این بدان معنی است که شما می توانید host Docker و سرورهای مجازی VMware را در مرکز داده خود ترکیب کنید. همچنین با برنامه های Docker میتوانید در دستگاه های مجازی تحت ابر یا cloud مانند AWS، Azure یا Google Cloud برنامه خود را ذخیره کنید.
برخی از مشکلات رایج هنگام کار با Docker در ماشین های مجازی VMware عبارتند از:
• انتقال مجازی host از طریق VMotion دسترسی منابع فیزیکی به یک ماشین مجازی را مختل میکند که در نتیجه برای برنامه های Dockerized که در ماشین مجازی کار میکنند مشکل به وجود خواهد آورد.
• پردازنده آماده به اجرا (معیاری از زمان است و وقتی به وجود میآید که ماشین مجازی آماده اجرا است اما CPU فیزیکی اجرا نمیشود) می تواند منجر به مشکلات عملکردی برای برنامه های کاربردی در کانتینر داکر شود.
• در حالی که VMware امکان گرفتن snapshots را از ماشین های مجازی را میدهد، در هنگام گرفتن snapshots، منابع I / O موجود در دستگاه کاهش می یابد که منجر به بروز مشکلات یا قطع شدن Container Docker میشود.
شما باید هنگام کار با Docker و VMware از این مسائل آگاهی کاملی داشته باشید و برای جلوگیری از بروز مشکلات اقداماتی را انجام دهید.
آینده مجازی سازی: آیا داکر جایگزین VMware خواهد شد؟
به نظر میرسد که آینده مجازی سازی استفاده بیشتر از کانتینرها خواهد بود و Docker از این موضوع بیشترین سود را خواهد برد. روند صعودی استفاده از داکر و فناوری های مرتبط با آن به دلایل مختلفی بستگی دارد. یکی از این دلایل آن است که سازمان ها از طریق کانتینرها عملکرد و کارایی بالایی خواهند داشت و به سرعت گسترش خواهند یافت. همچنین containerها به دلیل سرعت و آسانی بالای آن ها جهت تست و یا گسترش کد توسعه دهندگان مناسب خواهند بود.
با Docker میتوانید بر روی bare-metal، ماشین های مجازی، AWS، Azure یا سایر محیط های تولید برنامه خود را مستقر کنید و همیشه به آن دسترسی داشته باشید. کانتینرها نه تنها کارایی بیشتری در ارکستراسیون دارند بلکه بخش قابل توجهی از تکنولوژی کانتینرها منبع باز یا Open Source نیز هستند. این باعث نوآوری بیشتر در سطوح مختلف جامعه میشود و در نتیجه با کاهش هزینه ها، راه حل های بهتری نیز برای همه در دسترس خواهد بود. این روند موجب افزایش استقرار نرم افزارهای کم حجم و سبک میشود و دلیلی بر بکارگیری بیشتر سازمان ها از این کانتینرها در آینده خواهد بود.
این روندها همگی آینده ای را نشان میدهند که در آن فناوری های نوینی مانند داکر و ماشین ها مجازی نقش بیشتری را ایفا خواهند کرد. کانتینرها نسبت به ماشینهای مجازی به isolation کمتری میرسند و از امنیت کمتری خواهند داشت که به همین دلیل برای موارد امنیتی ماشین های مجازی فناوری برتری نسبت به Docker Container خواهند بود. علاوه بر این، نگهداری مداوم با کانتینرها سخت تر از ماشین های مجازی VMware است. این ها مشکلاتی است که کانتینرها با آن دست و پنجه نرم میکنند اما ممکن است در آینده به طریقی بهبود یابند. اگر چنین باشد، نیاز به ماشین های مجازی ممکن است حتی بیشتر از این هم کاهش یابد.
VMware به خودی خود میتواند از راه انتقال به ابر، توسط شرکت هایی که برنامه ها و اطلاعات خود را به ابر منتقل میکنند، سود ببرد. در چنین مواردی، بسیاری از این سازمان ها برای اتخاذ مقیاس کامل container آماده نیستند اما میتوانند از محصولات ابری VMware مانند VMware Cloud یا VMware Hybrid Cloud Platform بهره مند شوند و این کار را به سرعت انجام دهند.
انتخاب بین داکر و VMware
همانطور که گفته شد، داکر و VMware مکمل های یکدیگرند و این به این معناست که به جای اینکه سوال "انتخاب بین داکر و VMware چگونه است؟" را مطرح کنیم میتوانیم بپرسیم که "چگونه از VMware و داکر در کنار یکدیگر استفاده کنیم؟" با این وجود، اگر موقعیت شما به گونهای است که فقط یکی از این دو تکنولوژی را میتوانید استفاده کنید این مقاله راهنمای خوبی برای شما خواهد بود. اگر شما قصد دارید تا یک برنامه یکپارچه را از host و از طریق کانتینرها انتقال دهید اما سرمایه گذاری برای توسعه آن غیر قابل قبول خواهد بود ماشین های مجازی VMware بهترین گزینه برای شما خواهند بود تا از هر دو آن ها در کنار یکدیگر استفاده نمایید. علاوه بر این، اگر تمایل دارید تا برنامه شما فضای کاربری خاص خود را داشته باشد و با isolation در سطح OS از isolation مداوم برخوردار باشد، VMware در این مورد نیز مناسب تر خواهد بود چون VMware با فناوری هایی مانند Intel VT یا AMD-V کار میکند. و در پایان، اگر فناوری اطلاعات شما نیاز به اجرا و مدیریت چندین سیستم عامل و دسترسی به عملکرد و منابع کامل سیستم عامل داشته باشد، باز هم ماشین های مجازی راه حل ایده آلی برای کسب و کار شما خواهند بود.
از طرفی، برای موقعیت ها و شرایطی که تمرکز روی برنامه است یا سیستم عاملی خاص برای برنامه شما مد نظر نیست، Docker Container ایده آل خواهند بود. اگر شما در حال اجرای معماری توزیع شده با هر برنامه کاربردی به عنوان میکرو سرویس و Docker برای استقرار این نوع برنامه های ایده آل هستید. هر برنامه در کانتینر جداگانهی مخصوص خود اجرا می شود، و سیستم عامل هایی مانند Kubernetes به شما در مدیریت بخش های container که ممکن است روی سرورهای بیشماری در ابر مدیریت شوند، کمک میکنند.
صرف نظر از این که از چه ابزاری استفاده میکنید، Docker و VMware میتوانند استفاده و کارآیی سرور و هزینه استقرار کلی را به کلی کاهش دهند.