داکر یک پلتفرم نرم افزاری برای ساخت اپلیکیشنهای مبتنی بر Container است. محیطهای اجرایی کوچک و سبک که به طور مشترک از هسته سیستم عامل استفاده میکنند اما در عین حال در یک محیط ایزوله و کاملا جدا از هم قرار دارند. هر چند مفهوم container یا نگهدارنده از مدتها قبل در حوزه IT مطرح بود اما داکر به عنوان یک پروژه متن باز در سال ۲۰۱۳ معرفی و عرضه شد. در واقع داکر باعث شد container جان تازه ای بگیرد و دوباره محبوب شود. توسعه نرم افزار به سمت استفاده از Container و میکرو سرویسها رفت و بعدها به عنوان توسعه ابری یا Cloud-native Development شناخته شد.
نگهدارنده (محفظه | Container) یک واحد نرمافزاری استاندارد است که کدها و تمام متعلقات (Dependency) آن را بستهبندی میکند. به این ترتیب، اپلیکیشن در محیطهای محاسباتی مختلف، سریعتر و با اطمینان بیشتر اجرا میشود. هر کانتینر یک محیط ایزوله شده را مشابه یک ماشین مجازی (Virtual Machine | VM) فراهم میکند. برخلاف ماشینهای مجازی، کانتینرهای داکر یک سیستم عامل کامل را اجرا نمیکنند، بلکه هسته (Kernel) میزبان را به اشتراک میگذارند و مجازیسازی را در یک سطح نرمافزاری انجام میدهند.
امکان استفاده از Containerها هم برای اپلیکیشنهای تحت ویندوز و هم برنامههای کاربردی مبتنی بر لینوکس در دسترس است. در واقع میتوان برنامههای ویندوزی، لینوکسی و فایلهای اجرایی (EXE) را در کانتینرهای داکر اجرا کرد. نرمافزارهای محفظهبندی شده یا Containerized همواره به صورت یکسان و فارق از زیرساختشان اجرا میشوند. کانتینرها نرمافزار را از محیطشان جدا میکنند و با استفاده از کانتینرها اطمینان حاصل میشود که نرمافزار به صورت یکپارچه و فارق از تفاوتهایی مثلاً میان توسعه و سطحبندی عمل میکند.
اولین مزیت Docker این است که یک محیط پایدار و ایزوله را برای شما فراهم می کند. به این صورت که با برعهده گرفتن مسئولیت جداسازی برنامه ها و اختصاص منابع، محیطی را فراهم می کند که هر کانتینر به صورت ایزوله به محیط مناسب خود دسترسی داشته باشد و در این زمینه، به کانتینر دیگری وابسته نباشد.
پس در چنین محیطی امکان اجرای چند کانتینر به صورت همزمان روی یک هاست فراهم است و هر کانتینر اجازه دسترسی به منابع اختصاصی خود را دارد. این ایزوله بودن، امکان وقوع هر گونه مشکل احتمالی مثل خرابی را کمتر می کند. مخصوصاً اپلیکیشن هایی که به خاطر بهره مندی از سرویس های جداگانه به چند کانتینر تبدیل می شوند، خراب شدن یک سرویس یا کانتینر، باعث اختلال در عملکرد کانتینرهای دیگر نمی شود.
داکر پروسه دیپلوی برنامه را سریع تر جلو می برد و با ارائه یک محیط کاری استاندارد به توسعه دهندگان باعث می شود که کل چرخه عمر توسعه به طور موثرتر سازماندهی شود. همچنین بهتر است بدانید که این پلتفرم برای هر فرآیند یک کانتینر جدا در نظر می گیرد و عدم نیاز به بوت برنامه ها در سیستم عامل باعث صرفه جویی زیادی در زمان انجام می شود.
تنها کار که باید انجام دهید این است که Docker image را دانلود کنید و آن را محیط های مختلف اجرا کنید. این تصاویر از نظر اندازه بسیار کوچکتر هستند و باعث توسعه سریع برنامه می شود. این پلتفرم برای workflow های CI/CD در ارجحیت قرار دارد.
یک محیط انعطاف پذیر و سازگار شرایط لازم برای مرتب سازی چند تصویر داکر در سرورهای مختلف را فراهم می کند. اگر در طول انتشار برنامه، نیاز به ارتقا داشته باشید، به راحتی می توانید تغییرات لازم را در کانتینرها انجام دهید و بعد از تست، کانتینرهای جدیدی را وارد عمل کنید. تعمیر و ارتقا برنامه بدون نیاز به از کار انداختن کامل آن، قابلیت دیپلوی در چند سرور فیزیکی، سرور داده و پلتفرم های ابری و امکان شروع و خاتمه سریع برنامه یا سرویس از مزایای استفاده از این پلتفرم هستند.
با توجه به این که کد برنامه و تمام نیازمندی های آن در داخل یک کانتینر بسته بندی شده اند، برنامه های مبتنی بر کانتینر از قابلیت حمل بسیار بالایی برخوردار هستند و می توانند روی هر پلتفرمی اجرا شوند که این پلتفرم می تواند Amazon EC2، Google Cloud، VirtualBox یا … باشد، مهم این است که سیستم عامل میزبان از داکر پشتیبانی کند.
مزایایی مثل جلوگیری از اتلاف زمان و منابع در پروسه اندازی محیط و عیب یابی سریع تر در محیط ها به توسعه دهندگان کمک می کند تا فرآیند توسعه را سریع تر جلو ببرند.
کانتینرها، محیط های مجازی مستقل و ایزوله هستند. اپلیکیشن های چند کانتینری هر کدام کانتینر مخصوص به خود را دارد که این جداسازی باعث بالا بردن درجه ماژولاری می شود چون وقوع مشکل در یک کانتینر یا یک بخش از اپلیکیشن، باعث از کار افتادن کل برنامه نمی شود.
تقریباً هر شرکت و سازمان به دنبال راهی است که پروسه توسعه و دیپلوی اپلیکیشن را با هزینه کمتر عملی کند اما به شرطی که جریان کاری دچار اختلال نشود و کیفیت محصول افت نکند. داکر همان راه نجاتی است که باعث راحت شدن اکثر مدیران شده است.
این پلتفرم، نیاز به منابع زیرساختی برای توسعه را کاهش می دهد و همچنین امکان به اشتراک گذاری کانتینرها با نمونه های دیگر از برنامه های کانتینری باعث صرفه جویی در حافظه می شود. همین ویژگی ها باعث می شود که فرآیند توسعه و دیپلوی برنامه مقرون به صرفه تر باشد.
همچنین، توسعه دهندگان می توانند چند کانتینر را روی یک سرور واحد اجرا کنند یا از کانتینرهای موجود به عنوان الگوی پایه برای ساخت کانتینر های جدید استفاده می کنند، این کارها باعث استفاده کارآمد از منابع می شود.
ارائه سیستم کنترل داخلی یکی دیگر از مزیت های برجسته Docker است. کانتینرهای داکر این امکان را به شما می دهند که تغییرات لازم را در تصاویر ایجاد کنید و با ایجاد لایه دیگر، تصویر جدیدی را ایجاد کنید که کنترل آن راحت تر است.
هر لایه، نسخه جدید از تصویر است که به راحتی می توان به نسخه های قبلی دسترسی پیدا کرد و ردیابی ها و بررسی های لازم را انجام داد. همچنین، تنظیمات مربوط به هر کدام از کانتینر ها به صورت داخلی حفظ می شوند و برای کارایی بهتر کانتینرها می توان از اجزای لایه های قبلی استفاده کرد
معماری داکر از اجزای مختلفی تشکیل شده است که تمامی این اجزا به صورت یکجا یک پلتفرم را تشکیل میدهند. Docker Engine در این معماری وظیفه تولید و اجرای کانتینرها را بر عهده دارد و لایهای است که داکر روی آن اجرا میشود. این بخش روی ماشین هاست نصب شده و بهتر است تا بدانید نصب و اجرای آن به نرمی امکان پذیر است چرا که حجم بالایی ندارد.
در کنار این بخش، اجزای زیر در این معماری وجود دارند که هر کدام از آنها وظیفه خاصی دارند.
حرف آخر:
در این مطلب سعی کردیم در مورد داکر و container صحبت کنیم و اطلاعات مفیدی را به شما ارائه دهیم. امیدواریم این مقاله برایتان مفید بوده باشد.