داکر(Docker)
داکر (Docker) یک پلتفرم متن باز می باشد که بر مبنای سیستم عامل لینوکس راهاندازی شده است که برای ساخت، استقرار (Deployment) و مدیریت نرمافزارهای کانتینرشده است که عملیات ساخت، اجرا، مدیریت و توزیع اپلیکیشنها را سادهتر میکند. داکر این سادهسازی فرایند ایجاد اپلیکیشنها را به وسیله مجازیسازی سیستم عامل کامپیوتری انجام میدهد که اپلیکیشن قرار است روی آن نصب و اجرا شود. در واقع، داکر مجموعهای از محصولات پلتفرم به عنوان یک سرویس (PaaS) است که از مجازیسازی در سطح سیستم عامل برای تولید بستههای نرمافزاری استفاده میکند.
این فناوری، امکان ایجاد، اجرا و تست پروژههای نرمافزاری را در قالب container قابل حمل و مجزا روی ابر (Cloud)، دیتاسنتر مشتری یا سیستمعاملهای مختلف (مثل ویندوز یا لینوکس) برای توسعهدهندگان (Developers) فراهم میکند.
داکر امکانی را فراهم آورده است که پروسهها و نرمافزارها به صورت مجزا در محیط کاملا ایزولهای بر روی کرنل لینوکس راهاندازی شوند؛ به این محیط و بستۀ ایزوله، کانتینر (Container) میگویند.
تاریخچه داکر(Docker)
در سال 2014 سالامان هایکز (Solomon Hykes)، سازوکاری با نام داکر را با هدف تعامل راحتتر با کانتینرها (Containers) راه اندازی کرد. در نتیجه شرکتها یکی پس از دیگری اپلیکیشنهای تحت سرور را به جای ماشینهای مجازی در بستر داکر راهاندازی کردند.
تفاوت کانتینر (Container) و ماشین مجازی (Virtual Machine)
نگهداری برنامهها در محیطی ایزوله و به صورت مستقل، از اهداف سیستمهای جدید توسعه نرم افزار می باشد. به این ترتیب فعالیت آنها بر روی یکدیگر تاثیری نداشته و کاملا مستقل از هم کار میکنند. یکی از راههای پیاده کردن این تکنولوژی استفاده از ماشین مجازی (Virtual Machine) است که برنامهها را روی یک سخت افزار اما جدا از هم نگهداری میکند. در این حالت component ها با هم تداخل نداشته و رقابت برای استفاده از منابع سخت افزاری به حداقل می رسد. در مقابل ماشینهای مجازی، کانتینرها( Container ) قرار دارند، آنها میتوانند جایگزین مناسبی برای ماشینهای مجازی باشند. کانتینرها محیطهای اجرایی را جدا کرده و هسته سیستم عامل را به اشتراک میگذارد. کانتینرها نسبت به ماشینهای مجازی از منابع کمتری استفاده میکنند و همچنین خیلی سریع قابلیت اجرا پیدا میکنند.
مکانیزم عملکرد Docker
داکر (Docker) یک لایه واسطه بین سیستم عامل اصلی و بسته نرم افزاری ایجاد میکند. در واقع با استفاده از این لایه، نرم افزارها را از یکدیگر تفکیک میکند. در سیستم عامل لینوکس قابلیتهایی برای تفکیک و ایزوله کردن منابع وجود دارد که هم هسته سیستم عامل و هم گروهها و منابع سخت افزاری و نرم افزاری سیستم عامل را به صورت ایزوله و تفکیک شده در اختیار نرم افزارها قرار میدهد، که سیستم داکر نیز از آنها استفاده میکند.
مزایای داکر
- محیط ایزوله و پایدار
- هزینه مناسب و استقرار سریع
- پرتابل بودن و قابلیت اجرا در هر مکان
- قابلیت خوکارسازی (اتوماسیون)
- انعطافپذیری
- مقیاسپذیری
- بهینه بودن
- چابکی
- استانداردسازی کانتینرها
- نظارت و مدیریت کانتینرها
- استاندارد بودن
- حجم کم
- قابلیت تکرارپذیری
- عدم تداخل تنظیمات
- امنیت
- مدیریت محیط توسعه (Development environment)
- یکپارچه سازی مداوم
اجزای داکر
- Docker Engine Dockerd :
شامل daemon، API interface و CLI میشود که بهشکل خاص Daemon مسوول ساخت Docker Images است.
- Docker-containerd :
ontainerdیک Daemon دیگر که مسوول دانلود کردن Docker Images و اجرای آنها به عنوان یک Container است.
- Docker-runc :
Runc همان Container Runtime که مسوول ایجاد Namespaces و Control groups مورد نیاز Container است.
دلیل محبوبیت داکر
استفاده از کانتینرها و Docker به این دلیل اینکه بسیاری از چالشهای توسعه نرمافزار را برطرف میکنند محبوب شده اند. امکان محفظهسازی تنها برای یک بار و اجرا در همه محیطها، منجر به کاهش فاصله میان محیط توسعه و سرورهای تولید محصول می گردد. استفاده از Containerها این اطمینان و اعتماد را به وجود میآورد که همه محیطها برابر هستند. داکر نسبت به یک ماشین مجازی تمام عیار سادهتر است. ماشینهای مجازی ابزارهایی همهمنظوره هستند که برای پشتیبانی از هر میزان حجم کاری ممکن طراحی گردیده اند. در مقابل آن، کانتینرهای کم حجم داکر، خودکفا و برای کاربردهای یک بار مصرف مناسبتر می باشند .
در چه مواردی نباید از Docker استفاده کرد
- برنامه شما پیچیده است و یک sysadmin ندارید.
- بازدهی برنامه برای شما بسیار مهم است.
- شما نمیخواهید بهروزرسانیهای عجیب و غریب انجام دهید.
- امنیت برنامه برای شما حائز اهمیت است.
- شما میخواهید Clusterسازی کنید.
- برنامهای با سیستمعامل چندگانه.