در این نوشته قصد داریم شما را با داکر(Docker) و مزایای آن نسبت به روشهای سنتی آشنا نماییم.
کمی در مورد کانتینری کردن نرمافزارهایمان و توسعه سریع اپلیکیشن نیز صحبت میکنیم.
ابتدا برای توضیح داکر به سراغ کانتینرها میرویم.
کانتینر چیست؟
به قول خود داکر(Docker)، کانتینر واحد استاندارد شدهای از نرمافزار است.
اکثر برنامههایی که توسعهدهندگان مینویسند بهگونهای است که از بخشهایی از سیستمعامل به عنوان کتابخانه برای اجرا کمک میگیرند.
چون در سیستمهای مختلف ممکن است کتابخانهها متفاوت باشند، این امر مشکلساز خواهد بود.
حتی ممکن است با نسخهای که در طی توسعه نرمافزار استفاده شده همخوانی نداشته باشند.
از طرفی گاهی نصب این کتابخانهها وقتگیر بوده و زمان زیادی برای اجرا روی دستگاههای دیگر یا سرور تلف میشود.
برای حل این مشکل، تمام کتابخانههای سیستمعامل که برای اجرای نرمافزار نیاز است با کد نرمافزار بستهبندی میشود.
این بسته در قالب یک تصویر(Image) ارائه میشود.
این تصویر توسط نرمافزارهای مربوط روی سیستم مقصد اجرا میشود و به این ترتیب کانتینر شکل میگیرد.
یکی از معروفترین نرمافزارهای اجرا کننده این کانتینرها، داکر(Docker) است.
برای مثال شما یک وبسایت با زبان Nodejs نوشتهاید که از نسخه ۱۰ آن استفاده میکند. همچنین داخل آن از bcrypt برای درهمریخته کردن و از Crypto برای رمزنگاری استفاده میکنید.
برای نصب bcrypt به کتابخانههای از زبان ++C / C و همیچنین کامپایلر آن نیاز دارید.
همچینین برای استفاده از crypto به کتابخانهای نظیر OpenSSL نیازمندید که ممکن است نسخه سازگار با این ابزارها روی سیستم مقصد نصب نشده باشد.
بنابراین در اجرای نرمافزار به مشکل برخورد خواهید کرد.
برای رفع این مشکل میتوانید بر پایه یک Image ساده از Nodejs نسخه ۱۰ یک تصویر از نرمافزار با کتابخانهها و ابزارهای لازم آماده کنید و در هر جا که بخواهید با داکر آنرا اجرا نمایید.
مزیت بعدی این است که میتوانید در مدت زمان خیلی کوتاه تعداد زیادی نمونه از نرمافزار خود را اجرا کنید و بتوانید بدون نگرانی در مورد توزیع بار ترافیکهای سنگین را پاسخگو باشید.
با داکر(Docker) به موارد زیر دست پیدا میکنید:
- عدم تداخل نرمافزارها: میتوانید در یک بستر تعداد زیادی نرمافزار مختلف بدون این که کتابخانههای لازم برای هر کدام با دیگری تداخل داشته باشد اجرا کنید.
- اجرا با یک دستور: نیازی به تنظیم بخش به بخش سیستم توسط شما نیست.
تنها با یک دستور میتوانید نرمافزار خود را هر چند روال اجرای آن پیچیده باشد اجرا کنید. - سرعت بیشتر نسبت به ماشین مجازی: کانتینر فقط سیستمعامل را مجازیسازی میکند.
بنابراین نسبت به ماشین مجازی که کل سختافزار را مجازیسازی میکند سربار کمتری داشته و کارایی بیشتری را نیز به همراه دارد. - اجرای توزیع شده بین چند سرور و چند نمونه روی هر سرور: به کمک ساختار غیر وابسته کانتینر به راحتی میتوان چندین نمونه از نرمافزار را روی چندین سرور اجرا کرد.
- تعدیل بار: به کمک شبکه ingress داکر میتوان بین نمونههای نرمافزار به راحتی تعدیل بار را پیاده سازی نمود.
- ایزوله سازی: هر نرمافزار در محیطی مجزا از سایر نرمافزارها اجرا میشود و یک نرمافزار با سایر نرمافزارها تداخل ایجاد نمیکند.
- مدیریت منابع: به کمک داکر میتوان مشخص کرد که هر برنامه چه میزان از منابع را در اختیار داشته باشد.
عالی بود