آشنایی با Container
کانتینرها (Containers) به ما این قابلیت را میدهند تا برنامهها و وابستگیهای آنها را به صورت یک فرآیند ایزوله شده در سیستم اجرا کنیم. تمام اجزای ضروری مورد نیاز یک برنامه به صورت یک image بسته بندی میشود. image مربوط در یک محیط ایزوله اجرا شده و فضای حافظه، CPU و فضای ذخیره سازی خود را با سیستم عامل به اشتراک نخواهد گذاشت. این عمل موجب میشود که فرآیندهای موجود در Container قادر به مشاهدهی سایر فرآیندها در خارج از آن نباشند.
تفاوت ماشین مجازی (Virtual Machine) و کانتینر (Container)
ماشینهای مجازی عبارتند از یک سیستم عامل مستقل و دستهای از برنامههای کاربردی که برای کنترل آنها به یک Hypervisor نیاز است. از آن جا که یک ماشین مجازی (VM) شامل یک سیستم عامل است، بنابراین حجم آنها زیاده بوده و گاهی به چندین گیگابایت میرسد. یکی از نقاط ضعف استفاده از VM، پایین بودن سرعت شروع به کار (boot) سیستم عامل و برنامههای آن است. در عین حال، کانتینرها سبک بوده و حجمی در حدود چندین مگابایت دارند و در مقایسه با یک VM میتوانند به سرعت راه اندازی شوند و دارای عملکردی به مراتب بهتر هستند.
کانتینرها برای حل چه مشکلاتی آمدهاند؟
زمانی که محیط محاسباتی برای برنامههای کاربردی دستخوش تغییراتی شود، مشکلات متعددی پدید میآید. برای مثال توسعه دهندهای را در نظر بگیرید که کد برنامهای را در محیط ویندوز نوشته است و قصد دارد آن را در محیط لینوکس تست کند. در چنین حالتی این احتمال وجود دارد که برخی از قابلیتهای نرم افزار با تغییر سیستم عامل نتوانند به درستی کار کنند. بنابراین زمانی که محیط پشتیبانی کننده نرم افزار مورد نظر یکسان نیست، احتمال شکست نرم افزار بالا میرود.
از طرفی ممکن است در مرحلهی تست از نسخهی پایتون ۲٫۷ استفاده شده باشد و مرحله تولید از پایتون ۳ استفاده شود. یا این که برنامه در Debian تست شده و تولید بر روی RedHat انجام میشود. همچنین ممکن است تغییرات تنها محدود به محیط محاسباتی برنامه نباشد؛ بلکه مربوط به شبکه باشد. یعنی توپولوژی شبکه و سیاستهای امنیتی آن متفاوت بوده و نرم افزار باید در محیطی کاملا متفاوت اجرا شود.
مزایای استفاده از کانتینرها
یکی از بزرگترین مزیتهای استفاده از تکنولوژی کانتینر، سرعت ساخت و راه اندازی بسیار بالای آنها در مقایسه با VM است. همچنین کانتینرها با حذف وابستگیها و از بین بردن چالش تضادهای (conflict) نرم افزاری، باعث افزایش بهره وری در مرحلهی توسعه نرم افزار میشود. هر کانتینر به عنوان یک microservice مجزا در نظر گرفته میشود و در صورت نیاز میتوان به راحتی آن را بروز رسانی کرده و ارتقا داد. بدون این که نگران اختلال آن با سایر نرم افزار های موجود در سیستم باشیم. همچنین از آن جا که پردازشهای موجود در یک کانتینر ایزوله شده است، بنابراین هرگونه ارتقا یا تغییر در یک کانتینر، سایر کانتینرها را تحت تاثیر قرار نمیدهد.
چالشهای استفاده از کانتینرها
مدیریت تعداد زیادی کانتیرنر، کاری دشوار در مرحلهی توسعه نرم افزار است. بدین منظور از ابزاری مانند Kubernetes برای مدیریت تعداد زیادی کانتینر میتوان استفاده نمود. از طرفی، بسیاری از تکنولوژیهای کانتینر موجود مانند Docker، بر پایهی کانتینرهای لینوکس (LXC) هستند. بنابراین اجرای این کانتینرها در محیط Microsoft در مقایسه با اجرای آنها در محیط لینوکس میتواند باعث ناپایداری و بروز مشکلات متعددی گردد.
دسته بندی کانتینرها
کانتینرهای به دو دستهی OS Containers و Application Containers تقسیم میشوند.
OS Containers
بر اساس Wikipedia: «مجازی سازی در سطح سیستم عامل، یک روش مجازی سازی کامپیوتری است که در آن هستهی سیستم عامل اجازهی ایجاد چندین نمونه از فضای کاربری ایزوله شده را میدهد. این نمونه ها، که گاهی با نام کانتینرها، موتورهای مجازی سازی (VE) یا jailها شناخته میشوند، از دیدگاه برنامههایی که روی آنها اجرا میشوند، همانند یک کامپیوتر مستقل هستند.»
همان طور که اشاره شد، هستهی سیستم عامل میزبان به اشتراک گذاشته شده و از سویی دیگر فضای کاربری ایزوله میشود. در این حالت میتوان برنامههای مختلف را به سادگی روی آنها نصب و پیکربندی کرده و آنها را اجرا نمود. (همانند حالتی که برنامهای به صورت مستقیم در سیستم عامل میزبان اجرا میشود.) به همین ترتیب، منابع اختصاص یافته به یک کانتینر تنها برای همان کانتینر قابل استفاده است و image هر سیستم عامل مهمان قادر نخواهد بود به منابع سایر سیستم عاملهای مهمان دسترسی داشته باشند.
در صورتی که نیاز به ایجاد و راه اندازی سیستم عاملی کاملا مشابه (با پیکربندی یکسان) با سیستم عامل خود داشته باشیم، میتوانیم از این روش استفاده کنیم. به منظور ساخت OS Container میتوان از تکنولوژیهای کانتینر مانند LXC، OpenVZ، Linux VServer، BSD Jails و Solaris zones بهره وریم.
Application Containers
بر اساس Wikipedia: «مجازی سازی برنامه کاربردی یک تکنولوژی نرم افزاری است که برنامههای کاربردی را در حالی که روی سیستم عامل در حال اجرا هستند از یکدیگر جدا میکند. یک برنامه کاربردی مجازی سازی شده به صورت معمول و رایج نصب نمیشود. (اگرچه به صورت معمول اجرا میشود.) برنامه کاربردی در زمان اجرا همانند زمانی که به طور مستقیم با سیستم عامل در ارتباط بوده رفتار میکند، اما میتواند ایزوله شود.
در این متن واژهی مجازی سازی به برنامهی جداسازی شدهی مورد نظر اشاره دارد و معنای آن کاملا متفاوت از جنبهی مجازی سازی سخت افزار است؛ که در آن جا به سخت افزار فیزیکی اشاره دارد.»
Application Containerها به منظور بسته بندی و اجرای سرویسها به صورت یک فرآیند واحد طراحی شدهاند. در حالی که در OS Containerها، سرویسها و فرآیندهای متعددی میتوانند اجرا شوند. تکنولوژیهای کانتینری مانند Docker و Rocket، مثالهایی از Application Container هستند.
در این مقاله به طور خلاصه با مفهوم کانتینر و برخی مزایای آن آشنا شدیم. استفاده از کانتینرها در بسیاری از زمینهها بهتر از بکارگیری ماشینهای مجازی است. سرعت بسیار بالای ایجاد و راه اندازی آنها در مقایسه با VMها یکی از بزرگترین نقاط قوت آن محسوب میشود. بنابراین استفاده از آن در زمینههای مختلف و متعددی میتواند مفید واقع شود.
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.