ما با محدودکردن حق استفاده از اینترنت مخالفیم.
اطلاعات بیشتر

آشنایی با معماری و ساختار داکر(Docker)

آشنایی با معماری و ساختار داکر(Docker)
1400/04/06

Docker یکی از ابزار‌های محبوب Devops است که پروسه Deploy نرم افزار‌های مایکرو سرویسی را به همراه امکانات زیادی ساده کرده است

چرا داکر

با توجه به پیشرفت در حوزه IT و طراحی و توسعه نرم افزار‌ها، استفاده از معماری مایکروسرویس در توسعه نرم افزار اهمیت زیادی پیدا کرده است. با توجه به مایکروسرویسی شدن نرم افزار‌ها به منظور بالاتر رفتن performance و اضافه شدن‌های قابلیت‌های جدید‌، ابزار‌های مختلف در حوزه Devops پدید آمدند که فرآیند Deploy کردن نرم افزار‌های مایکروسرویسی را به شدت تحت تاثیر قراردادند. ابزارهای توسعه داده شده حوزه Devops امکانات ویژه‌ای در فرایند Deploy نرم افزار‌های مایکروسرویسی به وجود آورند. Docker یکی از ابزار‌های محبوب 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  و... از داکر در محصول ارائه شده خود استفاده کرده اند.
 

...
...