بذارید این شکلی شروع کنم، یه سری چیزای به درد بخور توی کرنل لینوکس بود که استفاده ازشون برای دولوپرا مرسوم و آسون نبود و یه سری سیس ادمین که بیشتر سمت کارای سکیوریتی و امنیت بودن از اینا استفاده میکردن. البته خیلی کم. داکر اومد استفاده از اونا رو راحت کرد 🙂 اینجوری است که تبدیل شد به یه ابزاری که دیگه الان اسمشو تو همهی استکها میشنوید و اصلا دیگه همهجا هست.
سعی میکنم بعد از توضیح هرکدوم از مفاهیم لیستی از کامندهای اون مفهوم رو به همراه یه توضیح مختصر با فونت کوچکتر بذارم برای درک بهتر مفهوم و اینکه بتونید سریع دستبه کار بشید. اما یادتون باشه که درک مفاهیم مهم تر هست و کامند رو با سرچ میتونید پیدا کنید.
خب یه مروری کنیم پستهای قبلی رو:
توصیه میکنم که حتما این پستها رو هم مطالعه کنید. بریم که ادامه بدیم.
داکر راه حلی هست برای مدیریت کردن کانتینر هامون. پلتفرمی که به دولوپرها و سیس ادمینها این امکان رو میده که اپلیکیشن هاشون رو راحت بیلد، شیپ و ران کنن که شعار داکر هم همینه : Build , Ship , Run Any App Anywhere
داکر با زبان گولنگ توسعه داده شده و به شدت اینترفیس خیلی خوب و سادهای برای کار کردن داره. به صورت کلی طوری ارائه شده که میشه به راحتی باهاش ارتباط برقرار کرد و کار کرد.
خوبه که یه بررسی کنیم چرا داکر خوبه و چی شد که این طوری شد.
داکر یه نسخه انترپرایز (Enterprise Edition) داره و یه نسخه کامیونیتی (Community Edition). توی نسخه رایگان که نسخه کامیونیتی هست ما ساپورت خود داکر رو نداریم و یه سری پشتیبانی ها و امکانات خاص رو که داکر ارائه میده اینجا نداریم در عوض ساپورت کامیونیتی توسعه دهنده های آزاد رو داریم. نسخهی کامرشیال داکر سال ۲۰۱۶ ارائه شد و میتونیم بگیم از همون سال هم داکر خیلی استیبل و پایدارتر هم شده و میشه گفت که میتونیم سرویسهامون رو با خیال راحت روی این زیرساخت بیاریم بالا و ازش استفاده کنیم.
یه نکتهی دیگه اینکه سال ۲۰۱۹ هم کمپانی معظم میرانتیس جناب داکر رو خرید و در اختیار گرفت. تغییر خاصی از اون تاریخ نکرده و هنوز میتونیم به خوبی ازش استفاده کنیم.
جالبه بدونید که تو سال ۲۰۰۰ FreeBSD Jails اومد توی chroot یونیکس برای ایزوله کردن پروسهها. بعدش سال ۲۰۰۱ توی Linux-VServer ایزوله کردن پورتهای کرنل اومد اما به کامپایل مجدد نیاز داشت. سال ۲۰۰۴ Solaris Zones کانسپت اسنپ شات رو آورد و بعدش CGroup رو گوگل سال ۲۰۰۶ ارائه کرد و Namespace رو سال ۲۰۰۸ ردهت ارائه کرد و از همون سال لینوکس کانتینرها شروع شدن و IBM ابزاری رو برای کار با نیم اسپیس و سی گروپ به نام LXC ارائه کرد و سال ۲۰۱۳ داکر اومد. که سالومون هیکس داکر رو به عنوان یه پروژه داخلی توی dotCloud استارت زد و همون سال داکر اوپن سورس شد تا اینکه سال ۲۰۱۶ داکر اولین نسخه تجاری خودش رو ارائه کرد.
مفهوم کانتینر مجزا از داکر مورد نیازه که بررسی کنیم و بشناسیمش و چون خیلی ازش استفاده میشه برای همین مستقل بهش میپردازیم. سعی میکنم تعریف های مختلفی که از کانتینر شده رو اینجا براتون بیارم که بتونید یه درک خوبی بعد خوندشون از مفهوم کانتینر پیدا کنید چون به نظرم مهمه که این مفهوم رو خوب بشناسید. یکی از مفاهیم اصلی تو کوبرنتیز هم همین کانتینر هست که باید خوب و عمیق اون رو شناخته باشیم. بریم بیشتر باهاش آشنا بشیم.
ردهت میگه: کانتینرها تکنولوژی ای هستن که به ما امکان پکیجینگ و ایزولیشین اپلیکیشن مون به همراه انوایرومنت ران تایمش و تمام فایلهایی که برای ران شدنش لازمه رو میدن. به خاطر ویژگی هایی که دارن کانتینر ها به ما امکان اینو میدن که کانفلیکت های بین دولوپمنت و آپریشن مون رو کم کنیم.
داکر میگه: کانتینر یه محیط ایزوله شده هست برای کد شما. به این معنی که اگه از کانتینر در مورد سیستم عامل شما یا فایل هاتون سوالی بپرسیم، میگه اطلاعی ندارم! از دید خودش داخل کانتینر تنها هست.
دیجیتال اوشن میگه: کانتینر یک فضای کاربری مینیمال و ایزوله است که در سطح سیستم عامل اجرا می شود و منابع سیستم را با سایر کانتینرها به اشتراک می گذارد. کانتینرها به گونه ای طراحی شده اند که یک محیط اجرا قابل حمل و پایدار برای برنامه ها فراهم کنند، در حالی که منابع کمتری را نسبت به سرور یا ماشین مجازی سنتی مصرف می کنند. کانتینرها امکان استفاده بهتر از منابع محاسباتی در برنامه های کاربردی چند جزئی، توزیع شده و سیستم های high-available را فراهم می کنند.
جناب IBM میگه: کانتینرها واحدهای نرم افزاری قابل اجرایی هستند که درونشون کد اپلیکیشن ما به همراه کتابخانه ها و دیپندنسی ها پکیج شده، به همین خاطر اون کد میتونه هر جایی ران بشه.
پس یه دید اولیه تو ذهنمون شکل گرفت که کانتینر یه پروسه هست که از بقیه ی پروسه های سیستم عامل ایزوله شده و دسترسی ای به اونا نداره و هم چنین یه قسمتی از منابع در اختیارشه و میتونه از آنها استفاده کنه. حالا در ادامه درکتون عمیق تر میشه.
کانتینر مجازیسازی و ایزولهسازی در سطح سیستم عامل و پروسه هست در حالی که VM مجازی سازی و ایزوله سازی در سطح سخت افزاره. یه جورایی این قیاس مع الفارق هست ولی چون معمولا این مقایسه رو انجام میدن اینجا براتون آوردمش و از چند نظر مختلف بررسیش میکنیم.
از نظر ایزوله سازی و اختصاص منابع: ماشین مجازی قسمتی از سخت افزار لایه پایینش رو از hypervisor ی که داره اونو میسازه میگیره اما کانتینر قسمتی از منابع که سیستم عامل لایه پایینش در اختیارش میگذاره رو میگیره.
از نظر حجمی که اشغال میکنند: ماشین های مجازی در اردر چند گیگ هستند در حالیکه کانتینر ها در اردر چند مگ، یعنی هزار برابر کوچیکتر 🙂 البته مثالهای نقض این موضوع هم وجود داره اما به صورت کلی این شکلی هست که حجمها تو کانتینرها خیلی کمتر از ماشینهای مجازی هستند.
از نظر سرعت بوت شدن: ماشین های مجازی در اردر چند ده ثانیه یا دقیقه هستن در حالیکه کانتینر ها در اردر میلی ثانیه هستن یه جورایی ده هزار برابر سریعتر 🙂. سرعت بوت شدن سرویسها و بالا آمدن آنها تو کانتینرها خیلی خیلی کمتر هست. ببینید تو ماشین مجازی باید سیستم عامل بوت بشه بعد از بوت باید سرویسهای سیستمی بیاد بالا و بعدش هم تازه اپ ما بالا بیاد اما اینجا وقتی کانتینر بالا میاد مستقیم سرویس ما بالا میاد و خیلی خیلی سریعتر هست. هر ماشین مجازی یک نسخهی کامل از سیستم عامل را دارد در حالیکه کانتینرها سیستم عامل رو با هم به اشتراک میذارن، در واقع کرنل سیستم عامل رو با هم شیر میکنن.
البته این مقایسه دلیل نمیشه که بگیم دیگه VM هارو بندازیم دور و همه جا باید از کانتینر استفاده کنیم، اینطور نیست و هر کدومش یوز کیس خودشو داره و بسته به نیاز شما و کاری که میخواید انجام بدید باید بررسی کنیم که استفاده از کدوم مورد بهتر هست.
در ادامه مسیر توی داکر عمیق تر میشیم و باهاش بیشتر آشنا میشیم.