با توجه به پیشرفت در حوزه IT و طراحی و توسعه نرم افزارها، استفاده از معماری مایکروسرویس در توسعه نرم افزار اهمیت زیادی پیدا کرده است. با توجه به مایکروسرویسی شدن نرم افزارها به منظور بالاتر رفتن performance و اضافه شدنهای قابلیتهای جدید، ابزارهای مختلف در حوزه Devops پدید آمدند که فرآیند Deploy کردن نرم افزارهای مایکروسرویسی را به شدت تحت تاثیر قراردادند. ابزارهای توسعه داده شده حوزه Devops امکانات ویژهای در فرایند Deploy نرم افزارهای مایکروسرویسی به وجود آورند. داکر یکی از ابزارهای محبوب Devops است که پروسه Deploy نرم افزارهای مایکرو سرویسی را به همراه امکانات زیادی ساده کرده است.
چرا داکر
توسعه دهندگان برنامههای مایکروسرویسی imageهای توسعه داده شده خود را میتوانند به کمک ابزارهای Devops انتشار و Deploy کنند. توسعه دهنگان برای Deploy کردن به یک container run time مناسب احتیاج دارند. Container run timeها ابزارهایی هستند که imageهای توسعه دهنگان به کمک این ابزارها به صورت کانتینری Deploy میشوند. داکر یکی از container run timeهای مهم و محبوب است و کمتر توسعه دهنگانی هستند که با داکر آشنا نباشند. یکی از قابلیتهای مهم داکر استفاده در سرویس PaaS است. در هسته و مرکز اصلی سرویسهای توسعه داده شده PaaS داکر نقش مهمیرا ایفا میکند.
معماری داکر
قبل از به وجود آمدن داکر ابزارهای container run time مانند LXC با ایرادات زیادی وجود داشتند و با توجه به ایرادات و باگهایی که وجود داشت توسعه دهنگان داکر تصمیم به بهبود وضعیت LXC گرفتند. توسعه دهندگان داکر ابزار LXC را customize کردند و داکر متولد شد. برخی از باگها و ایرادات LXC در آن رفع شد. با برطرف شدن ایرادات و افزودن امکانات جدیدی که به LXC در داکر اضافه شد، داکر مورد توجه قرار گرفت. با گذر زمان و توسعه ای که در داکر اعمال شد، LXC از معماری آن حذف شد و داکر نیز با توجه به معماری مایکرو سرویسی توسعه داده شد. یکی از ویژگیهای داکر OS-level virtualization بودن آن است.
داکر imageهای مایکروسرویسی را با کمک هسته لینوکسهاست خود Deploy میکند و مجازی سازی که داکر از آن بهره مند میشود به صورت OS LEVEL است. به عبارتی دیگر داکر همانند مجازی سازهایی همچون ESXI نیست که به ازای هر سرویس، ماشین مجبور به ایجاد ماشین مجازی باشیم و هر ماشین مجازی سیستم عاملی داشته باشد و نهایتا در هر سیستم عاملی سرویسیهایی راه اندازی شوند. داکر برای مجازی سازی و یا Deploy کردن imageها از سیستم عامل هاست خود (سیستم عامل سروری که روی آن داکر نصب شده است) استفاده میکند و با توجه به اینکه در imageهای داکری هسته سیستم عامل وجود ندارند همین عامل کمک به سبک شدن imageها کرده است. در ادامه به معرفی برخی از componentهای مهم داکر میپردازیم.
Docker client
درخواستهای داکر با کمک Docker Client به اجزای دیگر منتقل و اجرا میشود. Docker client همان محیط و ابزار کامندی داکر محسوب میشود که به کمک آن میتوان نرم افزارها و سرویسهای مختلف را Deploy کرد. با کمک ابزار کامندی داکر که Docker client است میتوان imageهای مختلفی دانلود و حتی لاگ گیری کرد. یکی از دلایل محبوبیتهای داکر محیط کامندی ساده داکر است. به کمک آن با امکاناتی که داکر مهیا کرده است تقریبا تمام کارها و نیازهای توسعه دهنگان و مهندسین Devops را رفع کرده است.
Docker daemon
Daemon داکر وظیفه life cycle مربوط به containerها را بر عهده دارد. از برخی وظایف مهم این component میتوان به موارد زیر اشاره کرد.
Image management
مدیریت مربوط به imageهای داکری بر عهده Daemon داکر است.
Image build
فرایند ساخت imageهای داکری نیز با مدیریت Daemon داکر انجام میپذیرد که یکی از روشهای ساخت imageهای داکری با کمک docker fileها محقق میشود.
Rest API
درخواستها ازdocker client به صورت rest API به سمت Daemon داکر ارسال میشود و Daemon داکر با توجه به end point API که دارد درخواست را دریافت و مدیریت میکند.
Core networking
موارد مربوط به نتورک کانتینرهای داکری بر عهده Daemon داکر است.
Orchestration
یکی از امکانات خوب داکر در بحث orchestration است که امکانات کلاسترینگ در داکر به کمک آن مهیا میشود. برای کلاسترینگ در داکرdocker swarm این امکان را مهیا میکند که همه این موارد تحت مدیریت daemon داکر انجام میپذیرد. علاوه برdocker swarm اکثر محصولات مربوط به orchestratorها که مهمترین آنها kubernetes هست از داکر بهره مند شده است و با توجه به معماری داکر و تیم توسعه kubernetes مشکلاتی در ورژنهای آینده kubernetes در استفاده از داکر به وجود خواهد آمد و با توجه به اعلام تیم توسعه kubernetes از ورژن 1.22 دیگر داکر در کوبرنتیز ساپورت نخواهد شد. مهمترین دلیل این موضوع با توجه به اعلام تیم kubernetes مشکلات یکی از componentهای داکر به نام shim است. درعمل پیشنهاد تیم کوبرنتیز به استفاده از CRI-O و ContainerD بوده است و نکته جالب آنکه ContainerD یکی از اجزاء مورد استفاده در داکر است، همچنین لازم به ذکر است که حتی ابزارهای مدیریتی orchestrationها مانند openshift که قابلیت ارائه سرویسهای PaaS را مهیا میکنند نیز بر پایه داکر و کوبرنتیز توسعه داده شده اند و حال باید منتظر باشیم در ورژن 1.22 کوبرنتیز و نهایتا در ورژنهای آینده openshift که نقش مهمی برای سرویسهای PaaS ارائه میکنند چه اتفاقاتی رخ خواهد داد. بدون شک داکر چه در سرویسهای PaaS و چه در orchestrationها تاثیر به سازایی داشته داشت و باید منتظر باشیم و ببینیم معماری آینده این ابزارها آیا تغییر خواهند کرد یا داکر راه حلی برای SHIM ارائه خواهد کرد!
containerD
یکی از componentهای مهم داکر است که درخواستهای ساخت و ایجاد کانتیر را دریافت و handle میکند.
containerD به خودی خود نیز یک container run time است که میتوان به صورت مجزا آن را نصب و از آن بهره مند شد. داکر در معماری خود نیز از containerD به عنوان یک component مهم استفاده کرده است.
and shim runc
component مربوطه به RUNC وظیفه ایجاد کانتینرها را بر عهده دارد. کانتینترها توسط runc ایجاد و سپس بعد از ساخته شدن کانتینر runc از بین میرود و component به نام shim و old یا parent آن کانتینر خواهد شد.
Live restore
یکی از قابلیتهای جالب و پر کاربرد داکر daemonless container بودن آن است، این قابلیت کمک به پایداری containerهای داکری میکند، چرا که در زمان بروز هرگونه مشکلی برای daemon داکر و حتی stop شدن daemon داکر، هیچ مشکلی برای containerهای up به وجود نخواهد آمد و کانتینرها سرویس خواهند داد. برای فعال شدن چنین قابلیتی باید live restore را در تنظیمات داکر فعال کرد.
با اضافه کردن تنظیمات زیر در کانفیگ فایل مربوط به daemon داکر و سپس با reload کردن آن میتوان از این قابلیت بهره مند شد.
نتیجه
داکر یکی از ابزارهای مهم حوزه Devops هست که با توجه به امکانات و سادگی کار کردن با آن میتوان برنامههای مایکروسرویسی و حتی سرویسهای مختلفی با آن Deploy کرد. با docker swarm میتوان دهها نود و یا سرور داکری را کلاستر کرد و از مزایای کلاسترینگ نیز بهره مند شد.
داکر در ارائه سرویسهای PaaS به کاربران نقش مهمیارائه میکند و ابزارهای مدیریتی همچون rancher و… از داکر در محصول ارائه شده خود استفاده کردهاند.