داکر (Docker) یک پلتفرم متن باز است که بر مبنای سیستمعامل لینوکس راهاندازی شده است. اما اگر از سیستمعامل دیگری همانند ویندوز و مک استفاده کنید میتوانید از داکر و قابلیتهای آن نیز بهرمند بشید.
داکر با استفاده از دو قابلیت مهم موجود در کرنل لینوکس به نامهای Cgroups و Namespace امکانی را فراهم آورده است که پروسهها و نرمافزارها به صورت مجزا در محیط کاملا ایزولهای بر روی کرنل لینوکس راهاندازی شود که به این محیط و بستهی ایزوله، کانتینر (Container) میگویند. البته تا اینجای کار سرویس داکر کار خاصی انجام نداده و این موضوع رو تمامی Linux Containersها نیز دارا هستند. اما داکر امکانی را فراهم آورد که بتوان به راحتی با این قابلیت ارتباط برقرار کرده و از آن نهایت استفاده را کرد.
پس مشخص شد که داکر، امکانی را فراهم میکند که بتوان به راحتی با کانتینرها کار کرد. داکر این امکان را فراهم میکند که بتوان نرمافزار و کدهایی که آماده شده است را با سرعت خیلی زیادی تست و در محیط عملیاتی (Production) استفاده کرد. داکر این زمان را به شدت کاهش میدهد و البته که کیفیت آن را نیز بالا خواهد برد. با استفاده از داکر به خوبی میتوان مواردی که برای یک پروژه نیاز است را در کنار هم جمعآوری کرد و به صورت کامل آنها را در یک پکیج قرار داد. یعنی به اختصار هر آن چیزی که یک نرمافزار نیاز خواهد داشت اعم از پکیجهای وابسته (Dependency Package) و کتابخانهها (library) مورد نیاز در یک کانتینر آماده خواهد شد و همواره همراه نرمافزار در هر محیط که نیاز به راهاندازی دارد منتقل خواهد شد. در کل داکر یک سرویس بسیار مناسب و کارآمد برای استفاده در محیطهای راهاندازی، آزمایشگاهی و عملیاتی میباشد.
اما نکتهی مهمی که نیاز است که حتما به آن توجه شود این است که برای استفاده از آن باید دانش کافی در زمینهی داکر و میکروسرویس (Micro Service) را داشت.
بسیار سبک (کم حجم) و سریع می باشد.
سرویس داکر با استفاده از قابلیتهای Namespace و CGroups کرنل لینوکس، امکانی را فراهم میآورد که با توجه به مشترک بودن کرنل لینوکس میزبان (Docker Host) بین تمام کانتینرها، محیطهای ایزوله و مستقلی را ایجاد کند تا پروسهها بدون تاثیر بر روی یکدیگر هر کدام به صورت مجزا در کانتینر خود اجرا شود. این امکان به شدت در حجم محصول نهایی موثر بوده و آن را به مراتب کم حجمتر و سبکتر خواهد کرد. نکتهی مهم دیگه اینکه با توجه به قابلیت لایهای بودن ایمیجها از لایههای تکراری به صورت اشتراکی استفاده میشود و این موضوع نیز به شدت در حجم کانتینرها موثر خواهد بود. سبکتر شدن کانتینرها باعث میشود تا سرعت بیشتری را نیز شاهد باشیم.
منابع کمی مورد نیاز است.
راهاندازی سرویس با استفاده از داکر نیاز به منابع کمی دارد. با کمترین امکانات هم میتوان سرویسهای خود را راهاندازی کرد و بعدا با توجه به رشد سرویس منابع آن را نیز گسترش داد. با استفاده از سرویس داکر میتوان به خوبی با توجه به اینکه تا حد امکان کانتینرها کمحجم و سریع میباشند در منابع مورد نیاز پروژه تغییرات ایجاد کرده و آنها را کاهش داد.
راهاندازی کامل سرویسهای عملیاتی در محیط آزمایشگاهی و حتی رایانه شخصی.
از مهمترین دغدغههای سرویسهای عملیاتی تست، به روزرسانی و نگهداری سرویسها میباشد. به دلیل اینکه ایجاد محیطی همانند محیط عملیاتی پیادهسازی شده همواره پر هزینه و دشوار میباشد از این رو به روزرسانیها و یا هر اقدام دیگری در آزمایشگاههایی متفاوت با محیط عملیاتی انجام میشود که معمولا درست اعمال شده اما در محیط عملیاتی با مشکل مواجه میشوند. به این مشکل این را نیز اضافه کنید که ممکن است در یک پروژه چندین محیط آزمایشگاهی با تمام امکانات محیط عملیاتی برای تیمهای متفاوت نیاز باشد. این مشکل با استفاده از داکر به صورت کامل برطرف خواهد شد. شما میتوانید دقیقا عین همان چیزی که در محیط عملیاتی خود مورد استفاده قرار دادهاید را در محیطهای آزمایشگاهی و محیطهای توسعهی سرویس با کمترین زمان و هزینه و منابع دارا باشید. حتی میتوانید کل سرویس خود را بر روی رایانهی خود داشته باشید و موارد مربوط به آن را بررسی نمایید.
به راحتی و با سرعت زیادی قابلیت مقیاسپذیری (Scalability) دارد.
مقیاسپذیری از مهمترین قابلیتهای داکر و میکروسرویسها میباشد. تنها این دلیل به اندازه کافی ایجاب میکند تا برای پروژهی خود از سرویس داکر استفاده کنید. با استفاده از داکر به خوبی میتوان مقیاسپذیری را در تمام سطح پروژهی خود پیادهسازی کرده و مهمتر از آن اینکه میتوان به خوبی مقیاسپذیری خودکار (Auto Scaling) را ایجاد کرد. با توجه به این موضوع در هنگام پیک درخواست و نیاز اساسی به منابع میزان آنها افزایش یافته و پس از برطرف شدن نیاز آن منابع کاهش یابد و به صورت خودکار جمعآوری شود. که این موضوع هم در کیفیت سرویسدهی شما بسیار موثر خواهد بود و هم هزینههای شما را به شدت کاهش خواهد داد.
قابلیت بخشبندی (Modularity) و قابل حمل بودن (Portability) را به سرویس شما میدهد.
یکی دیگر از قابلیتهای مهم داکر قابلیت قسمتبندی کردن پروژه میباشد که میتوان با استفاده از آن پروژهای بزرگ را به بخشهای کوچکتر تقسیم کرد که هر بخش را به صورت مستقل پیادهسازی و اجرا کرد. سپس تمام بخشهای را کنار هم قرار داده و سرویس اصلی را ایجاد نمود. این موضوع در پروژههای بزرگ به شدت موثر بوده و سرعت اجرا و پیادهسازی آن را افزایش میدهد. از دیگر قابلیتهای مهم قابل حمل بودن میباشد. بر این اساس شما میتوانید کل پروژه را در محیط دیگری آماده نمایید و سپس آن را به محیط عملیاتی خود منتقل کنید. این قابلیت امکان به اشتراکگذاری سرویسهای پیادهسازی شده را نیز فراهم میآورد.
اجزای اصلی داکر عبارتند از:
بعد از شناخت مفاهیم فوق میتوان به زبان مشترکی برای توضیح نحوهی عملکرد داکر پرداخت.
داکر سرویسدهنده:
سرویسدهندهی داکر با توجه به درخواستهای رسیده از API (رابطهای برنامهنویسی اپلیکیشن) مربوط به خود، ایمیج، کانتینر و تمام موارد دیگر را مدیریت میکند. کنترل، مدیریت و استفاده از داکر از این طریق میسر میباشد.
داکر مشتری:
رابط بین داکر سرویسدهنده با کاربران استفاده کننده از داکر میباشد. یعنی به صورت خلاصه دستورات کاربران را به سرویسدهندهی داکر از طریق API منتقل میکند و سرویسدهنده هم آنها را انجام میدهد. داکر مشتری میتواند با یک یا چند تا سرویسدهندهی داکر ارتباط داشته باشد.
مخزن داکر:
مخزن داکر محلی برای نگهداری ایمیجهای داکر است. یه سری مخزن عمومی (Public Registry) داریم که قرار دادن و دریافت ایمیج از آنها آزاد و رایگان بوده و بدون نیاز به دسترسی خاصی میباشد. اما معمولا هر شرکت و یا ارائه کنندهی سرویس برای خود مخازن خصوصی (Private Registry) راهاندازی میکند تا ایمیجهای خاص و مهم خود را در آنها نگهداری و در مواقع لزوم استفاده کند. برای استفاده از این مخازن نیاز به دسترسی میباشد و معمولا اطلاعات آنها به صورت عمومی منتشر نمیشود.
شرکت داکر یکی از بهترین مخازن عمومی (Docker Hub) را ارائه میکند اما برای IPهایی که از کشور ایران باشد مسدود بوده که برای استفاده از آن باید از روشهای دیگری استفاده کرد که اینجا در مورد آن توضیح داده شده است.
ایمیج:
ایمیج یک لایه فقط خواندنی (Read Only) از دستورالعمل ایجاد کانتینر میباشد که تمام تنظیمات و تغییرات ما در آن وجود خواهد داشت. هر ایمیج میتواند بر اساس ایمیجهای دیگری باشد که تغییرات و سفارشیسازیهای مخصوص خودش را دارا باشد. به طور معمول ایمیجها با استفاده از داکرفایل (Dockerfile) ایجاد میشوند.
کانتینر:
هر کانتینر یک نمونهی راهاندازی شده از ایمیج خود میباشد. با کانتیرها میتوان آن عملکرد مد نظر خود از ایمیج و یا کانتینر را ایجاد و از آن استفاده کرد. کانتینرها را میتواند ایجاد، پاک و هرگونه تغییری که مد نظر باشد بر روی آن انجام داد.
سرویس:
برای مقیاسپذیری (Scale) کانتینرها نیاز است تا از چندین داکر سرویسدهنده استفاده کرد. سرویس Swarm میتواند با چندین داکر سرویسدهنده ارتباط برقرار کند و از آنها به عنوانهای مختلف اعم از کارگر (Worker) و مدیر (Manager) سرویس استفاده کند. سرویس Swarm با استفاده از API با سرویسدهندهی داکر ارتباط برقرار میکند. این امکان از نسخهی ۱٫۱۲ و بالاتر در خود داکر موجود میباشد.