داکر یک ابزار متنباز است که امکان اجرای نرمافزارها را درون یک کانتینر (Container) فراهم میکند. سادهترین راه برای درک مفهوم داکر، مقایسه آن با کانتینرهای حمل بار در کشتیهاست. در گذشته، شرکتهای حملونقل با مشکلاتی مانند موارد زیر مواجه بودند:
جابجایی کالاهای متفاوت در کنار هم مثل شیشه و آجر یا مواد غذایی و مواد شیمیایی. همچنین چالش نحوه بارگیری و چینش کالاها با اندازههای مختلف، مثل قرار گرفتن شیشه روی آجر. در نهایت راهحل این بود که برای هر کالا، محفظه یا کانتینر مخصوصی در نظر گرفته شود. این کانتینرها باعث شدند جابجایی و انتقال کالاها بسیار سادهتر شود. داکر دقیقاً چنین کاری را برای نرمافزارها انجام میدهد.
وقتی شما نرمافزاری را توسعه میدهید، انتظار میرود همه کتابخانهها، وابستگیها و ابزارهای موردنیاز برای اجرای آن (مثل نسخه سیستمعامل، پایگاه داده یا زبان برنامهنویسی) در دسترس باشند. پیش از داکر، این موضوع چالشهای بزرگی ایجاد میکرد، مخصوصاً زمانی که توسعهدهندگان روی پروژههای مختلف با نیازمندیهای متفاوت کار میکردند. تغییر نسخهها و پیکربندیها باعث سردرگمی و اتلاف زمان میشد. داکر این مشکل را با ایجاد یک محیط کاملاً ایزوله برای هر پروژه حل کرد. شاید بپرسید مگر ماشینهای مجازی چنین قابلیتی نداشتند؟
تفاوت داکر با مجازیسازی:
ماشینهای مجازی برای اجرای هر نرمافزار یک سیستمعامل مجزا روی سیستم میزبان ایجاد میکنند. این کار منابع زیادی از CPU، RAM و فضای ذخیرهسازی مصرف کرده و باعث کندی سیستم میشود. اما داکر نیازی به سیستمعامل جداگانه ندارد. داکر از Kernel سیستمعامل میزبان استفاده میکند و کانتینرها را بهعنوان پردازشهای جداگانه اجرا میکند. به همین دلیل اجرای کانتینرها بسیار سبکتر و سریعتر از ماشینهای مجازی است.
دیاگرام زیر به خوبی این تفاوت را نشان میدهد:
به خاطر داشته باشید که داکر اولین یا تنها ابزار کانتینریسازی نیست، اما بدون شک در حال حاضر یکی از محبوبترین و قدرتمندترین ابزارهاست.
خلاصه تفاوت داکر و ماشین مجازی در جدول زیر آمده است:
ویژگی | ماشین مجازی (VM) | داکر (Container) |
---|---|---|
سیستمعامل | نیازمند یک سیستمعامل جداگانه برای هر ماشین مجازی | از Kernel سیستمعامل میزبان استفاده میکند |
مصرف منابع | سنگین و پرمصرف | سبک و بهینه |
سرعت اجرا | کندتر به دلیل لایههای اضافی | سریعتر با زمان اجرای کمتر |
انعطافپذیری | پیادهسازی سختتر و پرهزینهتر | ایجاد و حذف آسان کانتینرها |
برخی از مزایای مهم داکر عبارتاند از:
- تسریع فرآیند توسعه و استقرار نرمافزار
- کپسولهسازی محیط توسعه (همهچیز در یک بسته)
- یکسان بودن رفتار نرمافزار در محیطهای dev، stage و prod
- امکان نظارت آسانتر و شفافتر
- قابلیت توسعهپذیری و مقیاسپذیری بالا