کانتینر (container) چیست و چه کاربردی دارد؟

کانتیرهای لینوکسی برنامه های کاربردی نظیر mysql, apache ,php و … را به صورت کاملا امن از سیستم میزبانی که در آن در حال اجرا هستند جدا میکند. یعنی فرض کنید در یک سرور لینوکسی که بر روی آن چند سرویس مانند ftp و webserver و mysql که اینها همه در یک سرور نصب شده اند و در با هم در ارتباط هستند .در این محیط ایزوله نشده عمل یک سرویس ممکن است سرویس دیگهای رو تحت شعاع خودش قرار دهد.
فرض کنید که وب سرور به دلیل وجود حفره امنیتی قابلیت دسترسی به دیتابیس را برای مهاجم فراهم کرده است! این مناسب نمی باشد که هر سرویس بتواند بروی سرویس دیگری تاثیر بگدارد.اینجاست که کانتینرها این مشکل رو رفع می کنند و هر سرویس یا مجموعه از سرویس ها رو در قالب یک سیستم مستقل از بقیه جدا می کنند،به این محیط مستقل اصطلاحا گفته می شود container.
کانتینرها به توسعهدهندهها اجازه می دهند که یک برنامه با تمام بسته ها و فایلهای مورد نیازش ، اعم از کتابخانه ها و سایر برنامه های جانبی را یکجا بسته بندی کرده و تمامی موارد را به عنوان یک بسته قابل حمل بین سیستم عامل های مختلف حتی ویندوز در دسترس قرار دهند. همچنین بگونهای طراحی شدهان تا آسانتر یک تجربه کارامد به توسعهدهندگان و مدیران سیستم که دائما کدهای برنامه را از محیط های توسعه به تولید منتقل می کند ارائه دهند.
از جهت دیگر کانتینرها از دنیای بیرون مثل یک ماشین مجازی عمل می کنند، آنها می توانند شبیه یک سیستم، کاملا مستقل باشند. اما بر خلاف یک ماشین مجازی، به جای ایجاد یک سیستم عامل کامل، کانتینرها نیازی به اجرای سیستم عامل ندارند، بلکه تنها نیازمند بستههایی هستند که برای اجرا برنامهها به اونها وابسته هستنذ، که از طریق سیستم عامل میزبان در اختیار آنها قرار میگیرند. این امر باعث افزایش قابل توجه عملکرد می شود و حجم برنامه ها را کاهش می دهد. از این رو آنها نیز بسیار سریعتر عمل میکنند، بر خلاف مجازی سازی سنتی، برنامه ها و فرآیندهایی که در یک کانتینر لینوکسی هستند، عملا بر روی میزبان خود اجرا میشوند، فقط با یک لایه حفاظتی اضافی که هر برنامه و پروسه را در بر داره.
یکی از شاخصه های مهم این تکنولوژی این است که ، بسیاری از فن آوری هایی که لینوکس کانتینر را ایجاد کردن تماما منبع باز هستند. این یعنی که یک جامعه گسترده ای از افراد مختلفی حضور دارند، که به توسعه سریع یک اکوسیستم گسترده از پروژه های کمک میکنند.
مدیریت container ها
مسلما قرار دادن برنامه های در کانتینرها خود خیلی تغییر و تحولی خاصی ندارد و مشابه روش مجازی سازی سنتی می باشد،مگر اینکه نحوه استقرار و مدیریت آنها را تغییر داده شوند. Kubernetes یک سیستم محبوب برای مدیریت و سازماندهی کانتینرهای لینوکس است.Kubernetes یک سیستم متن باز برای مدیریت یک یا چند کلاستر از کانتینر ها است. برای انجام این عمل، ابزارهای لازم برای استقرار برنامهها را فراهم میکند، ارتقا منابع یک برنامه در صورت نیاز و مدیریت تغییرات را در برنامه های موجود در کانتینرها را به شما ارائه میدهد و همچنین به بهینه سازی سخت افزار مورد استفاده برای کانتینر های کمک میکند، Kubernetes بگونه ای طراحی شده که قابلیت گسترش و همچنین تحمل در برابر خطا از طریق مجوز دادن به اجزای نرم افزار برای راه اندازی مجدد و انتقال به میزبان دیگر در صورت نیاز را داشته باشد. ابزارهای اتومیشن مانند Ansible و پلت فرم هایی مانند OpenShift می توانند قابلیت های بیشتری را برای ایجاد راحتی مدیریت کانتینرها برای شما اضافه کنند.