Server: Application 

1 : 1


حالا فرض کنید چندین Application دارید و هر کدام را باید در سرور جداگانه نصب کنید در این حالت مجبور هستید به اندازه Application ها سرور اضافه کنید که این حرکت از نظر فنی مشکل داشت و همچنین کاری هزینه بر می باشد . سپس بحث Virtual پیش آمد .

 


با پیدایش این تکنولوژی خیلی از مشکلات برطرف شدند .

همانطور که در تصویر بالا می بینید هر VM حکم یک سرور فیزیکی را ایفا می کند . ولی برای اجرای هر Application نیاز به نصب یک OS دارید یعنی به ازای هر VM یک OS باید نصب کرد هر کدام از OSها مشکلاتی از حیث Resources و Licenses  و ... دارد .

حالا اگر به تکنولوژی قبل نگاهی بیندازید برای راه اندازی هریک از VM ها به Resource خاصی نیاز داشتید برای مثال فرض کنید اگر بخواهید 10 ماشین مجازی روی VM راه اندازی کنید طبق تصویر به منابع زیر نیاز دارید که فقط ماشین مجازی بالا بیاید که بعد آن Application را اجرا کنید .

برای حل این مشکل تکنولوژی جدیدی بنام Container پدید آوردند که با این تکنولوژی می توانید Application های خود را در Container راه اندازی کنید . راه اندازی Application  در Container همانند اینکه Application را در VM راه اندازی کرده اید . Container از حداقل Resources ها استفاده می کند در حقیقت Container مثل اینکه در یک محیط Isolate ، Application ها را راه اندازی می کند.

همانطور که در عکس مشاهده می کنید اتفاقی است که در کل سرور فیزیکی اتفاق می افتد که یک User Space بر کل سرور حاکم می باشد این چیزی است که قبل از اینکه تکنولوژی Container به وجود آید . ولی با معرفی container ، سرور به چندین User Space تقسیم می شود همانند تصویر زیر :

سپس بعد از مرور زمان User Space ها جایشان را  به Container دادند که در هر Container می توانید Application خاصی و کاملا جدا از سایر Container ها و روی یک سیستم عامل راه اندازی کنید .


فرض کنید 5 اپلیکشن بر روی یک User Space راه اندازی کرده اید مشکل اصلی که در این حالت وجود دارد این است که OS نمیتواند تشخیص دهد که هر APP چکار میکند برای مثال دو APP را در نظر بگیرید که در یک User Space راه اندازی شده اند اگر هر APP به یک فایل Lib نیاز دارد در این حالت OS نمی تواند قبول کند که APP ها را اجرا کند برای اینکار نیاز دارید User Space ها را از هم جدا کنید طوری که هر APP احساس کند به طور جداگانه در حال اجرا است.

Docker در اصل یک شرکت است ولی در عین حال یک تکنولوژی یا Platform جدید به حساب می آید که از Feature های موجود در هسته لینوکس Namespaces, Capabilities, Cgroups بعنوان Container استفاده می کند در اصل Docker همان Container است.

اگر Docker Engine را طبق تصویر زیر روی چندین Platform متفاوت راه اندازی کردید در این حالت چون Docker Engine استاندارد می باشد می توانید APPی که مثلا روی Laptop نصب کرده اید بدون هیچ مشکلی به راحتی APP را جابه جا کنید و بروی Docker Engine های که روی پلت فرم های متفاوت راه اندازی کرده اید اجرا کنید .
شما اگر دقیق به ساختار Google Play نگاه کنید می بینید که با هر گوشی می توانید وارد این نرم افزار بشوید APP مورد نظر خود را سرچ کنید و آن را دانلود کنید دقیقا Docker Engine از این ایده استفاده کرده است که هر APP در هر پلت فرم قابل اجرا شدن می باشد .