Docker چیست؟

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

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

 

 

Docker چیست؟

ماشین مجازی سازی

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 را قابل‌حمل و انعطاف‌پذیر برای استفاده قرارداد.

Docker چیست؟

با استفاده از containers Docker شما می‌توانید گسترش، جابجایی و پشتیبان گیری را سریع‌تر و راحت‌تر از ماشین‌های مجازی انجام دهید.
بنابراین، Docker به دلیل Container های مدرنش محبوبیت پیدا کرد.
در این بخش ما به جزییات Docker و تفاوت آن با LXC نگاهی خواهیم کرد.

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

بااین‌حال، تعدادی از تفاوت‌های کلیدی بین ظروف Docker و LXC وجود دارد :

Singleprocess and 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 and Stateful :

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

اولاً ، 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 سطوح دیگری از کارایی، قابلیت حمل و انعطاف‌پذیری را برای توسعه‌دهندگان بیش از مجازی‌سازی به ارمغان می‌آورند.

 

گردآوری و تنظیم مجموعه شرکت های مهندسی دانش بنیان رها