آشنایی با داکر ؛ آیا شما به استفاده از داکر نیاز دارید ؟
امروزه دانستن شیوه استفاده از کانتینرها در توسعه اپلیکیشن برای توسعهدهندگان وب اهمییت بالایی دارد. یکی از دلایل این حجم تقاضای اخیر برای کانتینرها، ظهور داکر (Docker) بوده است. اگر شما علاقهمند به حوزه فناوری و تکنولوژی باشید بعید است که نام داکر را نشنیده باشید. داکر نه تنها استفاده از کانتینرها را افزایش داده است، بلکه تأثیر عمدهای روی روش نگرش ما به توسعه اپلیکیشنها داشته است. به منظور درک بیشتر مفهوم داکر به مقاله داکر چیست مراجعه کنید؛ این مقاله برای توسعهدهندگان وب نگارش یافته است. برای آشنایی با داکر با ما همراه باشید.
آشنایی با داکر به زبان ساده
Docker ابزاری است که برای سهولت در ایجاد ، استقرار و اجرای برنامه ها با استفاده از کانتینرها طراحی شده است. بهطور کلی، داکر یک ابزار برای توسعهدهندگان جهت ایجاد، توزیع و اجرای اپلیکیشنها در یک محیط ایزولهشده از طریق کانتینرها است. به عبارت دیگر، Docker یک محصول Open Source است که فرایند ایجاد، توسعه و اجرا کردن Application ها با استفاده از Container ها در قسمت OS Level Virtualization را بسیار ساده می کند.
Docker به توسعهدهندگان کمک میکند تا ظروف نرمافزاری (software portable) سبک و قابل حمل را بسازند. به همین دلیل آشنایی با داکر اهمییت بسیاری دارد. داکر از محیطیهای کوچک و بزرگ اجزای هسته سیستم عامل به صورت مشترک استفاده میکند. برای این که کاربران بتوانند به راحتی یک اپلیکیشن را طراحی یا توسعه دهند. بهترین بخش این مسئله این است که داکر در صورت نیاز این اجزا را از یکدیگر جدا میکند و در محیطی تحت عنوان ایزوله قرار میدهد.
تشبیه داکر به ماشین مجازی
در واقع می توان داکر را یک ماشین مجازی به حساب آورد. اما، بر خلاف ماشین های مجازی که یک سیستم عامل کلی و مستقل ایجاد می کنند، Docker هیچ سیستم عامل جدیدی را ایجاد نمی کند، بلکه این امکان را به بسته نرم افزاری ایجاد شده می دهد که از Kernel اصلی سیستم عامل لینوکسی که بر روی آن نصب شده است استفاده کند. در زمان انتقال نیز فقط Package نرم افزاری منتقل می شود نه ماشین مجازی.
در واقع، Docker Engine یا موتور اصلی Docker جایگزین نرم افزار Hypervisor موجود می شود. اینکار باعث افزایش کارایی سیستم می شود. زیرا یک لایه واسط به نام Hypervisor حذف شده و نرم افزار بصورت مستقیم با هسته اصلی سیستم عامل کار میکند با این تفاوت که کاملا ایزوله شده است. یکی از مهمترین فاکتورهایی که Docker دارد Open Source بودن آن است. این یعنی هر کسی می تواند Docker را تهیه و هسته آن را تغییر بدهد و یک محصول جدید معرفی کند و یا اینکه قابلیت های جدیدی به آن اضافه کند که تا به حال بر روی آن وجود نداشته است.
چه اشخاصی نیاز به استفاده از داکر دارند؟
Docker ابزاری است که برای بهره مندی توسعه دهندگان و مدیران سیستم طراحی شده است. آن را جزئی از ابزارهای devops چیست (توسعه دهندگان + عملیات) می کند. Docker ابزاری مناسب برای تمام برنامه نویسان و توسعه دهندگان است. زیرا میتوانند برنامه ای که توسعهدادهاند را بدون توجه به پلتفرم، در هر محیطی اجرا کنند. برای توسعه دهندگان، این بدان معناست که آنها می توانند بدون نگرانی در مورد سیستمی که در نهایت اجرا خواهد شد، روی نوشتن کد تمرکز کنند.
داکر چه مشکلاتی را حل می کند ؟
حال که به اهمییت آشنایی با داکر پی بردیم، باید به درک این مسئله بپردازیم که داکر چه مشکلاتی را حل می کند. به طور خلاصه داکر پاسخی برای مسائل زیر است:
• حل مشکل پیشنیاز بین نرم افزارهای مختلف سیستم
• افزایش قابلیت انتقال نرم افزار
• محافظت از سیستم
داکر مشکلات زیادی را حل میکند اما یکی از مهم ترین آن ها improve consistency (بهبود ثبات یا استقرار ) است. هنگامی که تیم ها روی پروژه ای مشترک شروع به فعالیت میکنند، ممکن است تفاوتهایی در سیستمعاملها و یا تنظیمات آنها وجود داشته باشد.این امر باعث به وجود آمدن مشکلاتی مانند به وجود آمدن تناقض در بالا آمدن اپلیکیشن روی کامپیوتر و محیط عملیات (Production) شود. این مشکلات شما را از هدف اصلی که build کردن پروژه هست دور می کند.
داکر دارای قسمتی به نام container که شباهت بسیاری با ماشین های مجازی لینوکس دارد. با این تفاوت که کارایی containerها بسیار بالاتر است و منابع کم تری مصرف می کند.Container اپلیکیشن شما را در یک محیط ایزوله و پایدار اجرا میکند.
Container می تواند روی مک او اس، ویندوز و لینوکس اجرا شود. این مسئله مشکل دولوپرهای مختلف با سیستم عاملهای متفاوت را حل می کند. قابلیت داکر در ساخت و نگهداری محیطی استوار باعث Portable شدن اپلیکیشن شما می شود.
اگر برنامه شما در یکی از شاخه های زیر قرار می گیرد استفاده از داکر به شما پیشنهاد می شود:
یادگیری تکنولوژی های جدید:
برای شروع کار با ابزاری جدید بدون نیاز به صرف زمان زیاد بر روی نصب و تنظیم، داکر محیطی ایزوله و پایداری را عرضه می کند. اکثر پروژه ها تصاویر داکر را به همراه برنامه های مورد نیاز آن نصب و تنظیم می کنند.
موارد استفاده ساده (Basic use cases):
اگر برنامه شما ساده و یا استاندارد است شما می توانید بسیاری از برنامه های مورد نیاز خود را در قالب تصاویر داکر از Docker Hub به راحتی استخراج و از آن استفاده کنید. برای اینکه اطلاعات کاملی در مورد داکر هاب بدست آورید پیشنهاد می کنم مقاله داکر هاب را بخوانید.
ایزوله کردن برنامه:
اگر می خواهید چندین برنامه را بر روی یک سرور مجازی اجرا کنید با استفاده از داکر می توانید کامپوننت های هر برنامه را در کانتینرهای جداگانه نگه داری کنید. از بروز مشکلات مدیریت وابستگی داده ها جلوگیری کنید.
تیم های توسعه دهنده:
اگر شما توسعه دهندگانی دارید که با تنظیمات مختلفی کار می کنند، با استفاده از داکر می توانید محیط های پیاده سازی محلی مشابه با محیط محصول فراهم کنید تا هر یک بر روی آن کار کنند.
داکر چگونه کار می کند؟
تمام این نکات را گفتیم تا به این بخش رسیده و بفهمیم آشنایی با داکر چیست و چگونه کار میکند. داکر را میتوانیم یک مجازی ساز در نظر بگیریم، اما نه به شکلی که ماشینهای مجازی کار میکنند. این سرویس به شما کمک میکند یک محیط را به چند بخش تقسیم کرده و در هر بخش یک برنامه مجزا اجرا کنید. برای درک بهتر موضوع داکر را شبیه به ماشین مجازی در نظر بگیرید، میدانیم که ماشینهای مجازی با Hypervisor عملیات شبیه سازی را انجام میدهند. اما، در داکر این لایه حذف شده و ما مستقیم با هسته سیستم عامل کار میکنیم. این کار بازدهی سیستم را بسیار بالا میبرد.
ما به جای اینکه چند سیستم عامل را داخل یک شبیه ساز نصب کنیم فقط داکر را نصب میکنیم. این فرآیند را شبیه به نصب یک نرم افزار عادی در نظر بگیرید. سپس، داکر محیطهای مستقلی به نام Container ایجاد میکند که هر Container میتواند شامل بستههای نرم افزاری مختلفی باشد. حالا میتوانید داخل داکر Containerهای مختلفی ایجاد کنید و پروژههای خود را به طور مستقل روی هر کدام اجرا نمایید.
مزایای داکر چیست؟
بسیار سبک (کم حجم) و سریع می باشد.
سرویس داکر با استفاده از قابلیتهای Namespace و CGroups کرنل لینوکس، امکانی را فراهم میآورد. که با توجه به مشترک بودن کرنل لینوکس میزبان (Docker Host) بین تمام کانتینرها، محیطهای ایزوله و مستقلی را ایجاد کند. تا پروسهها بدون تاثیر بر روی یکدیگر هر کدام به صورت مجزا در کانتینر خود اجرا شود. این امکان به شدت در حجم محصول نهایی موثر بوده و آن را به مراتب کم حجمتر و سبکتر خواهد کرد. نکتهی مهم دیگه اینکه با توجه به قابلیت لایهای بودن ایمیجها از لایههای تکراری به صورت اشتراکی استفاده میشود. این موضوع نیز به شدت در حجم کانتینرها موثر خواهد بود. سبکتر شدن کانتینرها باعث میشود تا سرعت بیشتری را نیز شاهد باشیم.
منابع کمی مورد نیاز است.
راهاندازی سرویس با استفاده از داکر نیاز به منابع کمی دارد. با کمترین امکانات هم میتوان سرویسهای خود را راهاندازی کرد و بعدا با توجه به رشد سرویس منابع آن را نیز گسترش داد. با استفاده از سرویس داکر میتوان به خوبی با توجه به اینکه تا حد امکان کانتینرها کمحجم و سریع میباشند در منابع مورد نیاز پروژه تغییرات ایجاد کرده و آنها را کاهش داد.
راهاندازی کامل سرویسهای عملیاتی در محیط آزمایشگاهی و حتی رایانه شخصی.
از مهمترین دغدغههای سرویسهای عملیاتی تست، به روزرسانی و نگهداری سرویسها میباشد. به دلیل اینکه ایجاد محیطی همانند محیط عملیاتی پیادهسازی شده همواره پر هزینه و دشوار میباشد از این رو به روزرسانیها و یا هر اقدام دیگری در آزمایشگاههایی متفاوت با محیط عملیاتی انجام میشود. که معمولا درست اعمال شده اما در محیط عملیاتی با مشکل مواجه میشوند. به این مشکل این را نیز اضافه کنید که ممکن است در یک پروژه چندین محیط آزمایشگاهی با تمام امکانات محیط عملیاتی برای تیمهای متفاوت نیاز باشد. این مشکل با استفاده از داکر به صورت کامل برطرف خواهد شد. شما میتوانید دقیقا عین همان چیزی که در محیط عملیاتی خود مورد استفاده قرار دادهاید را در محیطهای آزمایشگاهی و محیطهای توسعهی سرویس با کمترین زمان و هزینه و منابع دارا باشید. حتی میتوانید کل سرویس خود را بر روی رایانهی خود داشته باشید و موارد مربوط به آن را بررسی نمایید.
به راحتی و با سرعت زیادی قابلیت مقیاسپذیری (Scalability) دارد.
مقیاسپذیری از مهمترین قابلیتهای داکر و میکروسرویسها میباشد. تنها این دلیل به اندازه کافی ایجاب میکند تا برای پروژهی خود از سرویس داکر استفاده کنید. با استفاده از داکر به خوبی میتوان مقیاسپذیری را در تمام سطح پروژهی خود پیادهسازی کرده و مهمتر از آن اینکه میتوان به خوبی مقیاسپذیری خودکار (Auto Scaling) را ایجاد کرد. با توجه به این موضوع در هنگام پیک درخواست و نیاز اساسی به منابع میزان آنها افزایش یافته و پس از برطرف شدن نیاز آن منابع کاهش یابد و به صورت خودکار جمعآوری شود. که این موضوع هم در کیفیت سرویسدهی شما بسیار موثر خواهد بود و هم هزینههای شما را به شدت کاهش خواهد داد.
قابلیت بخشبندی (Modularity) و قابل حمل بودن (Portability) را به سرویس شما میدهد.
یکی دیگر از قابلیتهای مهم داکر قابلیت قسمتبندی کردن پروژه میباشد که میتوان با استفاده از آن پروژهای بزرگ را به بخشهای کوچکتر تقسیم کرد که هر بخش را به صورت مستقل پیادهسازی و اجرا کرد. سپس تمام بخشهای را کنار هم قرار داده و سرویس اصلی را ایجاد نمود. این موضوع در پروژههای بزرگ به شدت موثر بوده و سرعت اجرا و پیادهسازی آن را افزایش میدهد. از دیگر قابلیتهای مهم قابل حمل بودن میباشد. بر این اساس شما میتوانید کل پروژه را در محیط دیگری آماده نمایید و سپس آن را به محیط عملیاتی خود منتقل کنید. این قابلیت امکان به اشتراکگذاری سرویسهای پیادهسازی شده را نیز فراهم میآورد.