مقدمه

کانتینرایزیشن به فرآیند توزیع و پیاده سازی برنامه‌ها به یک روش قابل حمل و قابل پیش‌بینی گفته می‌شود. این کار با بسته بندی برنامه‌ها و وابستگی‌های آنها در یک بسته‌ی استاندارد، ایزوله و سبک به نام کانتینر انجام می‌شود. سازمان‌های امروز علاقه مندند برنامه ها و سرویس‌های طراحی شده توسط آن‌ها، به سادگی روی سیستم‌های توزیع شده پیاده شوند، مقیاس سیستم به سادگی افزایش یابد و برنامه‌ها در صورت بروز خطا روی سرورها، همچنان به کار خود ادامه دهند. داکر یک پلتفورم برای عملیات کانتینرایزیشن است که با هدف سادگی و استاندارد بودن شیوه‌ی   پیاده‌سازی ها در محیط‌های مختلف طراحی و ساخته شده است و امروز، نقش زیادی در همه‌گیر شدن مفاهیم کانتینر و معماری سرویس گرا  و ترغیب جامعه به استفاده  از این روش توسعه داشته است.

از سری راهنماهایی برای کار با داکر

داکر و کانتینرایزیشن

درحال حاضر داکر معروفترین نرم افزار مورد استفاده برای کانتینرایزیشن است. نرم افزارهای دیگری هم در این زمینه ساخته شده‌اند، اما سادگی ساخت و مدیریت کانتینرها در داکر و استفاده از داکر در بسیاری از نرم افزارهای متن باز، آن را به محبوبترین ابزار در این حوزه بدل کرده است.


در تصویر بالا  میتوانید رابطه‌ی کانتینرها با سیستم میزبان ( Host) را ببینید. کانتینرها، برنامه‌های مختلف را درون خود ایزوله میکنند و از منابع سیستم عامل استفاده میکنند و داکر عمل مدیریت، ساخت و کنترل آنها را بر عهده دارد. در نمای بازتر در سمت راست، میتوانیم ببینیم که کانتینرها بصورت لایه‌ای، روی چند کانتینر به اشتراک گذاشته شده هم میتوانند ساخته شوند و به این شیوه استفاده از منابع بسیار کاهش می یابد.

مهمترین مزایای داکر :
  • بهره‌برداری بهینه از منایع : بجای مجازی سازی یک سیستم عامل کامل، کانتینرها در تمامی مراحل پردازش، از سیستم عامل میزبان استفاده می‌کنند.
  • قابلیت انتقال : تمام وابستگی‌های یک برنامه‌ی کانتینرایز شده، درون کانتینر آن قرار میگیرد و میتوان آن کانتینر را در هر میزبانی که روی خود داکر دارد، اجرا کرد.
  • پیشبینی‌پذیری : با استفاده از داکر، برای میزبان مهم نیست که چه کانتینرهایی درون آن اجرا میشود و همچنین برای کانتینر هم اهمیتی ندارد که روی چه میزبانی درحال اجراست. واسط استانداردی برای روابط وجود دارد و روابط قابل پیش بینی هستند و در هر میزبانی یکسان عمل می‌کنند.
معمولا وقتی یک برنامه یا سرویس برای استفاده از داکر طراحی می‌شود، شکستن فانکشنالیتی‌های مختلف به برنامه‌ها و سرویس‌های کوچکتر، هر کدام درون یک کانتینر و ساختن کل سیستم از کانتینرهای مجزا یک امر طبیعی است که به این شیوه معماری سرویس‌گرا میگویند. این قابلیت به شما این امکان را می‌دهد که کامپوننت‌های مختلف سیستم را به راحتی آپدیت کنید، یا مقیاس آن را در آینده تغییر دهید. این قابلیت یکی از ویژگی‌های مهمیست که افراد را علاقه مند به توسعه‌ی برنامه‌هایشان روی داکر کرده است. 

سرویس دیسکاوری و ذخیره ی عمومی کانفیگ‌ها 

سرویس دیسکاوری، بطور کلی یکی از استراتژی‌هاییست که برای پیاده‌سازی قابلیت مقیاس پذیری و انعطاف در فرآیند پیاده‌سازی کانتینرها مورد استفاده قرار میگیرد. کار سرویس دیسکاوری اینست که شرایطی را فرآهم آورد که کانتینرها، بدون دخالت مدیران سیستم همواره به هم معرفی شوند و همدیگر را پیدا کنند و بشناسند. کانتینرها با این ابزارها میتوانند اطلاعات ارتباطی کانتینرهایی که میخواهند از آن‌ها استفاده کنند را بیابند و همچنین میتوانند خودشان را در سیستم ثبت کنند که دیگر کانتینرها بدانند که آنها در دسترسند. این ابزارها همچنین به عنوان ابزار ذخیره‌ی عمومی کانفیگ هایی که تنظیمات کلی مورد نظر شما را برای همه‌ی نرم افزارها در زیرساخت شما هستند را فراهم میکنند.
در تصویر بالا، میتوانید چگونگی فرآیند درخواست یک کانکشن از طرف یک کانتینر و رجیستر کردن آدرس توسط برنامه‌ی سرویس دیسکاوری و ارسال تنظیم به برنامه ی درخواست دهنده را ببینید. یک کانتینر درخواست میکند، بقیه میتوانند از سیستم سرویس دیسکاوری اطلاعات کانکشن را پیدا کنند.
ابزارهای سرویس دیسکاوری معمولا به عنوان یک سیستم ذخیره‌سازی key-value  که توزیع شده هستند، ساخته میشوند. معمولا این سیستم ذخیره سازی یک API روی HTTP برای درخواست ذخیره و دریافت اطلاعات فرآهم می‌آورد. بعضی از این ابزارها امکانات بیشتر همچون رمزگزاری محتوا و مکانیزم‌های کنترل دسترسی را همراه خود فرآهم میکنند. سیستم‌های ذخیره سازی توزیع شده، اساس مدیریت میزبان‌های کلاستر شده‌ی داکر، به علاوه ابزار مدیریت کانفیگ‌ها برای مدیریت کانتینرهای جدیدی که خودشان جنریت میشوند، هستند.

 برخی از مسئولیت‌های ذخیره‌سازهای سرویس دیسکاوری : 
  • به برنامه‌ها، دسترسی لازم را برای دریافت اطلاعات کانتینرهایی که به آنها وابسته‌اند را بدهد.
  • به برنامه ها اجازه‌ی رجیستر کردن اطلاعات خود برای دستیابی توسط بقیه‌ی برنامه ها را بدهد.
  • یک محل عمومی برای ذخیره‌ی کانفیگ‌ها فرآهم کنند.
  • اطلاعات مورد نیاز ابزارهای مدیریت کلاستر در مورد کلاسترها و اعضایشان را بتوان در آن ذخیره کرد.
معروفترین ابزارهای سرویس دیسکاوری :
  • etcd : سرویس دیسکاوری \ ذخیره‌ی عمومی کانفیگ ها
  • consul : سرویس دیسکاوری \ ذخیره‌ی عمومی کانفیگ ها
  • zookeeper : سرویس دیسکاوری \ ذخیره‌ی عمومی کانفیگ ها
  • crypt : ابزاری برای رمزگذاری محتوای etcd
  • confd : رصد سیستم‌های ذخیره ساز key-vlaue برای تغییرات و پیکربندی مجدد سرویس‌ها با اطلاعات جدید

ابزارهای شبکه 

کانتینرایزیشن برنامه ها در معماری سرویس گرا به شما اجازه میدهد که آنها را به قسمت‌های کوچکتر تقسیم و به کامپوننت‌های جدا تبدیل کنید. هرچند که اینکار مدیریت مقیاس پذیری برنامه‌ها را آسانتر میکند، اما نیاز به دقت و توجه بیشتری برای پایداری ارتباطات شبکه بین کامپوننت ها برای یافتن یکدیگر دارد. داکر بصورت درونی امکانات پایه‌ی شبکه را که برای ارتباطات کانتینر-به-کانتینر و کانتینر-به-میزبان نیاز است، فرآهم میکند.

امکانات درونی داکر برای شبکه، دو مکانیزم برای اتصال کانتینرها به هم فرآهم میکند. اولین روش باز کردن پورتهای کانتینر و آدرس دهی به میزبان برای مسیریابی بیرونی است. میتوانید  پورت میزبان را برای آدرس دهی انتخاب کنید یا  به داکر اجازه استفاده از پورتهای باز را بصورت تصادفی بدهید. این یک روش عمومی برای فرآهم کردن دسترسی به یک کانتینری که برای مقاصد مختلف کار میکند، است.

روش دیگر، برقراری ارتباط بین کانتینرها با داکر لینکز است. یک پیوند کانتینری، اطلاعات مربوط به کانکشن همتای خود را دریافت میکند و اجاز‌ه‌ی ارتباط به آن را، اگر تنظیم شده باشد میدهد. این روش اجازه ی ارتباط بین کانتینرهای روی یک میزبان را بدون دانستن شماره پورت یا آدرس سرویس، میدهد. 

این بخش از ارتباط شبکه برای سرویس‌های روی یک میزبان بسیار مناسب است. با اینحال، اکوسیستم داکر درحال توسعه‌ی پروژه‌های فراوانی برای توسعه‌ی قابلیت‌های در دسترس نتورکینگ، برای اپراتورها و توسعه دهندگان است. برخی قابلیت‌ها  در زمینه ی شبکه که از طریق نصب ابزارهای اضافی روی داکر قابل استفاده اند :

  • پوشش شبکه برای ساده سازی، یکپارچه سازی و متحدکردن فضای آدرس روی میزبان‌های مختلف
  • ایجاد شبکه‌ی خصوصی مجازی ( VPN ) بهبودیافته برای ارتباط امن بین کامپوننت‌های مختلف.
  • اختصاص ساب‌نت بر اساس میزبان یا بر اساس برنامه.
  • پایداری اترنت مجازی برای ارتباطات.
  • تنظیم مک آدرس، گیت‌وی و ... برای هر کانتینر.

چند پروژه برای بهبود قابلیت شبکه در داکر :
  • flannel  
  • weave 
  • pipework 


اسکجولینگ، مدیریت کلاسترها و ارکستریشن

یکی دیگر از ابزارهای مورد نیاز برای مدیریت کانتینرهای کلاستر شده، اسکجولر ها هستند. اسکجولرها مسئولیت شروع کانتینرها روی هاست‌های در دسترس را بر عهده دارند.

تصویر بالا یک تصمیم گیری ساده برای اسکجولینگ را نشان می‌دهد. درخواست روی یک API یا یک ابزار مدیریت گرفته میشود. ازنجا به بعد، اسکجولر به بررسی شروط و میزبان‌های در دسترس میپردازد. در این مثال، اسکجولر اطلاعات مربوط به ظرفیت کانتینر را از سرویس دیسکاوری دریافت نموده و میتواند برنامه را روی میزبانی که کمترین ترافیک و شلوغی را دارد، اجرا کند. 

عملیات انتخاب میزبان مناسب یکی از وظایف اسکجولر است. معمولا، اسکجولر توابعی برای اتوماتیک کردن این فرآیند دارد که به مدیران سیستم هم امکان تعریف محدودیت هایی را میدهد. برخی ازین محدودیت ها ممکن است موارد زیر باشد :
  • راه اندازی یک کانتینر، روی میزبانی که یک کانتینر دیگر هم روی آن است
  • اطمینان از قرار نگرفتن یک کانتینر روی میزبانی که کانتینر دیگر روی آن قرار دارد
  • قرار دادن کانتینر روی میزبانی که برچسب یا متا دیتای خاصی روی خود دارد
  • قرار دادن کانتینر روی خلوت ترین میزبان
  • اجرای کانتینر روی تمامی میزبان های درون کلاستر
به این دلیل که اسکجولر باید با تمام میزبان‌های حاضر در گروه در ارتباط باشد، نیاز است  به ابزارهای مدیریت کلاسترها دسترسی داشته باشد. این کار به اسکجولر امکان دریافت اطلاعات درباره ی اعضا و انجام عملیات های مدیریت روی کلاسترها را میدهد. ارکستریشن ، به ترکیب عملیات کانتینر اسکجولینگ و مدیریت میزبانها گفته میشود.

برخی پروژه‌های معروف در زمینه‌ی اسکجولینگ و مدیریت fleet :
  • fleet : اسکجولر و ابزار مدیریت کلاسترها
  • marathon : اسکجولر و ابزار مدیریت سرویس ها
  • swarm : اسکجولر و ابزار مدیریت سرویس ها
  • mesos : سرویس تجرید میزبان برای تلفیق منابع میزبان برای اسکجولر
  • kubernetes : اسکجولر پیشرفته و ابزاری قدرتمند برای مدیریت گروههای کانتینر
  • compose : ابزار کانتینر ارکستریشن برای ساخت گروه‌های کانتینر

جمع بندی 

اگر متن را کامل خوانده باشید، انتظار میرود با بیشتر ابزارهایی که در اکوسیستم داکر مورد استفاده قرار میگیرد، آشنایی مختصری یافته باشید. داکر و تمام ابزارهایی که از آن پشتیبانی میکنند، یک اکوسیستم قدرتمند برای مدیریت، طراحی و پیاده سازی استراتژی‌هایی برای پیاده سازی مقیاس پذیری زیاد در نرم افزارها را ممکن میسازند. با درک درست و استفاده از توانایی های پروژه‌های مختلف، میتوانید پیاده سازی برنامه‌های پیچیده، برای مدیریت عملیات های مختلف، ساده و منعطف کنید.