در صورتی که برای انجام پروژه ای نیاز به بسته ای از اپلیکیشن ها با تکنولوژی های مختلف باشد، مانند یک وب سرور که از Node.js استفاده می کند و یک دیتابیس مانند MongoDB و یک سیستم پیام رسان مانند Redis و همچنین ابزار Orchestration، مشکلات زیادی برای توسعه این بسته اپلیکیشن با اجزای مختلف آنها به وجود خواهد آمد.
- اولین مشکل سازگاری همه آنها با سیستم عامل اصلی است. ما باید اطمینان داشته باشیم که همه این سرویس ها با ورژن سیستم عامل سازگار هستند. اگر این سازگاری جود نداشته باشد ما باید به دنبال ورژنی از سیستم عامل باشیم که با همه این سرویس ها سازگار است.
- دومین مشکل این است که ما باید سازگاری بین این سرویس ها، کتابخانه ها و وابستگی آن ها را در سیستم عامل نیز بررسی کنیم.
امکان دارد برخی از این کتابخانه ها با یک ورژن سازگار باشند و کتابخانه دیگر ورژن دیگر نیاز داشته باشد. ساختار اپلیکیشن ها در طول زمان تغییر می کند. در نتیجه زمانی که ما از نسخه های آپدیت شده استفاده می کنیم باید مجددا سازگاری آن ها با یکدیگر و با زیر ساخت را بررسی نماییم. به مشکل معیارهای سازگاری معمولا ماتریس جهنمی گفته می شود.
زمانی که ما می خواهیم یک توسعه دهنده را به طور گسترده استفاده کنیم، ایجاد محیط جدید واقعا سخت است. زیرا توسعه دهنده جدید از دستورالعمل های خاصی پیروی می کند و صد ها هزار دستور لازم است تا محیط مناسب آن ایجاد شود.
باید در هر زمان سازگاری لازم وجود داشته باشد. ما توسعه دهنده ها و محیط های تولیدی بسیاری داریم. یک توسعه دهنده امکان دارد بر روی سیستم عامل قابل دسترسی باشد و برای بقیه نوع دیگری نیاز باشد.
نمی توان تضمین کرد که همه اپلیکیشن ها یک عملکرد را در محیط های مختلف داشته باشند. همه این موارد ساخت توسعه دهنده ها و استفاده از اپلیکیشن ها را سخت می کند.
در نتیجه ما به چیزی احتیاج داریم که با وجود مشکلات سازگاری به ما کمک کند و امکان اصلاح یا تغییر مولفه ها بدون اثرگذاری بر دیگر مولفه ها را فراهم کند و حتی امکان اصلاح سیستم عملکردی اصلی بر طبق نیاز را ایجاد کند. در این زمینه داکر بسیار کاربردی است. در داکر می توان هر مولفه را در یک ماشین مجازی و یک سیستم عامل یا کانتینر جدا با وابستگی ها و کتابخانه هایش اجرا کرد.
ما باید تنها در ابتدا تنظیمات داکر را انجام دهیم و سپس صرف نظر از اینکه سیستم عملکردی اصلی چه چیزی باشد، همه توسعه دهنده ها با یک دستور ساده در داکر شروع به کار خواهند کرد. تنها لازم است که داکر بر روی سیستم نصب شده باشد.
قبل از اینکه بگوییم چرا داکر استفاده می کنیم لازم است راجع به کانتینر خلاصه ای توضیح دهیم.
اما کانتینر چیست؟
کانتینر ها محیط های کاملا ایزوله ای هستند که فرآیند ها، سرویس ها، رابط های شبکه، نصب خاص خود را مانند یک ماشین مجازی داشته باشند با این تفاوت که همه آنها یک هسته سیستم عامل را در اشتراک دارند.
کانتینرها مانند داکر جدید نیستند و ۱۰ سال است که وجود دارند و انواع مختلف آن ها شامل LXC، LXD و LXCFS و … است. داکر از کانتینر LXC استفاده می کند. راه اندازی این کانتینرها سخت است و ابزاری سطح پایین است و داکر ابزاری سطح بالا با چندین عملکرد قدرتمند برای کاربر نهایی همانند ما پیشنهاد می دهد.
قبل از اینکه بگوییم داکر چگونه کار می کند لازم است تا در ابتدا جنبه های اساسی از سیستم های عملکردی را بیان کنیم.
نحوه کار سیستم های عملکردی
اگر به سیستم های عملکردی مثل ubuntu، fedora، suse یا centos نگاهی بیندازیم، همه آنها متشکل از دو جزء هسته سیستم عامل و مجموعه ای از نرم افزارها هستند.
هسته سیستم عامل وظیفه تعامل با سخت افزار اصلی را دارد، در حالیکه هسته سیستم عامل همان لینوکس است. در این مورد نرم افزار روی آن، سیستم های عملکردی را از یکدیگر متفاوت می سازد.
این نرم افزار شامل رابط های کاربری مختلف، درایورها، کامپایلرها، مدیریت فایل، ابزارهای توسعه دهنده و … می شود.
بنابراین شما یک هسته لینوکس دارید که بین سیستم عامل های مختلف و برخی نرم افزارهای سفارشی به اشتراک گذاشته شده و باعث تفاوت سیستم های عملکردی از یکدیگر می شود.
گفته شد کانتینرهای داکر هسته اصلی را به اشتراک می گذارند اما معنای اصلی به اشتراک گذاشتن هسته چیست؟
در اینجا دلیل اینکه چرا از داکر استفاده می شود به خوبی برای شما روشن خواهد شد.
فرض کنید سیستمی با سیستم عامل Ubuntu و داکر نصب شده روی آن داریم. داکر می تواند هر نوع سیستم عامل را بر اساس همان هسته اجرا کند که دراینجا لینوکس است.
اگر سیستم عامل اصلی ubuntu باشد، داکر می تواند کانتینری را بر پایه توزیع دیگری مانند debian، fedora، suse یا centos اجرا کند. هر داکر کانتینر دارای نرم افزاری اضافی است که قبلا راجع به آن صحبت شد و باعث تفاوت سیستم های عملکردی است و داکر از هسته اصلی میزبان داکر که با تمام سیستم عامل های روی آن کار می کند، استفاده می کند.
بنابراین عاملی وجود دارد که همان هسته را در ویندوز به اشتراک نمی گذارد و شما قادر نیستید که ویندوزی بر پایه کانتینر روی میزبان داکر با لینوکس اجرا کنید. برای این کار شما به یک داکر روی ویندوز سرور نیاز دارید.
هدف اصلی داکر بسته بندی و کانتینر کردن اپلیکیشن ها، ارسال و اجرای آن ها در هر زمان و مکان و به تعداد دفعاتی است که شما می خواهید.