مقایسه Docker با ماشین‌های مجازی: راهنمایی برای انتخاب بین VMها و Containerهای Docker

Containerها

Docker، Kubernetes وContainerها تکنولوژی‌های قدرتمندی هستند که می‌توانند مزایای زیادی را برای کسب‌و‌کار به همراه داشته باشند. اما بسته به نوع بار کاری سازمان، ممکن است بهتر باشد از ماشین‌های مجازی یا همان VMها یا ترکیبی از Containerها و VMها استفاده شود.

به همین دلیل بهتر است در مورد زمان استفاده از Containerهای Docker در قیاس با VMها بحث شود، مخصوصاً با تمرکز روی انواع موارد کاربرد و استراتژی‌هایی که هر تکنولوژی برای پشتیبانی از آن مناسب است.

مقایسه‌ بین Containerها و VMها

در ابتدا باید شباهت‌ها و تفاوت‌های بین Docker و ماشین‌های مجازی را تعریف کنیم.

Containerها و ماشین‌های مجازی Docker هر دو راه‌هایی برای پیاده‌سازی برنامه‌های کاربردی درون محیط‌هایی هستند که از سخت‌افزار زیرین جدا می‌شوند. تفاوت اصلی بین آن‌ها سطح جداسازی است.

با اجرای یک Container مثل Docker، برنامه کاربردی درون ویژگی‌های جداسازی که Container فراهم می‌کند Sandbox می‌شود، اما همچنان Kernel یکسانی با Containerهای درون هاست دارد. درنتیجه، فرایندهایی که درون Containerها اجرا می‌شوند از سیستم Host قابل‌مشاهده هستند و سطح دسترسی کافی برای فهرست کردن تمامی فرایندها دارند. مثلاً اگر یک MongoDB Container با Docker آغاز به کار کند، سپس ps -e | grep mongo در یک Shell عادی روی هاست (نه در Docker) اجرا شود، فرایند قابل‌مشاهده خواهد بود. وقتی چندین Container داشته باشیم که Kernel یکسانی داشته باشند، می‌توانیم Containerهای خیلی زیادی را با زمان شروع به کار تقریباً بلافاصله‌ای روی ماشین یکسانی Bin-Pack کنیم. همچنین درنتیجه‌ی اینکه Containerها نیازمند یک سیستم عامل کامل نیستند، بسیار سبک‌وزن، تقریباً حدود ۵ الی ۱۰۰ مگابایت هستند.

در حالیکه با یک ماشین مجازی، همه‌ی چیزی که درون VM اجرا می‌شود از سیستم عامل هاست یا Hypervisor مستقل است.  پلتفرم ماشین مجازی فرایندی را آغاز می‌کند (که مانیتورینگ ماشین مجازی یا VMM نام دارد) تا فرایند مجازی‌سازی را برای یک VM به‌خصوص مدیریت‌ کند و سیستم هاست برخی از منابع سخت‌افزاری خود را به VM تخصیص می‌دهد. اما تفاوت اساسی که در ماشین مجازی وجود دارد این است که در زمان شروع، یک Kernel تازه و اختصاصی را برای محیط VM بوت می‌کند و مجموعه‌ای (معمولاً بزرگ) از فرایندهای ماشین مجازی را راه‌اندازی می‌کند. این امر باعث می‌شود که اندازه‌ی VM بسیار بزرگ‌تر از یک Container باشد که فقط حاوی برنامه کاربردی است.

Containerها

اجرای یک Kernel و سیستم عامل اختصاصی چندین مزیت دارد. امنیت جداسازی یکی از مهم‌ترین مزیت‌ها است. مثلاً از دیدگاه سیستم هاست، هیچ راهی برای درک اینکه چه چیزی درون ماشین مجازی اجرا می‌شود وجود ندارد. با توجه به اینکه Kernel روی هاست یکسانی بین Containerها به اشتراک گذاشته می‌شود، ریسک کوچکی وجود دارد که عامل مخرب بتواند از محدوده‌ی خود خارج شده و به هاست زیرین دسترسی پیدا کند. با یک VM این امکان کاهش پیدا می‌کند، زیرا Kernel‌ها مشترک نیستند و این امر میزان آسیب‌پذیری‌ها را برای سخت‌افزار زیرین کاهش می‌دهد.

می‌توان در مورد جزئیات فنی در رابطه با تفاوت‌های بین اجرای یک Container و یک Hypervisor ماشین مجازی صحبت کرد یا اینکه در قیاس با نحوه‌ی حفظ داده در یک ماشین مجازی، Container Storage Snapshoting چگونه پیاده‌سازی می‌شود؛ اما برای کسی که صرفاً تصمیم می‌گیرد که از Container استفاده کند یا VM این تفاوت‌ها معمولاً اهمیت زیادی ندارد. بنابراین به سراغ این مسئله می‌رویم که در چه شرایطی بهتر است Docker را انتخاب کنید و در چه شرایطی ماشین‌های مجازی گزینه‌ی بهتری محسوب می‌شوند و چه زمانی بهتر است هر دو مورد انتخاب شوند.

زمان استفاده از Containerها و VMها

Containerها برای اکثر بارهای کاری برنامه کاربردی انتخاب خوبی هستند. به‌خصوص در موارد زیر، استفاده از Containerها می‌تواند یک اولویت باشد:

زمان شروع

Containerهای Docker معمولاً در عرض چند ثانیه یا حتی کمتر شروع به کار می‌کنند، درحالی‌که شروع به کار ماشین‌های مجازی ممکن است چند دقیقه طول بکشد. درنتیجه بارهای کاری که باید خیلی سریع شروع به کار کنند یا شامل راه‌اندازی و متوقف کردن مداوم برنامه‌های کاربردی هستند، می‌توانند انتخاب خوبی برای Docker باشند.

کارآمدی

ازآنجایی‌که Containerهای Docker منابع مشترک زیادی با سیستم هاست دارند، برای اجرا نیازمند نصب موارد بیشتری هستند. در مقایسه با ماشین مجازی، Container معمولاً فضای کمتری را اشغال می‌کند و زمان کمتری از RAM و CPU می‌گیرد. به همین دلیل، معمولاً با استفاده از Containerها، می‌توان برنامه‌های کاربردی بیشتری را روی یک سرور واحد جا داد تا با استفاده از ماشین‌های مجازی. همچنین به دلیل استفاده‌ی کمتر Containerها از منابع، به صرفه‌جویی در هزینه‌های رایانش ابری کمک می‌کنند.

Licensing

اکثر تکنولوژی‌های اصلی که برای پیاده‌سازی Containerهای Docker ضروری هستند، از جمله Orchestratorها و Runtimeهای Container مثل Kubernetes رایگان و متن‌باز هستند. این امر هم باعث صرفه‌جویی در هزینه و هم افزایش انعطاف‌پذیری می‌شود. (اما جا دارد اشاره شود که در بسیاری از موارد، سازمان‌ها از توزیع تجاری Docker یا Kubernetes استفاده می‌کنند تا پیاده‌سازی را تسهیل کرده و خدمات پشتیبانی حرفه‌ای بدست آورند.)

استفاده مجدد از کد

هر اجرا از Container برمبنای یک Image از Container است که حاوی باینری‌ها و Libraryهایی است که Container برای اجرای یک برنامه کاربردی به آن نیاز دارد. ساختن Imageهای Container با استفاده از Dockerfileها آسان است. می‌توان آن‌ها را با استفاده رجیستری‌های Container به اشتراک گذاشت و مجدداً مورداستفاده قرار داد؛ این رجیستری‌ها معمولاً منابعی هستند که Imageهای Container را هاست می‌کنند. می‌توان یک رجیستری داخلی را تنظیم کرد و Containerهایی را درون شرکت مجدداً مورداستفاده قرار داد. می‌توان هزاران Image از پیش ساخته‌شده را از رجیستری‌های عمومی (مثل Docker Hub یا Quay.io) به رایگان دانلود کرد و به‌عنوان مبنایی برای ساختن برنامه‌های کاربردی Containerizeشده مورداستفاده قرار داد.

البته می‌توان VMها را در Imageها نیز وارد کرد و آن Imageها را نیز می‌توان به اشتراک گذاشت، اما نه به همان کارآمدی و سادگی Containerها. همچنین ساخت Imageهای ماشین‌های مجازی به‌صورت خودکار آسان نیست و معمولاً حجم بیشتری دارند. همچنین ازآنجایی‌که معمولاً حاوی سیستم عامل هستند، توزیع مجدد آن‌ها می‌تواند از نظر حقوقی پیچیده باشد. (مثلاً در اکثر مواقع اگر ویندوز بدون License نصب شده باشد، نمی‌توان به‌طور قانونی یک Image ماشین مجازی را دانلود و اجرا کرد.)

چه زمانی باید از ماشین‌های مجازی استفاده کرد؟

بیایید چند مورد از دلایل صرف‌نظر کردن از Containerهای Docker و استفاده از ماشین‌های مجازی را بیان کنیم.

ترکیب قابلیت انتقال لینوکس و ویندوز

امروز اکثر پلتفرم‌های ماشین مجازی روی هر سیستم عامل اساسی کار می‌کنند و می‌توانید هر نوعی از سیستم عامل را که می‌خواهید داخل ماشین‌های مجازی اجرا کنید. درنتیجه می‌توان یک ماشین مجازی ویندوز را روی لینوکس یا برعکس اجرا کرد. این قابلیت انتقال در صورتی مفید است که زیرساختی داشته باشیم که در آن نیاز باشد یک نوع سیستم عامل را روی دیگری پیاده‌سازی کرد.

Docker به این اندازه قابلیت انتقال ندارد. با اینکه Docker از بعضی لحاظ وابستگی به سیستم عامل را کاهش می‌دهد (مثلاً می‌توان Docker Container یکسانی را روی Ubuntu یا CentOS اجرا کرد، هرچند که هر کدام از این توزیع‌های لینوکس از نوع متفاوتی از سیستم مدیریت Package استفاده می‌کنند)، Docker قابلیت انتقال را روی سیستم عامل‌های مختلف فراهم نمی‌کند. Containerهای Docker برای لینوکس فقط روی هاست‌های لینوکس کار می‌کنند و همین امر در مورد ویندوز نیز صدق می‌کند. (به‌علاوه، Docker فقط روی بعضی از نسخه‌های ویندوز کار می‌کند که به نوبه‌ی خود یک محدودیت دیگر است.)

ویژگی‌های بازگردانی (Rollback)

بسیاری از پلتفرم‌های ماشین مجازی مدرن Snapshot گرفتن از ماشین‌های مجازی در یک زمان به‌خصوص و بازگردانی کردن ماشین در زمان دلخواه را تسهیل می‌کنند. این امر می‌تواند در زمان رسیدگی به خرابی داده و نقض‌های امنیتی و همچنین موارد دیگر مفید باشد.

وقتی که Containerهای Docker را با VMها مقایسه می‌کنیم، می‌بینیم که Docker عملکرد یکسانی را ارائه نمی‌دهد. می‌توان Imageهای Container را بازگردانی کرد، اما به این دلیل که Containerها معمولاً داده‌ها را خارج از Imageها ذخیره می‌کنند، بازگردانی یک Image به بازیابی داده‌هایی که با اجرای برنامه کاربردی از بین رفته بود کمک نمی‌کند. همچنین این کار لزوماً به متوقف کردن نقض امنیتی کمکی نمی‌کند، مگر اینکه نقض امنیتی به دلیل مشکلی در یک نسخه‌ی به‌خصوص از Container Image به وجود آمده باشد.

Containerها

جداسازی اینترنت از شبکه داخلی: Container یا VM، کدام امن‌تر است؟

برای جداسازی اینترنت از شبکه داخلی، استفاده از ماشین مجازی و دسکتاپ مجازی چندان ایمن نیست، زیرا برای جداسازی امن اینترنت از اینترانت، لازم است هیچ نوع ارتباطی بین مرورگر، شبکه داخلی و سیستم کاربر برقرار نباشد. این در حالی است که در VDI، امکان آلوده شدن کلاینتهایی که از VDI استفاده می‌نمایند به بدافزار وجود دارد. این امر زمانی اتفاق می‌افتد که احراز هویت کاربر در  VDI انجام شده و امکان تعامل ایجاد می‌گردد. همچنین اگر در یکی از برنامه های نصب شده بر روی VDI آسیب نرم افزاری داشته باشد، این آسیب پذیری می‌تواند منجر به اجرای بدافزار در یک سیستم عامل سرور واحد شود که چندین نشست/ برنامه کاربردی را میزبانی میکند. بدافزار اکنون به تمام نشست کاربران و کل داده‌های ایشان دسترسی دارد.

این در حالی است که با استفاده از تکنولوژی Container-Docker و جداسازی مرورگر، صرفا انتقال تصویری از مرورگر برای کلاینت فراهم می‌شود . به همین دلیل، مخاطرات و آلودگی فضای سایبری به سیستم کاربر منتقل نمی‌گردد. این حالت به مشابه آن است که کاربر از پشت شیشه ای شفاف به فضای بیرون نگاه کرده و بدیهی است مخاطرات فضای بیرون به ایشان نخواهد رسید. اما در خصوص تجربه کاربری نیز می‌توان گفت که کاربر درکی نسبت به اینکه تصویر مشاهده میکند یا محیط واقعیست نخواهد داشت، بنابراین تجربه کاربری خوشایندی خواهد داشت.

با توجه به ساختارهای معرفی شده در راستای ایجاد بستری امن برای کاربران و جلوگیری از انتشار آلودگی در سطح شبکه و همچنین کاهش حملات از سمت کاربران شبکه پیشنهاد می­‌گردد جداسازی مرورگر امن در راستای پیاده‌سازی و بهبود زیرساخت سازمان‌ها قرار داده شود. شرکت امن‌پردازان کویر (APK) پیشرو در ارائه خدمات امنیت سایبری، محصول APKSWAP، سامانه دسترسی امن به اینترنت را با استفاده از فناوری جداسازی مرورگر و تکنولوژی Container-Docker ارایه نموده ­است. این راه‌حل نسبت به راهکارهای جداسازی فیزیکی از نظر هزینه‌­های مالی، منابع انسانی، زیرساختی و همچنین توسعه‌­ای مقرون به صرفه است.

در صورت تمایل به کسب اطلاعات بیشتر، درخواست دمو یا مشاوره، نسبت به تکمیل فرم مورد نظر اقدام فرمایید.

درخواست دمو و مشاوره

ایمیل خود را وارد کنید و عضو خبرنامه شوید.

محصولات شرکت

سامانه مدیریت یکپارچه تهدیدات
سامانه مرورگر امن (RBI)
سامانه مدیریت وقایع و امنیت اطلاعات

جهت ثبت درخواست همین حالا فرم را تکمیل نمایید.

با تکمیل فرم و ارسال درخواست خود، همکاران و کارشناسان ما در اسرع وقت با شما تماس خواهند گرفت.

Start typing to see posts you are looking for.

جهت ثبت درخواست همین حالا فرم را تکمیل نمایید.

با تکمیل فرم و ارسال درخواست خود، همکاران و کارشناسان ما در اسرع وقت با شما تماس خواهند گرفت.

جهت دانلود کاتالوگ شرکت همین حالا فرم را تکمیل نمایید.

جهت دانلود گزارش امنیتی 2023 همین حالا فرم را تکمیل نمایید.