زمانی که صحبت از مجازی سازی میشود دو راهکار اصلی به ذهن میآید: داکر (Docker) و ماشین مجازی (VM). داکر و فناوری کانتینر طی سالهای اخیر به محبوبیت گستردهای در حوزه توسعه و عرضه اپلیکیشن و مایکروسرویس دست پیدا کرده اما این محبوبیت بهمعنای پایان کار ماشین مجازی نیست. داکر و ماشین مجازی هرکدام کاربردهای متفاوتی دارند و نهتنها رقیب یکدیگر نیستند، بلکه مکمل هم محسوب میشوند. در این مطلب میخواهیم این دو راهکار مجازی سازی را دقیقتر بررسی کرده و تفاوت داکر و ماشین مجازی را بهتر درک کنیم.
مجازی سازی چیست؟
قبل از اینکه به تفاوت داکر و ماشین مجازی (VM یا Virtual Machine) بپردازیم، بهتر است اندکی در مورد مجازی سازی صحبت کنیم. مجازی سازی (Virtualization) در دنیای کامپیوتر بهمعنای ایجاد یک نسخه مجازی از چیزی در همان سطح از انتزاع است. بهعنوان مثال میتوان مجازی سازی را برای پلتفرم سختافزاری، سیستمعامل، ابزارهای ذخیرهسازی یا منابع شبکه انجام داد. هدف اصلی مجازی سازی، استفاده بهینهتر از منابع مختلف سختافزاری یا نرمافزاری است. مجازی سازی در سطوح مختلف انجام میشود اما در این مطلب با دو مورد اصلی سروکار داریم:
- مجازی سازی سختافزار (Hardware Virtualization)
- مجازی سازی سطح سیستم عامل (OS-Level Virtualization)
مجازی سازی یکی از فناوریهای بنیادین دنیای تکنولوژی و بهخصوص کلاد بهشمار میرود. داکر ابزاری برای مجازیسازی در سطح سیستمعامل است و VM نوعی مجازیسازی سختافزار محسوب میشود. حال این سؤال پیش میآید که چرا به مجازیسازی نیاز داریم؟ پاسخ به این سؤال به چالشهای فرایند توسعه و استقرار اپلیکیشن برمیگردد.
چرا به مجازیسازی نیاز داریم؟
فرایند توسعه و استقرار اپلیکیشن به تعداد زیادی نرمافزار و بسته نرمافزاری ثالث نیاز دارد و هر عضو تیم توسعه باید محیط توسعه خودش را بر اساس این نرمافزارها و دیگر نیازهای تیم، پیکربندی کند. فرایند پیکربندی محیط توسعه بسیار زمانبر است. روند نصب این نرمافزارها و پکیجها بر اساس نوع سیستمعامل و ویژگیهای سیستم، متفاوت خواهد بود. حتی در فرایند استقرار اپلیکیشن، باید همین محیط را روی سرور نیز پیکربندی کنید. گاهی اوقات اپلیکیشنهای مختلف به نسخههای متفاوتی از یک نرمافزار نیاز دارند. در چنین مواردی، مدیریت وابستگیها برای این اپلیکیشنها به عملیاتی پیچیده تبدیل میشود.
برای رفع این چالشها در فرایند توسعه و استقرار، باید بتوان اپلیکیشنها را در محیطهای جدا و مستقل اجرا کرد که ساختن آنها کار ساده و سریعی باشد و به پیکربندی سیستم نیز وابستگی نداشته باشند. کانتینرهای داکر و ماشین مجازی، هردو در این زمینه به کار میآیند.
داکر چیست؟
داکر (Docker) پلتفرمی برای توسعه نرمافزارهای توزیعشده و پیادهسازی فناوری مجازی سازی است که قابلیتهایی را برای توسعه، استقرار و مدیریت اپلیکیشنها با استفاده از کانتینرها فراهم میکند. کانتینر (Container) یک بسته کمحجم، مستقل و قابل اجرا از یک اپلیکیشن یا بخشی از آن محسوب میشود که تمامی کتابخانهها، فایلهای پیکربندی، وابستگیها و دیگر موارد مورد نیاز برای اجرا را در خود دارد. اگر میخواهید با کانتینر بیشتر آشنا شوید پیشنهاد میکنیم مطلب «کانتینر چیست» را مطالعه کنید.
همانطور که گفتیم داکر و کانتینر را میتوان شکلی از مجازیسازی در سطح سیستمعامل در نظر گرفت. یک کانتینر میتواند برای اجرای هر چیزی، از یک مایکروسرویس یا پروسه نرمافزاری گرفته تا یک اپلیکیشن کامل و بزرگ، بهکار گرفته شود. هنگام ساخت یک کانتینر میتوان قالبی برای محیط اجرای آن طراحی کرد و منابع و وابستگیهای مورد نیاز را در اختیار آن قرار داد. کانتینر، یک اسنپشات از سیستم را در زمان مشخص اجرا میکند و معمولا رفتاری یکسان و قابل پیشبینی را روی محیطها و سیستمهای مختلف از خود نشان میدهد. کانتینر همچنین کرنل سیستمعامل میزبان را بهصورت اشتراکی برای اجرا در اختیار میگیرد.
مزایای کانتینر چیست؟
- کانتینرها حجم بسیار کمتری نسبت به VM دارند و حجم آنها بر حسب مگابایت سنجیده میشود.
- استقرار، اجرا و مدیریت کانتینرها به منابع IT کمتری نیاز دارد.
- کانتینرها در کمتر از یک ثانیه راهاندازی و اجرا میشوند.
- یک سیستم فیزیکی میتواند تعداد زیادی کانتینر را بهطور همزمان اجرا کند.
چالشهای کانتینر چیست؟
- تمامی کانتینرها باید روی یک سیستمعامل اجرا شوند.
- کانتینرها امنیت کمتری دارند چون کرنل سیستمعامل را به اشتراک میگذارند.
- کانتینرها فناوری جدیدی محسوب میشوند و اکوسیستم پیرامون آنها هنوز جای رشد زیادی دارد.
ماشین مجازی چیست؟
سالها قبل و با افزایش توان سختافزاری کامپیوترها و سرورها، اپلیکیشنها نمیتوانستند بهتنهایی از این منابع انبوه استفاده کنند. ابداع VM توانست این چالش را در زمینه استفاده بهینه از منابع سختافزاری حل کند. VM برنامهای نرمافزاری است که یک سختافزار فیزیکی یا یک سیستم کامپیوتری را شبیهسازی میکند. به زبان سادهتر با استفاده از VM میتوان چندین کامپیوتر مجازی را روی یک کامپیوتر فیزیکی در اختیار داشت.
VM با استفاده از لایه نرمافزاری کمحجمی به اسم هایپروایزر (Hypervisor) با کامپیوتر فیزیکی ارتباط برقرار میکند. هایپروایزر در کنار برقراری ارتباط، ماشینهای مجازی را از یکدیگر ایزوله کرده و منابع موجود اعم از قدرت پردازش، حافظه اصلی و فضای ذخیرهسازی را بین آنها توزیع میکند. VM میتواند کتابخانهها و باینریهای مورد نیاز برای اجرای اپها را نیز در خود داشته باشد. سیستمعامل میزبان با استفاده از هایپروایزر اجرا و مدیریت میشود. معماری VM را میتوان به چهار بخش اصلی تقسیم کرد:
- سیستم زیرساخت شامل کامپیوترهای فیزیکی و سیستمعامل. البته هایپروایزرهای سطح یک (Bare Metal) مستقیما روی سختافزار نصب میشوند و نیازی به سیستمعامل ندارند.
- هایپروایزر که نقش واسط را بین سختافزار و زیرساخت ایفا میکند.
- چندین VM که به کمک هایپروایزر از منابع سیستم زیرساخت استفاده میکنند.
- اپلیکیشنها و فرایندها که روی هر سیستمعامل میهمان اجرا میشوند.
مزایای ماشین مجازی چیست؟
- پیشینه دهها ساله مجازیسازی وVM، دسترسی به مجموعهای غنی از ابزارهای مدیریتی و امنیتی را برای VM ممکن ساخته است.
- VM امکان اجرای چندین اپلیکیشن با چند سیستمعامل مختلف را روی یک سرور یا زیرساخت فیزیکی فراهم میکند.
- VM یک کامپیوتر کامل شامل منابع سختافزاری، سیستمعامل و منابع نرمافزاری را شبیهسازی میکند.
- VM فرایند مهاجرت بین زیرساخت داخلی (on-premise) و پلتفرم ابری را تسهیل میکند.
- اکوسیستم پیرامون ماشین مجازی بسیار متنوع و گسترده است.
چالشهای ماشین مجازی چیست؟
- VM معمولا چند گیگابایت حجم دارد و فرایند پشتیبانگیری یا انتقال آنها زمانبر است.
- VM با بهرهمندی از سیستمعامل داخلی به منابع زیادی نیاز دارد و یک سرور فیزیکی تعداد کمی VM را پشتیبانی میکند.
- راهاندازی و اجرای یک VM به چند دقیقه زمان نیاز دارد.
تفاوت داکر و ماشین مجازی چیست؟
تا اینجای مطلب «تفاوت داکر و ماشین مجازی چیست» با مفهوم مجازیسازی و دو فناوری زیرساختی دنیای کلاد یعنی VM و کانتینر آشنا شدیم. حال میخواهیم تفاوتهای این دو فناوری را در بخشهای مختلف بررسی کنیم.
۱. تفاوت داکر و ماشین مجازی از نظر سطح مجازیسازی
در قسمتهای قبل گفتیم که کانتینرهای داکر و ماشین مجازی هر دو محیطی مجزا و ایزوله را برای اجرای اپلیکیشنها فراهم میکنند. تفاوت اساسی بین این دو راهکار، سطح مجازیسازی و ایزوله کردن فرایندهاست. VM سیستمعامل مخصوص به خودش را دارد و مجازیسازی را در سطح سختافزار انجام میدهد.
در واقع VM، هم هسته سیستمعامل و هم لایه اپلیکیشن را مجازیسازی میکند. در مقابل، کانتینرهای داکر تنها لایه اپلیکیشن را مجازیسازی کرده و با اشتراکگذاری کرنل سیستمعامل، از سیستمعامل میزبان استفاده میکنند.
۲. تفاوت داکر و ماشین مجازی از نظر پشتیبانی از سیستمعامل و معماری
ماشین مجازی از سیستمعامل میهمان (Guest OS) و سیستمعامل میزبان (Host OS) استفاده میکند و این دو سیستمعامل لزوما یکسان نیستند. بنابراین میتوان گفت VM با تمام انواع سیستمعامل سازگار است.
کانتینرهای داکر روی سیستمعامل میزبان سرور فیزیکی اجرا میشوند. اشتراکگذاری سیستمعامل بین کانتینرها یکی از دلایل اصلی حجم کم و سرعت بالای کانتینرهاست. کانتینر برای اجرای چندین اپلیکیشن روی یک کرنل سیستمعامل بهترین گزینه است اما برای اپلیکیشنها یا سرویسهایی که باید روی چند سیستمعامل مختلف اجرا شوند، به VM نیاز خواهید داشت.
۳. تفاوت داکر و ماشین مجازی از نظر اندازه
کانتینر داکر حجم بسیار کمی دارد و حداکثر به چند ده مگابایت محدود میشود. این کانتینر شامل اپلیکیشن، وابستگیها، کتابخانهها و فایلهای پیکربندی است. بنابراین میتوانید تعداد بسیار زیادی کانتینر را بهسادگی روی یک سرور فیزیکی یا ماشین مجازی اجرا کنید. از طرف دیگر VM نیازمند سیستمعامل مخصوص به خود است و به همین دلیل، حجم زیادی هم دارد که در اکثر اوقات به چند گیگابایت میرسد.
۴. تفاوت داکر و ماشین مجازی از نظر عملکرد
VM منابع بسیاری بیشتری را در مقایسه با کانتینر مصرف میکند، چون برای اجرا به سیستمعامل خود نیاز دارد. بنابراین راهاندازی کامل یک نسخه از ماشین مجازی میتواند چند دقیقه طول بکشد. کانتینرهای داکر طی حداکثر چند ثانیه اجرا میشوند و به منابع بسیار کمتری نیاز دارند.
۵. تفاوت داکر و ماشین مجازی از نظر امنیت
یکی از مهمترین موارد در مقایسه داکر و ماشین مجازی، بحث امنیت است و در این زمینه، VM انتخاب بهتری محسوب میشود. ماشین مجازی یک سیستم مستقل و ایزوله است، سیستمعامل و کرنل خودش را دارد و از ویژگیهای امنیتی مورد نیاز بهره میبرد. بنابراین برای کاربردهای خاص و اجرای اپلیکیشنهای حساس، ماشین مجازی گزینه بهتری خواهد بود. کانتینرهای داکر بهطور مشترک از کرنل سیستمعامل میزبان بهره میبرند و هرگونه رخنه امنیتی در یکی از آنها یا نفوذ به سیستمعامل میزبان، میتواند امنیت تمام کانتینرها را به خطر بیندازد.
جدول زیر خلاصهای از موارد تفاوت داکر و ماشین مجازی را نشان میدهد.
ویژگی | ماشین مجازی | کانتینر داکر |
جداسازی | جداسازی کامل از سیستمعامل میزبان و دیگر ماشینهای مجازی که امنیت بسیار بالایی را به همراه دارد، بهخصوص زمانی که میخواهید اپهای چند شرکت یا سازمان رقیب را روی یک سرور یا کلاستر میزبانی کنید. | جداسازی ساده از سیستمعامل میزبان و دیگر کانتینرها که معمولا امنیت کمتری نسبت به VM دارد. |
سیستمعامل | یک سیستمعامل کامل با کرنل را اجرا کرده و به منابع سختافزاری زیادی نیاز دارد. | بخشی از کرنل سیستمعامل را در اختیار گرفته و تنها سرویسهای مورد نیاز اپ را اجرا میکند تا منابع کمتری مصرف کند. |
سازگاری | هر سیستمعامل را میتوان داخل یک VM اجرا کرد. | روی همان نسخه از سیستمعامل میزبان اجرا میشود. |
استقرار | استقرار VM با استفاده از ویندوز ادمین سنتر یا هایپر-وی منیجر ممکن است. استقرار چند ماشین مجازی با پاورشل یا دیگر ابزارهای کمکی ویندوز انجام میشود. | استقرار یک کانتینر با استفاده از خط فرمان داکر انجام میشود. استقرار چند کانتینر با ابزارهای ارکستریشن مانند کوبرنتیز به سادهترین شکل امکانپذیر است. |
ارتقاء یا آپدیت سیستمعامل | دانلود و نصب سیستمعامل روی هر VM ضروری است. نصب سیستمعامل جدید به ارتقاء کامل و حتی ساختن یک VM جدید نیاز دارد و عملی زمانبر است، بهخصوص اگر تعداد زیادی VM داشته باشید. | آپدیت فایلهای سیستمعامل داخل کانتینر در چند مرحله انجام میشود. ابتدا باید فایل بیلد ایمیج کانتینر را به آخرین نسخه از سیستمعامل تغییر دهید، سپس ایمیج کانتینر جدید را بسازید و نسخه نهایی را با استفاده از ابزارهای ارکستریشن اجرا نمایید. |
لود بالانسینگ | VM در حال اجرا برای لود بالانسینگ به سرور دیگری منتقل میشود. | کانتینرها برای لود بالانسینگ، جابجا نمیشوند. بهجای این کار، ابزار ارکستریشن میتواند کانتینرهای در حال اجرا روی یک سرور را متوقف کرده و نسخههای دیگری از آنها را روی سرور دیگری به اجرا درآورد. |
تفاوت داکر و ماشین مجازی؛ کدامیک انتخاب بهتری است؟
داکر (Docker) و ماشین مجازی (VM) دو فناوری اساسی در حوزه مجازیسازی هستند اما کاربردهای متفاوتی دارند. در واقع دو فناوری کانتینر و ماشین مجازی را میتوان مکمل یکدیگر دانست و هر دو برای افزایش بهینگی زیرساخت IT، قابلیت انتقال اپلیکیشنها و بهبود فرایندهای دواپس (DevOps) بهکار میروند. درک تفاوت بین این دو فناوری میتواند راه را برای توسعه راهکارهای چابک در حوزه ابری باز کند. به زبان ساده، کاربرد این دو فناوری را میتوان به شکل زیر بیان کرد:
- VM برای رفع چالشهای زیرساختی بهکار میرود و به سازمانها اجازه میدهد تا استفاده بهینهتری از زیرساخت فیزیکی خود داشته باشند.
- کانتینر برای رفع چالشهای حوزه اپلیکیشن بهکار میرود و برای این کار از بهبود فرایندهای دواپس، امکان توسعه مایکروسرویسها، افزایش قابلیت انتقال و بهبود استفاده از منابع بهره میگیرد.
با پیشرفت در حوزه یادگیری ماشین و هوش مصنوعی (ML/AI)، ماشین مجازی همچنان یکی از بهترین گزینهها برای استقرار این اپهای سنگین و پرمصرف محسوب میشود. همچنین معماریهای نوین شبکه مانند شبکه 5G نیز به توان محاسباتی بالایی نیاز دارند و در چنین شرایطی نیز VM انتخاب نخست بسیاری از سازمانها خواهد بود.
کانتینرها بیشتر در حوزه اپلیکیشنها و وبسرویسهای مدرن میدرخشند که به مقیاسپذیری سریع و گسترده، اجرای آنی و مصرف پایین منابع نیاز دارند. داکر و فناوری کانتینر را میتوان پلتفرم اصلی برای توسعه در نظر گرفت، چون توسعهدهندگان نگرانی خاصی در مورد تفاوت بین زیرساخت توسعه و زیرساخت استقرار اپلیکیشن نخواهند داشت.
در هر صورت، داکر و ماشین مجازی همچنان به ایفای نقش ارزشمند خود در دنیای تکنولوژی ادامه میدهند. حتی در موارد خاص و بهخصوص در فضای کلاد، کانتینرها روی VM اجرا میشوند. بنابراین استفاده از داکر یا ماشین مجازی کاملا به نیازهای شما بستگی دارد و نمیتوان یکی را جایگزین دیگری کرد.
در این مقاله به تفاوت داکر و ماشین مجازی پرداختیم. در صورتی که مایل به راهاندازی داکر هستید میتوانید «آموزش نصب داکر روی اوبوتو» را مطالعه نمایید. همچنین با خرید سرور ابری زَس میتوانید ماشین مجازی دلخواه یا داکر را روی سرور خود نصب و راهاندازی نمایید.