تفاوت ماشین مجازی و کانتینر | کدام یک برای مجازی سازی سرور خانگی بهتر است؟
تفاوت ماشین مجازی و کانتینر، موضوع این مطلب است و میخواهیم بدانیم که کدام یک از این دو تکنولوژی برای مجازی سازی سرور خانگی، مناسبتر است. بعید است با شبکه و مجازیسازی سروکار داشته باشید و اسم ماشین مجازی (Virtual Machine) و کانتینر (Container) را نشنیده باشید. کسانی که میخواهند از تکنولوژیهای مجازی سازی (Virtualization) در سرور خانگی (سرور خانگی چیست) خود استفاده کنند؛ ممکن است از خود بپرسند که ماشین مجازی بهتر است یا کانتینر. در این مطلب قرار است به این سؤال پاسخ دهیم.
ماشین مجازی چیست؟
قدمت ماشین مجازی یا Virtual Machine که به اختصار از آن با VM هم یاد میکنند، به زمان ظهور فناوری مجازی سازی در اوایل دهه ۲۰۰۰ میلادی برمیگردد. ماشین مجازی را میتوان جایگزین دیجیتال کامپیوترهای فیزیکی در نظر گرفت. روی یک ماشین مجازی میتوان سیستمعامل نصب کرد و منابع مورد نیاز برای اجرای سیستمعامل را هم به آن اختصاص داد. ماشینهای مجازی بر روی بستر یک کامپیوتر فیزیکی ایجاد میشوند و سپس منابع کامپیوتر اصلی میان ماشینهای مجازی ایجاد شده روی آن، تقسیم میشود.
اجرای چند ماشین مجازی بر روی یک کامپیوتر، به شما این امکان را میدهد تا چند نوع سیستمعامل مختلف را بر روی یک کامپیوتر فیزیکی اجرا کرده و از قابلیتهای متنوع آنها استفاده کنید. اما چه چیزی امکان ساخت ماشین مجازی را بر روی یک کامپیوتر واقعی فراهم میکند؟ هایپر وایزر! آشنایی با هایپر وایزر باعث میشود تا تفاوت ماشین مجازی و کانتینر را بهتر متوجه شویم.
هایپر وایزر چیست؟
هایپر وایزر (hypervisor) یک لایه نرمافزاری است که اجازه ساخت و اجرای ماشینهای مجازی بر روی یک کامپیوتر فیزیکی را میدهد. hypervisor، اختصاص منابع کامپیوتر واقعی (مثل پردازنده، رم و حافظه ذخیرهسازی) به ماشینهای مجازی را مدیریت میکند. کامپیوتری که هایپر وایزر بر روی آن ایجاد میشود به عنوان کامپیوتر میزبان و کامپیوترهای مجازی که با استفاده از هایپر وایزر ساخته میشوند به عنوان کامپیوتر مهمان در نظر گرفته میشوند.
مهمترین کاربرد ماشین مجازی را میتوان در اجرای همزمان چند سیستمعامل بر روی یک کامپیوتر فیزیکی مشاهده کرد.
اجرای هم زمان چند سیستم عامل به لطف ماشینهای مجازی
کامپیوتری را در نظر بگیرید که روی آن سیستمعامل ویندوز (Windows) نصب شده است. روی این کامپیوتر، میتوان ماشینهای مجازی مختلفی را ساخت و بر روی هر یک از آنها سیستمعاملهایی مثل لینوکس (Linux)، مک او اس (MacOS) و حتی نسخههای مختلف دیگر ویندوز را نصب کرد. هر کدام از این سیستمعاملها به سختافزار خاصی برای اجرا شدن نیاز دارند. ماشین مجازی به ما کمک میکند تا از شر محدودیتهای سختافزاری اجرای یک سیستمعامل خلاص شویم و بتوانیم حتی روی یک کامپیوتر معمولی، از قابلیتهای سیستمعاملهای مختلف استفاده کنیم.
اما یک ماشین مجازی شامل چه مؤلفههایی است؟ آشنایی با مؤلفههای اصلی ماشین مجازی برای درک تفاوت ماشین مجازی و Container بسیار مهم است.
مولفههای اصلی ماشین مجازی
ماشین مجازی، عملکرد یک کامپیوتر فیزیکی را شبیهسازی میکند. به همین علت، ماشینهای مجازی هم شامل مؤلفههایی مثل پردازنده، رم، فضای ذخیرهسازی، کارت شبکه، ورودی و خروجی و… هستند (که البته همگی این منابع و مؤلفهها توسط کامپیوتر اصلی در اختیار ماشین مجازی قرار داده شده است). سیستمعامل نصب شده روی ماشین مجازی، به طور مستقیم با این مؤلفههای مجازی ارتباط برقرار میکند.
یکی دیگر از ویژگیهای ماشین مجازی را میتوان در قابلیت مدیریت بهینه منابع کامپیوتر فیزیکی، عنوان کرد.
مدیریت بهینه
شما میتوانید ماشینهای مجازی را طوری مدیریت کنید که بیشترین بهرهوری را برای اهدافتان داشته باشند. پس از ساخت یک ماشین مجازی امکان ویرایش یا حذف آن هم وجود خواهد داشت. بنابراین میتوانید برنامههای در حال توسعه خود را روی محیطهای مختلف و تحت شرایط مختلف، تست کنید.
همچنین امکان ذخیره ماشین مجازی در یک حالت خاص وجود دارد تا بتوانید هنگام بروز مشکل در اجرای برنامههای مختلف، ماشین مجازی را در همان حالت متوقف کرده و عملیات عیبیابی را انجام دهید.
یکی از ویژگیهای جذاب ماشینهای مجازی، امکان مدیریت جداگانه آنها است. آشنایی با نحوه ایزولهسازی ماشینهای مجازی، به درک بهتر تفاوت ماشین مجازی و کانتینر کمک میکند.
ایجاد یک محیط ایزوله توسط هایپر وایزر و مدیریت جداگانه ماشین های مجازی
همانطور که گفتیم، ساخت یک ماشین مجازی به کمک هایپر وایزر انجام میشود. هایپر وایزر، یک محیط ایزوله مجازی را بر روی سختافزار کامپیوتر فیزیکی ایجاد میکند تا بتوان بر روی آن، سیستمعاملهای مختلف را نصب کرد. سیستمعامل نصب شده بر روی هر ماشین مجازی، امکان مدیریت جداگانه آن را در محیط ایزوله مجازی، فراهم میکند. در واقع مدیریت هر ماشین مجازی، به صورت جداگانه از مدیریت کامپیوتر اصلی و سایر ماشینهای مجازی انجام میشود.
اما مدیریت ماشینهای مجازی چگونه انجام میشود؟
نحوه مدیریت ماشینهای مجازی
پیشرفت تکنولوژی باعث شده تا کامپیوترهایی با سختافزار بسیار قوی ساخته شوند. یک سرور قدرتمند امروزی توان ساخت، اجرا و مدیریت همزمان چندینوچند ماشین مجازی را دارد؛ آن هم در حالی که روی هر یک از آنها یک سیستمعامل متفاوت نصب شده است.
به لطف وجود پلتفرمهایی مثل وی ام ویر (VMware) و ویرچوال باکس (VirtualBox) امکان ساخت و مدیریت ماشینهای مجازی به سادگی هرچه تمامتر فراهم شده است. این پلفترمها، ابزارهایی برای عیبیابی ماشین مجازی، یکپارچهسازی ماشینهای مجازی یا انتقال ماشین مجازی از یک میزبان به میزبان دیگر را فراهم کردهاند.
حالا که با ماشین مجازی آشنا شدیم، برای رسیدن به تفاوت ماشین مجازی و کانتینر، باید با کانتینر و ماهیت آن هم آشنا شویم.
کانتینر چیست؟
در کنار تکنولوژی مجازی سازی، تکنولوژی دیگری به نام کانتینر (Container) وجود دارد. کانتینرها، روند متفاوتی را نسبت به ماشینهای مجازی برای مجازیسازی در پیش میگیرند که اساس آن، اشتراکگذاری کرنل سیستمعامل میزبان است.
اشتراکگذاری کرنل سیستم عامل در میان کانتینرها
برای درک تفاوت ماشین مجازی و کانتینر در نحوه مجازیسازی، ابتدا به نحوه مجازیسازی در ماشینهای مجازی اشاره میکنیم. در مجازی سازی به کمک ماشینهای مجازی، هایپروایزر امکان ساخت چند شبیهسازی کامل از کامپیوتر فیزیکی را بر روی یک سختافزار واحد، فراهم میکند. هر ماشین مجازی، شامل موارد زیر است:
- یک سیستمعامل
- یک نسخه مجازی شده از سختافزار مورد نیاز برای اجرای سیستمعامل
- اپلیکیشنهای نصب شده بر روی سیستمعامل و کتابخانهها و وابستگیهای لازم برای اجرای اپلیکیشن
اما در مجازیسازی با کانتینرها، به جای شبیهسازی سختافزار میزبان، شبیهسازی سیستمعامل میزبان انجام میشود. بنابراین خبری از هایپر وایزر نیست و هر کانتینر، تنها شامل اپلیکیشن و وابستگیها و کتابخانههای لازم برای اجرای آن اپلیکیشن است.
در مجازی سازی با کانتینرها، کرنل (Kernel) سیستمعامل میزبان بین کانتینرهای مختلف، به اشتراک گذاشته میشود. بهرهبرداری کانتینرها از سیستمعامل و روندهای موجود در آن، باعث میشود تا کانتینر نسبت به ماشین مجازی، سبکتر و کارآمدتر باشد. کانتینر از مفهومی به نام کانتینر ایمیج سرچشمه میگیرد که در ادامه به آن اشاره میکنیم.
کانتینر ایمیج (Container images)
Container images، بستههای نرمافزاری قابل اجرا، مستقل و سریعی هستند که شامل تمامی مؤلفههای ضروری برای اجرای یک نرمافزار خاص میشوند (یعنی شامل کد برنامه، runtime، ابزارهای سیستمی، کتابخانههاو پیکربندیها).
کانتینرها به لطف سایز کوچک و سرعت بالای اجرا، برای توسعه جریانهای کاری و میکروسرویسها بسیار مناسب هستند. بعضی از نرمافزارها به طور مداوم در حال توسعه هستند. تست چنین نرمافزارهایی به کمک کانتینرها بسیار آسان انجام میشود. به کمک کانتینر میتوان یک بستهبندی و توزیع یکنواخت از نرمافزار را برای اجرا در محیطهای مختلف، تهیه کرد. بنابراین کانتینرها نقش مؤثری در افزایش بهرهوری چرخه توسعه نرمافزار دارند.
بزرگترین تفاوت ماشین مجازی و Container را میتوان در سطوح ایزولهسازی مشاهده کرد.
ایزولهسازی در سطح فرآیند
ایزولهسازی کانتینرها در سطح فرآیندها انجام میشود. هر کانتینر، به عنوان یک برنامه مستقل با کرنل سیستمعامل میزبان ارتباط برقرار میکند و یک اپلیکیشن یا سرویس خاص را اجرا میکند. ایزولهسازی کانتینرها نسبت به ایزولهسازی ماشینهای مجازی، با انعطاف بیشتری همراه است. بنابراین کانتینرها میتوانند یک راه مؤثر برای بستهبندی و ایزولهسازی اپلیکیشنها و غلبه بر محدودیتهای اجرای آنها در نظر گرفته شود.
نحوه مدیریت کانتینرها
موتورهای کانتینر (Container Engine) مثل داکر (Docker) یا کوبرنیتز (Kubernetes)، امکان مدیریت کانتینرها را فراهم کردهاند. این موتورها، امکان پیادهسازی خودکار کانتینرها، مقیاسگذاری، ایجاد شبکه و در دسترس قرار دادن اپلیکیشنهای کانتینری شده را فراهم میکنند.
مزایای کانتینرها نسبت به ماشین های مجازی
تفاوت ماشین مجازی و کانتینر برای مجازی سازی سرور خانگی، تنها در نحوه استفاده از منابع و ایزولهسازی خلاصه نمیشود. استفاده از هر یک از این تکنولوژیها در چرخه حیات نرمافزار و یادگیری نحوه عملیاتی کردن انتشار نرمافزار در حال توسعه، تاثیر دارد.
کانتینرها بنا بر ماهیت سبک و قابلیت شروع به کار سریعشان، میتوانند در ایجاد محیطی برای توسعه چابک نرمافزار، مفید واقع شوند. همچنین برای اجرای کانتینرها روی یک ماشین فیزیکی، نسبت به اجرای چندینوچند ماشین مجازی، به منابع کمتری نیاز است.
نمونهای از به کار گیری داکر
موتور کانتینر (داکر یا هر پلتفرم مشابه آن)، مسئول مدیریت چرخه حیات کانتینرها است. داکر، وظیفه شروع، توقف و نابودی کانتینرها را بر اساس دستوراتی که در فایل Build کانتینر موجود است دارد.
در ادامه، نگاهی به کدهای زیر بیندازید. در این کدها، از ابزار داکر کامپوز (Docker Compose) استفاده شده است که برای اجرای برنامههای مولتی کانتینر به کار میرود. همچنین در این کدها میبینیم که از Treafik برای ساخت پروکسی معکوس و از سرور نام (DNS Server) پای هول (Pi-Hole) استفاده شده است:
version: ‘3.3’
services:
traefik2:
image: traefik:latest
restart: always
command:
– “–log.level=DEBUG”
– “–api.insecure=true”
– “–providers.docker=true”
– “–providers.docker.exposedbydefault=true”
– “–entrypoints.web.address=:80”
– “–entrypoints.websecure.address=:443”
– “–entrypoints.web.http.redirections.entryPoint.to=websecure”
– “–entrypoints.web.http.redirections.entryPoint.scheme=https”
ports:
– 80:80
– 443:443
networks:
– traefik
volumes:
– /var/run/docker.sock:/var/run/docker.sock
container_name: traefik
pihole:
image: pihole/pihole:latest
container_name: pihole
ports:
– “53:53/tcp”
– “53:53/udp”
dns:
– 127.0.0.1
– 1.1.1.1
environment:
TZ: ‘America/Chicago’
WEBPASSWORD: ‘password’
PIHOLE_DNS_: 1.1.1.1;9.9.9.9
DNSSEC: ‘false’
VIRTUAL_HOST: piholetest.cloud.local # Same as port traefik config
WEBTHEME: default-dark
PIHOLE_DOMAIN: lan
volumes:
– ‘~/pihole/pihole:/etc/pihole/’
– ‘~/pihole/dnsmasq.d:/etc/dnsmasq.d/’
restart: always
تفاوت ماشین مجازی و کانتینر از نظر امنیت
امنیت همواره یک جنبه مهم در مجازی سازی بوده است. در مقایسه با کانتینرها، ماشینهای مجازی میتوانند ایزولهسازی بیشتری را ارائه دهند؛ چرا که هر یک از آنها سیستمعامل خودش را اجرا میکند. بنابراین ریسکهای امنیتی در ماشینهای مجازی کمتر از کانتینرها خواهد بود. اگرچه کانتینرها بهرهوری بیشتری دارند، اما اشتراکگذاری کرنل در بین کانتینرها میتواند پیامدهای منفی امنیتی را به دنبال داشته باشد و باید همواره این موضوع را در نظر داشته باشیم.
ماشینهای مجازی و کانتینرها در مجازی سازی سرور خانگی
حالا که درک بهتری از این دو تکنولوژی پیدا کردهایم، میخواهیم بدانیم که استفاده از کدام یک از آنها برای مجازیسازی سرور خانگی بهتر است؟ پاسخ این سؤال کاملاً به نیازهای شما بستگی دارد. اما پاسخ بهتری هم برای این سؤال وجود دارد و آن هم به کارگیری هر دو تکنولوژی است! میپرسید چگونه؟
برای استفاده از کانتینر به میزبان کانتینر نیاز داریم. میزبان کانتینر، یک کامپیوتر یا ماشین مجازی است که داکر یا پلتفرمهای مشابه بر رویش نصب شده باشد. بیشتر کاربران ترجیح میدهند تا داکر را بر روی ماشین مجازی نصب کنند، چرا که امکان مدیریت، پشتیبانگیری، انتقال و..در ماشین مجازی، راحتتر از کامپیوتر فیزیکی است.
در واقع بهترین کار این است که ابتدا ماشینهای مجازی را بر روی سرور فیزیکی ایجاد کرده و سپس از این ماشینهای مجازی به عنوان میزبان کانتینر استفاده کنیم. ظهور کانتینر باعث شده تا بتوانیم سرورهای خانگی را با بهرهوری بیشتری مدیریت کنیم. اکنون میتوانیم به جای اجرای ۶۵ عدد ماشین مجازی به صورت همزمان، بین ۵ تا ۱۰ عدد ماشین مجازی داشته باشیم که هر کدام چندینوچند کانتینر را در خود جای دادهاند.
پس شناخت تفاوت ماشین مجازی و کانتینر به ما ثابت کرد که باید از هردوی این تکنولوژیها در سرور خانگی خود استفاده کنیم.
بهترین کاربردهای کانتینر در سرور خانگی
به طور کلی سرویسهای تحت وب بهترین سرویسهایی هستند که میتوان درون کانتینر اجرا کرد. کانتینرها برای سرویسهای خود میزبان (self-hosted services) هم بسیار مناسب هستند. استفاده از کانتینر در سرور خانگی، بهترین راه برای تست سرویسهای جدید است؛ بدون این که بخواهیم با راهاندازی ماشینهای مجازی جدید و نصب تمامی پیشنیازهای لازم برای اجرای آن سرویس، سروکار داشته باشیم.
آینده از آن کدام تکنولوژی است؟
ظهور میکروسرویسها و اپلیکیشنهای ابری بومی (cloud-native) باعث افزایش تمایل کاربران به استفاده از کانتینرها شده است. اما این به معنای منسوخ شدن استفاده از ماشینهای مجازی نیست و آنها هنوز هم جایگاه رفیعی در سیستمهای مختلف (از جمله سرورهای خانگی) دارند.
امروزه همچنان از ماشینهای مجازی در سرورهای خانگی، در اسکیوال سرورهای یکپارچه، سرورهای پشتیبان، کنترلکنندههای دامنه (Domain Controller) و سایر کاربردهای مدیریتی استفاده میشود.
در واقع ماشین مجازی و کانتینر را نمیتوان دو تکنولوژی رقیب یکدیگر دانست؛ بلکه این دو مکمل یکدیگر هستند. ماشینهای مجازی، ایزولهسازی بهتری را فراهم می کنند و کانتینرها هم سرعت و بهرهوری بیشتر را.
بهترین کاربردهای ماشین مجازی
- میزبانی از کانتینرها
- مجازی سازی در سرورهای بزرگی که منابع زیادی دارند و باید اپلیکیشنهای زیادی را هم اجرا کنند
- استفاده در اسکیوال سرورها، سرورهای پشتیبان، کنترلکنندههای دامنه و…
بهترین کاربردهای کانتینرها
- اجرای وب سرویسهای کوچک
- آزمایش سرویسهای جدید بر روی یک سرور خانگی
- توسعه چابک نرمافزار و تست انتشار برنامههای در حال توسعه مداوم
- امکان ساخت یک محیط همیشه سبز که به راحتی میتوان آن را بهروزرسانی کرد
جمع بندی
در این مطلب به تفاوت ماشین مجازی و کانتینر اشاره کردیم. کاربردهای هریک را بیان کردیم و در نهایت به این نتیجه رسیدیم که این دو تکنولوژی، مکمل یکدیگر هستند و بهتر است از هردوی آنها در سرورهای خانگی استفاده کرد. اگر به دنبال یک سرور قدرتمند برای کاربردهای خانگی یا سازمانی هستید، حتماً سری به هنر توسعه و ارتباطات شایگان بزنید تا مشخصات پرفروشترین سرورهای بازار را بررسی کنید.
منبع: virtualizationhowto.com
سوالات متداول
۱. تفاوت ماشین مجازی و کانتینر چیست؟
این دو تکنولوژی در نحوه مجازیسازی با یکدیگر تفاوت دارند؛ ماشین مجازی ایزولهسازی و شبیهسازی را در سطح سختافزار انجام میدهد، در حالی که کانتینر این کار را در سطح فرآیندهای سیستمعامل انجام میدهد.
۲. در سرور خانگی از ماشین مجازی استفاده کنیم یا کانتینر؟
این دو تکنولوژی مکمل یکدیگر است و بهتر است از هردوی آنها استفاده کنیم. ابتدا ماشینهای مجازی را روی میزبان فیزیکی ایجاد کرده و سپس از آنها به عنوان میزبان کانتینرها استفاده خواهیم کرد.