Docker چیست؟

Docker چیست؟

۱۳۹۷-۳-۶ ۱۲:۵۲:۲۰ +۰۴:۳۰ دیدگاه‌ها برای Docker چیست؟ بسته هستند

FreeBSD Jails و  Solaris Zones،  نمونه ای  از Container های لینوکس هستند که دارای محفظه های محرمانه خود هستند ( با پردازنده مجزا، حافظه،  I / O بلوک و منابع شبکه ) که هسته سیستم عامل میزبان را به اشتراک می گذارند. در Docker نتیجه چیزی است که احساس می کنید مانند یک ماشین مجازی است، اما تمام وزن و سربار راه اندازی سیستم عامل مهمان را از بین می برد.

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

virtualmachines-vs-containers-100727624-large Docker چیست؟

در محیط برنامه ای که نیاز به مقیاس وب دارد، Containers ها یک راه حل  جذاب در مقایسه با مجازی سازی سنتی سرورها هستند.

برای درک Containers ها ، ما باید با Cgroups و Namespace  های لینوکس که  از  ویژگی های هسته لینوکس هستند  آشنا شویم که ما بین containers و سایر فرآیندهای موجود در میزبان قرار می گیرند .Namespace  لینوکس، که ابتدا توسط IBM ایجاد شد مجموعه ای از منابع سیستم را در بر می گیرد و آنها را به یک فرایند ارائه می کند تا آن طور به نظر برسد که به این فرآیند اختصاص یافته است.

Cgroups  های لینوکس، که ابتدا توسط Google توسعه یافتند،Namespace ها در  لینوکس برای جداسازی و استفاده از منابع سیستم، مانند CPU و حافظه، برای یک گروه از فرایندها  مدیریت می کنند. به عنوان مثال، اگر شما یک برنامه داشته باشید که مقدار زیادی چرخه CPU و حافظه را به خود اختصاص دهد، مانند یک برنامه محاسباتی علمی، می توانید برنامه را در Cgroup قرار دهید تا CPU و استفاده از حافظه را محدود کنید.

Namespace  با جداسازی منابع برای یک فرآیند واحد به کار می رود ، در حالی که Cgroups مدیریت منابع برای یک گروه از فرایندها را انجام می دهد.

از LXC به Docker

تکنولوژی اصلی لینوکس Container  لینوکس است که معمولا به عنوان LXC شناخته می شود. LXC یک روش مجازی سازی برای سیستم عامل لینوکس که اجرای چندین سیستم جدا شده لینوکس در یک میزبان را فراهم می کند. Namespaces  و Cgrpoups  ها امکان ایجاد LXC را می دهد.

namespace برنامه ها را از سیستم عامل جدا می کند، بدین معنا که کاربران می توانند یک سیستم عامل لینوکس پاکیزه و حداقل داشته باشند و هر چیز دیگری را در یک container  جداگانه اجرا کنند.

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

Docker، که به عنوان یک پروژه برای ساخت Single-application LXC Containers  آغاز شد، چندین تغییر قابل توجه در LXC ایجاد کرد که Container  را قابل حمل و انعطاف پذیر برای استفاده قرار داد. با استفاده از containers  Docker شما می توانید گسترش ، جابجایی و پشتیبان گیری  را سریع تر و راحت تر از آنچه که با استفاده از ماشین های مجازی است ،  انجام دهید.

بنابراین، Docker به دلیل Container های مدرنش محبوبیت پیدا کرد .

در این بخش ما به جزییات Docker  و تفاوت آن با LXC نگاهی خواهیم کرد .

اگرچه Docker به عنوان یک پروژه منبع  باز برای ساخت LXC متفاوتی شروع به کار کرد، اما بعدا به محیط برنامه زمانبندی Containers  خود متصل شد. Docker یک ابزار لینوکس است که می تواند به طور موثر ایجاد، حمل و نگهداری Containers  را مدیریت  کند.

اساسا، Containers  Docker و LXC مکانیسم های مجازی سازی سبک وزن کاربر هستند که Cgroups و Namespace  ها  را برای ایزوله کردن  منابع اجرا می کنند. با این حال، تعدادی از تفاوت های کلیدی بین ظروف Docker و LXC وجود دارد :

Singleprocess و Multiprocess :

Docker،Containers  ها را مجبور می کند که  اگر برنامه شما که متشکل از فرآیندهای همزمان x باشد، به تعداد ایکس Containers  را اجرا کنید ، هر کدام با یک فرآیند متمایز در مقابل، containers  LXC یک فرآیند init معمولی دارند و می توانند چندین فرآیند را اجرا کنند.

برای اجرای یک برنامه ساده چند سطحی وب در Docker ، شما نیاز به یک php container  یک  nginx container  (برای وب سرور ) و یک mysql container  برای پایگاه داده و چندین Containers  داده برای ذخیره جداول پایگاه داده و دیگر داده های برنامه دارید.

استفاده از Container  تک پروسه مزایای بسیاری از جمله به روز رسانی آسان دارد . همچنین Container  تک پروسه ای یک  معماری کارآمد برای ساخت برنامه های کاربردی مبتنی بر سرویس های میکرو است.

محدودیت هایی نیز برای Container  تک پروسه وجود دارد. به عنوان مثال، شما نمی توانید  Agent  و Login scrips  و SSH  را درون یک Container  اجرا کنید . همچنین برای  تغییرات کوچک در سطح برنامه شما اساسا مجبور به ایجاد یک Container  جدید، به روز شده هستید.

Stateless و Stateful :

Container Docker به صورت Stateless طراحی شده اند.

اولا ، Docker حافظه دائمی را پشتیبانی نمی کند. Docker این امکان را به شما می دهد که قسمتی از فضای هاست را به عنوان Docker volume  به container  خود اختصاص دهید.

دوما ، Container  Docker شامل لایه های فقط خواندنی هستند. این بدان معنی است که وقتی Container image  ایجاد شد ، تغییری نمی کند. در طول زمان اجرا، اگر فرایند در یک Container  باعث تغییرات در وضعیت داخلی آن شود، بین ساختار داخلی و Image که از آن Container  ساخته شده است، تفاوت ایجاد می شود.

Stateless container  یک موجود جالب است. شما می توانید یک container  را  بروزرسانی کنید، و این به روز رسانی ها یک سری Container image  جدید ایجاد می کنند، بنابراین عقب گرد سیستم آسان است.

Portability :

این احتمالا مهمترین پیشرفت Docker در مورد LXC است. Docker  شبکه، ذخیره سازی، و جزئیات سیستم عامل از برنامه را بیشتر از LXC خلاصه می کند. هنگامی که یک Container  را از یک میزبان Docker به دستگاه دیگری انتقال دهید، Docker تضمین می کند که محتوا برای برنامه باقی خواهد ماند.

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

با LXC، یک توسعه دهنده وقتی چیزی را بر روی دستگاه خود اجرا می کند وقتی در  سرور راه اندازی می کند، به درستی اجرا نمی شود.

Docker این پیچیدگی را برداشت. این چیزی است که Container  Docker را قابل حمل و آسان برای استفاده در محیط های مختلف ابر و مجازی می سازد.

یک معماری Developer-friendly :

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

 

X