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

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

امروزه کمتر کسی را می‌توان یافت که حوزهٔ آی‌تی فعالیت کند نام داکر به گوشش نخورده باشد. داکر که از سال ۲۰۱۳ به دنیا عرضه شد، زیرساختی را در اختیار دولوپرها قرار می‌دهد تحت عنوان کانتینر که با استفاده از آن به مراتب ساده‌تر از ماشین‌های مجازی می‌توانند نرم‌‌افزارهای خود را روی پلتفرم‌های مختلف دیپلوی کنند.

اولین کسی باشید که به این سؤال پاسخ می‌دهید

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

حال ممکن است این پرسش پیش آید که چه دلیلی ممکن است وجود داشته باشد که اپلیکیشن پس از دیپلوی در محیط‌های مختلف به درستی اجرا نگردد. در پاسخ به این سؤال فرض کنیم اپلیکیشنی نوشته‌ایم که در حین فرایند توسعه، نسخهٔ 7.1 PHP روی لپ‌تاپ‌مان نصب بوده است و از برخی ویژگی‌های این نسخه همچون اپراتور ?? در کدهای خود استفاده کرده‌ایم. حال زمانی که پروژه را روی سرور اصلی که نسخهٔ PHP 5.6 را دارا است دیپلوی می‌کنیم، مسلماً به مشکل برخورد خواهیم کرد.

اینجا است که کانتینر به کمک تیم‌های توسعهٔ نرم‌افزار می‌آید به طوری که این فناوری شامل یک محیط اجرای کامل است که اپلیکیشن به انضمام کلیهٔ وابستگی‌هایش من‌جمله لایبرری‌ها، فریمورک‌ها، فایل‌های پیکره‌بندی و غیره را شامل می‌شود که در قالب یک پکیج عرضه می‌شوند (در واقع، وجه تسمیهٔ کانتینرها به خاطر شباهتی است که با کانتینرهایی دارند که در تصویر فوق مشاهده می‌شوند. به عبارت دیگر، هر کانتینر محیطی کاملاً مجزا است که داخل آن کالاهای مختلفی را می‌توان قرار داد اما این در حالی است که تمامی کانتینرها روی یک پلتفرم واحد، کشتی، قرار دارند.)

آشنایی با تفاوت‌های کانتینر و ماشین مجازی
با استفاده از فناوری Virtualization (مجازی‌سازی)،‌ پکیجی که در بالا بدان اشاره شد را در قالب یک Virtual Machine (ماشین مجازی) مابین پلتفرم‌های مختلف می‌توان جابه‌جا کرد و این در حالی است که این ماشین مجازی حاوی یک سیستم‌عامل کامل + اپلیکیشن و وابستگی‌هایش است:

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

همان‌طور که در تصویر فوق ملاحظه می‌شود، سروری که سه ماشین مجازی روی آن در حال اجرا است در واقع سه سیستم‌عامل مجزا از یکدیگر روی آن در حال اجرا می‌باشد اما در مقابل سروری که چهار کانتینر روی آن وجود داشته باشد، صرفاً یک سیستم‌عامل وجود خواهد داشت و هر یک از کانتینرها، کِرنِل سیستم‌عامل را به صورت اشتراکی مورد استفاده قرار خواهد داد. به عبارت دیگر، کانتینرها به مراتب سبک‌تر از ماشین‌های مجازی خواهند بود و منابع کمتری استفاده خواهند کرد. همچنین سیستم‌عامل به منظور مدیریت بهینه‌تر کل سیستم میزان دسترسی هر کانتینر به منابع سیستمی همچون RAM و CPU را محدود می‌سازد تا یک کانتینر به‌خصوص نتواند تمامی منابع سیستمی را استفاده کرده و بالتبع سایر کانتینرها به مشکل برخورند.

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

نکتهٔ دیگری که در ارتباط با مزیت‌های کانتینرها وجود دارد این است که ماشین‌های مجازی زمان نسبتاً قابل‌توجهی برای بوت شدن سیستم‌عامل‌شان نیاز دارند و این در حالی است که کانتینرها خیلی سریع‌تر اجرا می‌شوند چرا که کانتینر صرفاً یک Process (پروسه) روی سیستم‌عاملی می‌باشد که در حال اجرا است (برای آشنایی بیشتر با این اصطلاح، به آموزش درآمدی بر Process در لینوکس مراجعه نمایید.)

همچنین این امکان فراهم شده تا اصطلاحاً یک ایمِج از کانتینری را به عنوان کانتینر بِیس (پایه) در نظر گرفته و دیگر ایمِج‌ها وابسته به آن باشند. به عبارت دیگر، می‌شود یک ایمِج پایه‌ای که شامل سیستم‌عامل، فایل‌های پیکربندی و دیگر وابستگی‌ها همچون لایبرری‌ها و فریمورک‌ها می‌باشد را ایجاد کرد سپس تیم توسعهٔ نرم‌افزار صرفاً ایمِجی حاوی سورس‌کد اپلیکیشن که مبتنی بر آن ایمِج پایه‌ای است را ایجاد کنند و همین مسئله مجدداً منجر به سرعت توسعه‌ٔ دیپلوی نرم‌افزار خواهد شد.

مزیت دیگر استفاده از کانتینرها امکان بهره بردن از اپلیکیشن‌های ماژولار است. به عبارت دیگر، به جای اجرای یک اپلیکیشن حجیم و پیچیده در قالب یک کانتینر، می‌توان اپلیکیشن خود را به صورت یکسری ماژول مجزا که اصطلاحاً تحت عنوان میکروسرویس شناخته می‌شوند طراحی کرده و هر یک از آن‌ها را به عنوان یک پکیج روی سرور قرار داد (برای آشنایی بیشتر با مفهوم میکروسرویس، به مقالهٔ میکروسرویس چیست؟ مراجعه نمایید.) به طور کلی، اپلیکیشن‌هایی که با معماری میکروسرویس طراحی می‌شوند به مراتب ساده‌تر مدیریت می‌شوند و در صورت نیاز به اِعمال تغییر در یکی از ماژول‌ها، اصلاً نیازی به بیلد کردن مجدد کل اپلیکیشن نخواهد بود.

نسخه‌بندی کانتینرها هم یکی دیگر از مزیت‌های این فناوری است. در واقع، می‌شود برای هر کانتینر یک ورژن در نظر گرفت، تفاوت ورژن‌های مختلف با یکدیگر را مشخص ساخت و در صورت نیاز، به ورژن‌های قبلی کانتینرها اصطلاحاً Roll-back (بازگشت) کرد.

به طور کلی، با استفاده از فناوری کانتینر به سادگی قادر خواهیم بود تا بدون اینکه نیاز داشته باشیم تا سرورهای مختلف را بسته به نیازمندی‌های اپلیکیشن خود کانفیگ کنیم، با خیال راحت یک اپلیکیشن را دیپلوی کنیم و همین مسئله سرعت انتشار نسخه‌های جدید اپلیکیشن را بالا خواهد برد.

نقاط ضعف کانتینرها چیست؟
با توجه به اینکه کانتینرها مستقل از سیستم‌‌عامل نیستند و چندین کانتینر از یک سیستم‌عامل واحد استفاده می‌کند، تهدیدات امنیتی به نسبت فناوری مجازی‌سازی پررنگ‌تر است. البته برخی سرویس‌ها همچون داکر ادعا می‌کنند که کاملاً اپلکیشن‌ها را هم نسبت به یکدیگر و هم نسبت به پلتفرمی که کانتینرها روی آن اجرا می‌شوند ایزوله می‌کنند که این مسئله امنیت مورد نیاز را ایجاد خواهد کرد. نقطه ضعف دیگری که متوجه کانتینرها است، مجدد به وابستگی آن‌ها به یک سیستم‌عامل باز می‌گردد. به عبارت دیگر، کانتینری که مبتنی بر پلتفرم لینوکس طراحی شده باشد، قابل‌اجرا روی یک پلتفرم ویندوزی نیست (Docker به نوعی با فناوری کانتینر عجین شده است چرا که این سرویس در آگاهی‌رسانی در مورد کانتینرها نقش‌ بسزایی داشت. در واقع، همان‌طور که ده‌ها پیش محصول تاید وارد ایران شد و امروزه هم می‌بینیم که برخی از سالمندان به هر نوعی از شویده می‌گویند تاید، در صنعت توسعهٔ نرم‌افزار هم ماجرا در مورد کانتینر و داکر تکرار شده است!)

سرویس‌های ارائه‌دهندهٔ تکنولوژی کانتینر کدامند؟
دولوپرها می‌توانند بسته به میزان بودجه و نیازمندی‌های خود، از سرویس‌های اپن‌سورس و رایگان گرفته تا سرویس‌های اینترپرایز (تجاری) استفاده کنند که در ادامه برخی از مهم‌ترین آن‌ها را معرفی خواهیم کرد:

Kubernetes: این سرویس به عنوان شناخته‌شده‌ترین و معروف‌ترین کانتینر اپن‌سورس و رایگان است که اولین نسخه‌های آن در کمپانی گوگل طراحی شد (واژهٔ Kubernetes باید به صورت «کوبِرنِتیس» تلفظ گردد.)

(Docker (EE: نسخهٔ Docker Enterprise Edition را به نوعی می‌توان معروف‌ترین پلتفرم اینترپرایز فناوری کانتینر معرفی کرد. داکر علاوه بر لینوکس، روی سیستم‌عامل ویندوز، آژور و غیره هم قابل‌اجرا است.

Open Shift Container Platform: این سرویس کانتینر محصولی از شرکت رِدهَت است که مبتنی بر Kubernetes و لینوکس توزیع Red Hat Enterprise می‌باشد.

Rancher: این سرویس هم مبتنی بر Kubernetes است که به گفتهٔ سایت رسمی‌اش، ٪۱۰۰ اپن‌سورس است.

آشنایی با توزیع‌های لینوکسی مناسب اجرای کانتیرها
به نظر می‌رسد برخی از توزیع‌های لینوکسی دارای فیچرهایی اضافی هستند که برای اجرای کانتیرها غیرضروری می‌باشند که در همین راستا یکسری توزیع سبُک از لینوکس اختصاصاً برای میزبانی کانتینرها به بازار عرضه شده‌ که برخی از مهم‌ترین آن‌ها عبارتند از:

RancherOS: این توزیع محیطی قابل‌اعتماد و در عین حال با مدیریتی ساده برای میزبانی کانتینرها در اختیار دولوپرها می‌گذارد.

Photon OS: توزیعی سبُک از لینوکس است که توسط کمپانی VMWare عرضه شده که اختصاصاً برای میزبانی پلتفرم‌های VMWare طراحی شده است.

Ubuntu Core: توزیعی کوچک و سبُک از سیستم‌عامل محبوب اوبونتو است که برای فناوری‌های اینترنت اشیاء و کانتینرها عرضه شده است. 

جمع‌بندی
در پاسخ به این پرسش که «آیا کانتینرها کاملاً جای ماشین‌های مجازی را خواهند گرفت؟» باید اعتراف کرد که جواب شفافی وجود ندارد اما از شواهد امر برمی‌آید که چنین چیزی حداقل به یک دلیل در آیندهٔ نزدیک امکان‌پذیر نخواهد بود و آن هم اینکه چیزی که کماکان فناوری مجازی‌سازی را محبوب نگاه داشته این است که به دلیل ایزوله‌تر بودن ماشین‌های مجازی نسبت به کانتینرها، برخی بر این باورند که ماشین‌های مجازی امن‌تر می‌باشند اما به هر حال مزیت‌های کانتینرها به اندازه‌ای بوده که امروزه کسب‌وکارهای بزرگی همچون مایکروسافت، گوگل، آمازون و غیره شروع به سرمایه‌گذاری روی این فناوری کرده‌اند.

حال نوبت به نظرات شما می‌رسد. آیا تجربه‌ٔ کار با ماشین‌های مجازی و کانتینرها را داشته‌اید و در عمل چه تفاوتی مابین این دو فناوری به چشم می‌خورد؟ نظرات، دیدگاه‌ها و تجربیات خود را با سایر کاربران سکان آکادمی به اشتراک بگذارید.