ترجمهی مقالهی WTF is a container از تککرانچ
این روزها امکان ندارد به کنفرانسهای توسعه دهندگان نرم افزار بروید و درمورد کانتینرها نشنوید : داکر، کوبرنتیس، مزوز و کلی اسم دیگر. مایکروسافت، گوگل، آمازون و بسیاری از شرکتهای بزرگ دیگر در یک سال اخیر یا حتی قبلتر به این سمت رفتهاند، اما چرا همه در این مورد تا این حد مشتاقاند؟
برای درک این موضوع که چرا کانتینرها انقدر ارزشمند هستند، بیایید کمی درمورد کانتینرها در دنیای فیزیکی بیاندیشیم. در صنعت مدرن همه از کانتینرها برای جابجایی استفاده میکند، زیرا بشر استانداردهایی برای سایز کانتینرها وضع کرده است. قبل از وضع این استاندارد، جابجایی هرچیزی بصورت کلی یک کار پیچیده و دشوار بود. تصور کنید چه زحمتی در جابجایی یک کارتن از تلفنهای هوشمند از روی کشتی تا روی ماشین بارکش باید متحمل میشدند. اما حالا بجای جابجایی یکسری تلفن هوشمند خاص از آسیا، ما آنها را در یک کانتینر جا میدهیم و مطمئن خواهیم بود که این کانتینر در هر کشتی و سیستم باربری به سادگی قابل بارگیری است.
دلیل ایجاد کانتینرهای نرمافزاری هم موردی مشابه بود. بجای جابجایی تمام سیستمعامل و نرمافزارتان ( و حتی نرمافزارهایی که نرمافزارتان به آن وابسته است) ، شما به راحتی کدتان را بسته بندی میکنید و کد شما تنها به یک کانتینر وابسته است که میتوانید آنرا همهجا به راحتی منتقل کنید و به چون معمولا این کانتینرها بسیار کوچک هستند، میتوانید تعدا زیادی کانتینر را روی یک سیستم کامپیوتری اجرا کنید.
خب چرا کانتینرها تا این حد ارزشمندند؟ قبل ازینکه کانتینرها مانند امروز محبوب شوند، ماشینهای مجازی تکنولوژیای بودند که اجازه میدادند روی یک سرور تعداد زیادی برنامه اجرا کنیم که کاملا از هم جدا و در محیطی ایزوله باشند. این تکنولوژی، وجود اولین نسل از سیستمهای پردازش ابری را ممکن ساخت ( و حتی تا حدی سیستمهای میزبانی وب را). اگر بخواهید برای هر برنامه یک سرور مجزا تهیه کنید، هزینههای آن بشدت سنگین تمام میشود.
روشی که ماشینهای مجازی کار میکنند، بستهبندی تمام سیستمعامل و کدها با همدیگر است. سیستمعامل های روی ماشینهای مجازی بصورت یک سرور جدا دیده میشوند، اما در حقیقت آنها یک سرور را با تعدادی از ماشینهای مجازی دیگر شریک شده اند. هرکدام از آنها سیستم عامل خود را اجرا میکنند و درمورد همدیگر چیزی نمیدانند. به هرصورت همهی آنها وابسته به سیستم عامل مقصدند که اجازه میدهد هرکدام ازین ماشینهای مجازی به این اندیشه باشند که مهمترین قسمت دنیا هستند. اما خب مشکلش کجاست؟ سیستمعاملهای مجازی میهمان، اساسا روی سرورهای شبیهسازی شده اجرا میشوند و این یک سربار بزرگ ایجاد میکند و همهچیز به نسبتی کند میشود. ( اما با اینحال میتوانید تعداد زیادی از انواع سیستمعامل های موجود را روی یک سرور اجرا کرد.)
در بحث جابجایی کانتینرها، ماشینهای مجازی چیزی است شبیه به داشتن یک کانتینر بزرگ با تعداد زیادی استخر کوچک که تمام ویژگیهای خاص کانتینرهای کوچک با هم منتقل میشود.
کانتینرها بسیار متفاوت از ماشینهای مجازی عمل میکنند. چون آنها تنها به نرمافزار، کتابخانهها، فریمورکها و این قبیل چیزها وابسته هستند و شما میتوانید تعداد زیادی از آنها را روی یک سیستمعامل میزبان اجرا کنید. تنها سیستمعامل نصب شده روی سرور، سیستم عامل اصلی است و کانتینرها مستقیما با آن صحبت میکنند. به این شیوه، کانتینرها کوچک و سربار آنها بسیار کم میشود.
ماشینهای مجازی از "هایپروایزرها" به عنوان یک لایه بین کامپیوترهای مهمان و سیستم عامل اصلی استفاده میکنند. برای کانتینرها مفهموم مشابه، کانتینرانجین است که درحال حاضر داکر انجین به محبوبترین آنها بدل شده است.
کانتینرها مدتهاست که یک ویژگی روی هستهی لینوکس هستند اما استفاده از آن سخت بود. داکر با هدف ساده ساختن استفاده از کانتینرها و استفاده ساده توسط توسعه دهندگان به میدان آمد.
کانتینرها کار را برای توسعه دهندگان تا آن حد ساده کرده که توسعهدهندگان بدانند بدون اینکه مهم باشد کجا قرار است نرمافزارشان پیاده شود، قادر به اجرا خواهد بود. در کانتینرها، همچنین مفهوم میکروسرویسها را پیاده کردند. یعنی بجای داشتن یک نرم افزار مونولیتیک بزرگ، در نگاه میکروسرویسی نرم افزارها، به تعدادی قسمت کوچکتر که میتوانند با همدیگر ارتباط برقرار کنند، قسمت میشوند. این بدان معنی است که تیمهای مختلف میتوانند به سادگی روی بخشهای مختلف نرمافزارها کار کنند در عین اینکه نیاز نیست تغییرات بزرگی در نحوهی کارکرد نرم افزارهایشان برای ارتباط با دیگر نرم افزارها به وجود آورند و نرم افزارها میتوانند بصورت مستقل از آنها به کار خود ادامه دهند. این روش میتواند توسعه نرم افزارها را سریعتر و تست برای یافتن خطاهای احتمالی را آسانتر کند.
برای مدیریت تمام این کانتینرها، شما به بستههای نرم افزاری دیگری مانند کوبرنتیس ( که توسط گوگل توسعه داده شده) نیاز دارید که کمک میکند کانتینرها روی ماشینهای مختلف پیاده سازی و اجرا شوند، مطمئن باشید که آنها درحال اجرا هستند و کمک کند کانتینرهای بیشتری را به راحتی وارد چرخه کنید وقتی که نیاز دارید آنها را افزایش دهید و اگر نیاز دارید که کانتینرها درمورد همدیگر بدانند، پس همچنان به پیاده سازی یک شبکهی مجازی نیاز پیدا میکنید که میتوانید اینکار را با اتصال آدرس IP مجزا به هر کانتینر انجام دهید.
کانتینرها میتوانند همهی انواع نرمافزارها را اجرا کنند، اما از آنجا که آنها بسیار با ماشینهای مجازی متفاوتند، تعداد زیادی از نرم افزارهای قدیمی که در شرکتهای بزرگ نرم افزاری در حال اجراست به این مدل تبدیل نشدهاند. ماشین های مجازی میتوانند به شما کمک کنند که نرم افزارهای قدیمی را روی سرویسهای ابری همچون AWS یا مایکروسافت آژر منتقل کنید، ولی با اینحال حتی با وجود مزایای بسیار زیاد کانتینرها، ماشینهای مجازی به این زودی از رده خارج نمیشوند.
منبع : techcrunch
من دو سالی هست برای کارهام از vagrant استفاده میکنم
استفاده از vagrant مزایای زیادی برام داره و توی workflow خیلی کمک میکنه
اما با docker چند روزی که سر درگم شدم! البته من برای توسعه برنامه های php با mysql و gulp میخوام از docker استفاده کنم که به نظرم زیاد برای این کار مناسب نیست.
به شخصه vagrant رو ترجیح دادم