تا به حال در مورد موتورهای کانتینری یا همان Container Engines چیزی شنیدهاید؟ در این مقاله قصد داریم تا به مفاهیم مرتبط با Container engine ها نظیر تصاویر OCI، زمان اجرای کانتینر و معرفی چند مورد از بهترین Container engine های روز دنیا بپردازیم، با ما همراه باشید.
Container Engine چیست؟
Container engineها قادر هستند تا بر روی یک Kernel یکسان از سیستم عامل، چندین نمونهی ایزوله شده (کانتینر) را اجرا کنند. کانتینرها مجازیسازی را در سطح سیستم عامل انجام میدهند و یک محیط قابل کنترل و با مدیریت آسان برای اجرای برنامهها و متعلقات آنها فراهم میکنند. ایزوله کردن کانتینر همچنین میتواند امنیت شما را با تفکیک برنامهها، اپلیکیشنها و کد کردن سایر اپلیکیشنهای در حال اجرا بر روی همان هاست فیزیکی، تضمین کند.
اکثر Container engineهای مدرن از فرمت تصویر OCI (Open Container Initiative) استفاده میکنند. تصاویر کانتینر OCI بیانگر کانتینر و نرمافزاری است که باید درون آن اجرا شود و امکان ایجاد کانتینرهای جدید را نیز فراهم میکند. کلیدیترین مؤلفه در خصوص Container engine، زمان اجرای آن است که با Kernel برای فرآیند کانتینرسازی ارتباط برقرار میکند و سطوح دسترسی و امنیت را برای اجرای کانتینرها تنظیم میکند.
نحوه عملکرد Container Engine ها به چه صورت است؟
در گذشته، موتورهای کانتینری فرمت مخصوص خود را برای تصاویر کانتینری داشتند. (برای مثال موتورهای کانتینری Docker ،LXD وRKT). برخی فرمتهای تصویر شامل یک لایه واحد بودند، در حالی که برخی دیگر چندین لایه داشتند. با این حال، تقریباً تمام ابزارها و engineهای اصلی امروزه فرمت OCI را پذیرفتهاند که متادیتاها و لایههای هر تصویر کانتینر را مشخص میکند. این فرمت، تصاویر کانتینر را به صورت یک فایل tar برای هر لایه و یک فایل manifest.json که حاوی متادیتا است، تعریف میکند.
OCI بر اساس فرمت تصویر Docker V2 ساخته شده و یک اکوسیستم گسترده و یکپارچه از Container Engineها، سرویس دهندگان ابری و ابزارهای مختلف دارد. چندین Container Engine نظیر LXD ،RKT،Docker و CRI-O وجود دارند. علاوه بر این، رایج است که ارائهدهندگان ابری، پلتفرمهای کانتینری و ارائه دهندگان PaaS، موتور کانتینری مخصوص خود مجهز به تصاویر کانتینری سازگار با OCI را داشته باشند.
اگر بخواهیم عمیقتر به قضیه نگاه کنیم، Container Engineها عموما کانتینرها را اجرا نمیکنند، بلکه به runtimeهای سازگار با OCI (نظیر runc) وابسته هستند. موتورهای کانتینری عموما موارد زیر را عهده دار هستند:
- پردازش ورودیهای کاربر
- ورودیها را از طریق APIها مدیریت میکند. (معمولا Orchestrator API)
- تصویر کانتینر را از یک سرور رجیستری دریافت میکند.
- از درایور گرافیک برای decompress و توسعه تصاویر کانتینر روی دیسک استفاده میکند.
- نقاط اتصال برای کانتینرها را آماده میکند، معمولاً با استفاده از ذخیرهسازی copy-on-write.
- متادیتا را برای ارسال به runtime کانتینر آماده میکند تا کانتینر را به درستی بر اساس پیشفرضهای تصویر کانتینر (مانند ArchX86 و قوانین SECCOM) یا ورودی کاربر که پیشفرضها را لغو میکند (مانند CMD و ENTRYPOINT) راهاندازی کند.
- runtime کانتینر را فراخوانی میکند.
منظور از runtime در Container Engine چیست؟
runtime کانتینر یک مؤلفه low-level پرکاربرد در موتورهای کانتینری است، که برای تست دستی هم میتوان از آن استفاده نمود. مرجع استاندارد پیادهسازی زمان اجرای runc ،OCI runtime است.
به طور معمول، runtime کانتینر به شرح زیر است:
- نقطه اتصال را از Container Engine برداشت میکند. (همچنین میتواند یک دایرکتوری معمولی برای تست باشد).
- متادیتا را از Container Engine برداشت میکند. (همچنین میتوانید به صورت دستی فایل config.json را برای تست ایجاد کنید).
- با kernel برای راه اندازی فرآیند کانتینر سازی ارتباط برقرار میکند. (clone کردن سیستمهای تماس).
- پیکربندی cgroupها
- پیکربندی SELinux
- پیکربندی قوانین AppArmor
7 مورد از بهترین Container Engine های دنیا
Docker، اولین و بهترین Container Engine جهان
سیستم کانتینری Docker مجموعهای کامل از ویژگیها را با گزینههای رایگان و پولی ارائه میدهد که آن را به فناوری پرکاربرد کانتینری تبدیل کرده است. این سیستم به عنوان runtime پیشفرض کانتینر در Kubernetes عمل میکند و مشخصات تصویر، رابط خط فرمان و سرویس ساخت تصویر کانتینری خاص خود را دارد. Docker به شما امکان میدهد تا وضعیت کانتینر را از طریق یک API RESTful کنترل کنید. این سیستم به عنوان یک دیمون روی هر نود اجرا میشود و کلاینت خط فرمان از API برای ساخت، استقرار و نگهداری تصاویر کانتینری استفاده میکند.
سیستم عاملهای قابل پشتیبانی: ویندوز، لینوکس و مک
لایسنس: رایگان و گزینههای پولی
CoreOS rkt
“rkt” که راکت خوانده میشود، یک runtime کانتینر متنباز برای محیطهای تولیدی است که از تصاویر Docker و appc پشتیبانی میکند. rkt در Kubernetes به سادگی قابل استفاده است و ویژگیهای منحصر به فردی مانند پشتیبانی از TPM را ارائه میدهد. با وجود اینکه rkt برای کانتینرهای برنامه بهینه شده است و سازگاری و انتقال پذیری آسان را ارائه میدهد، rkt به اندازه Docker دارای یکپارچگی third-party نیست. از آنجایی که پشتیبانی CNCF در سال 2019 متوقف شد، آینده rkt نامشخص است.
سیستم عاملهای قابل پشتیبانی: لینوکس
لایسنس: Open source
runC
این runtime کانتینر سبک، متنباز و جهانی به شما امکان میدهد تا کانتینرها را از خط فرمان اجرا کنید. runC بر اساس مشخصات OCI است و یک سند استاندارد و قابل خواندن برای عناصر runtime کانتینر، همچون پیادهسازی مبتنی بر کد Docker دارد. runC از رابط کتابخانه libcontainer داکر برای راهاندازی کانتینرها استفاده میکند.
از آنجایی که runC استانداردسازی شده است، به کانتینرها قابلیت پرتابل بودن میدهد تا به یک فروشنده یا فناوری خاص وابسته نباشید.
سیستم عاملهای قابل پشتیبانی: لینوکس
لایسنس: Open source
Containerd
containerd یک دیمون متنباز پشتیبانی شده توسط لینوکس و ویندوز است که رابطی بین container engineها و runtime است. این سیستم مدیریت چرخه عمر کانتینرها را از طریق درخواستهای API آسان میکند، بنابراین نیازی به انجام چندین فراخوانی سیستم که ممکن است بین پلتفرمها متفاوت باشد، ندارید. در نتیجه، API containerd یک لایه انتزاعی اضافه میکند و قابلیت انتقال کانتینر را افزایش میدهد.
سیستم عاملهای قابل پشتیبانی: لینوکس و ویندوز
لایسنس: Open source
CRI-O، بهترین Container Engine برای Red Hat Linux
CRI-O یک پیادهسازی از Kubernetes CRI است و یک جایگزین متنباز و سبک برای Docker و rkt در Kubernetes است. این امکان استفاده از زمانهای اجرای سازگار با OCI برای اجرای پادها را فراهم میکند – در درجه اول از Kata و runc پشتیبانی میکند اما میتوانید هر زمانی که خواستید، runtime سازگار با OCI را وصل کنید.
سیستم عاملهای قابل پشتیبانی: Red Hat Linux
لایسنس: Open source
کانتینرهای ویندوز و Hyper-V
این دو فناوری کانتینری که از ویندوز سرور 2016 به صورت رایگان در دسترس هستند، جایگزینهای کم حجم و سبکی برای ماشینهای مجازی کاملا ویندوزی هستند. کانتینرهای ویندوز انتزاعی را مشابه داکر ارائه میدهند، در حالی که کانتینرهای Hyper-V از مجازیسازی VM استفاده میکنند. هر کانتینر Hyper-V kernel مخصوص خود را دارد و این باعث میشود که آنها نسبت به کانتینرهای معمولی قابلیت پرتابل بیشتری داشته باشند و به شما امکان میدهند برنامههایی را که با سیستم میزبان شما سازگار نیستند، اجرا کنید.
ایزوله کردن بیشتر Hyper-V (از میزبان و سایر محیطها) امنیت بیشتری را تضمین میکند. در مقایسه با کانتینرهایی که از یک kernel مشترک استفاده میکنند، Hyper-V میتواند اثرگذاری زیرساختی بزرگتری داشته باشد.
سیستم عاملهای قابل پشتیبانی: لینوکس و ویندوز
لایسنس: رایگان
LXC
LXC بخشی از پروژه متنباز LinuxContainers.org است و ابزارهای low-level برای مدیریت کانتینرها ارائه میدهد. این تکنولوژی از داکر قدیمیتر است. محیط برنامه LXC مشابه یک ماشین مجازی کامل است و از نظر ایزولاسیون شباهتهایی دارد، اما برخلاف ماشین مجازی، kernel مجزایی ندارد. LXC بر اساس فرآیندهای Unix کار میکند و به همین دلیل دیمن (daemon) مرکزی ندارد و به نظر میرسد، مدیریت کانتینرها توسط برنامههای جداگانه انجام میشود.
سیستم عاملهای قابل پشتیبانی: لینوکس و ویندوز
لایسنس: Open source
سخن آخر
در این مقاله، در خصوص Container Engineها تصاویر OCI، معرفی چند مورد از بهترین Container engineهای روز دنیا و Runtime کانتینر صحبت کردیم، امیدواریم که از این مقاله لذت برده باشید. آداک فناوری مانیا با دارا بودن چندین سابقه درخشان و پرچم داری در عرصه فروش سرور و تجهیزات شبکه، در کنار شما خواهد بود تا بهترین انتخاب را داشته باشید. اگر به دنبال سرور با بهترین قیمت در بازار هستید، از صفحه سرورهای مانیا غافل نشوید.