داکر امکانی را فراهم آورده است که پروسهها و نرمافزارها به صورت مجزا در محیط کاملا ایزولهای بر روی کرنل لینوکس راهاندازی شود که به این محیط و بستهی ایزوله، کانتینر (Container) میگویند.
کانتینر این امکان را برای برنامه نویسان و توسعه دهندگان اپلیکیشن ها فراهم می کند تا یک برنامه را با تمام ماژول ها و کامپوننتهای وابسته آن ( مانند کتابخانه ها ، توابع و … ) یکی کرده و به صورت یک پکیج درآورده تا آن برنامه تولید شده در پلتفرم ها و سیستمهای مختلف بدون مشکل اجرا شود، در حقیقت بدون نگرانی از تنظیمات و وابستگیهای یک Application خاص در پلتفرم های دیگر، آن برنامه در هر محیطی اجرا شود. پس اگر برنامه نویسی می کنید حتما استفاده از داکر را به شما توصیه می کنیم.
داکر که در بالا به آن اشاره شد وظیفه مدیریت کانتینرها را به عهده دارد و بیشتر شبیه یک ماشین مجازی عمل میکند، تفاوت داکر با ماشین مجازی در این است که در VM (یا ماشین مجازی) برای اجرای اپلیکیشن و برنامه های مختلف که بخواهیم به صورت ایزوله و مجزا از هم کار کنند باید VM های مختلف ساخته شود که همین موضوع بار پردازشی و هدر رفت منابع سیستمی را روی سرور به همراه دارد.
ولی در Docker روی یک VM خاص که میتواند دارای سیستم عامل ویندوز یا لینوکس باشد، ماژول داکر نصب شده و سپس روی سرویس داکر، کانتینرهای مختلف حاوی برنامه ها و اپلیکیشن های مختلف نصب و اجرا میشوند بدون اینکه کانتینرها به هم دسترسی داشته باشند. بدین صورت کانتینرها از هم ایزوله هستند و نیاز ما برای ایجاد چندین VM را مرتفع میسازند.
اگر با مجازیسازی آشنا باشید حتماً به خوبی میدانید سازوکارهای این کار مانند Hyper-V, KVM و Xen، سختافزار را به صورت مجازی در اختیار مدیران شبکه قرار میدهند. در نتیجه این سازوکارها نیازمند منابع سختافزاری قوی هستند.
از طرف دیگر کانتینرها از سیستمعاملهای به اشتراکگذاری شده بهره میگیرند. در نتیجه با روش کارآمدتری طرف هستیم که منابع سیستم را بهینهتر استفاده میکند. بر خلاف مجازیسازی سختافزار، کانتینرها بر بالای یک اینستنس (Instance) لینوکس قرار میگیرند و فضایی کوچک و جمعوجور را برای اپلیکیشنهای فراهم میکنند.
به لطف این ویژگی چیزی حدود ۴ تا ۶ برابر اینستنس بیشتری نسبت به فناوری Xen یا KVM VM بر روی یک سختافزار واحد اجرا میشود. از طرف دیگر کانتینرها به توسعه دهندگان کمک میکنند تا کدهای خود را داخل یک مخزن مشترک قرار دهند. این امر فرآیند کدنویسی را سرعت میبخشد و کدها عملکرد بهتری خواهند داشت.
داکر توسعهدهندگان را قادر میسازد تا اپلیکیشنهای خود را راحت و سریع با حجم کمتری به صورت قابل حمل و پرتابل در یک کانتینر قرار دهند. این اپلیکیشنهابه صورت مجازی از هر جایی قابل اجرا هستند.
این فرآیند از طریق مجزا کردن کدها در داخل یک کانتینر واحد انجام میشود. کاملاً مشخص است چنین کاری بهینهسازی و آپدیت برنامه را سادهتر میکند. از آنجایی که شرکتهای فعال در عرصه فناوری به دنبال راههای بیشتری برای ساخت اپلیکشنهای پرتابل میگردند داکر روزبهروز طرفداران جدیدی پیدا میکند.
در این بین اگر با گیتهاب آشنا باشید حتماً به خوبی میدانید که این بستر شرایط همکاری برای بهاشتراک گذاشتن کدها میان توسعهدهندگان را فراهم کرده است. از این لحاظ میتوان داکر را به نوعی شبیه به گیتهاب دانست چرا که مخزن رسمی گیتهاب به شرکتهای تجاری کمک میکند تا نرمافزارهای خود را بهینهتر کرده و اجرا و مدیریت آنها را ارتقا دهند.
از طرف دیگر کانتینرهای داکر به راحتی در فضای رایانش ابری قرار میگیرد و به نوعی طراحی شده که تقریباً تمامی اپلیکشنهایی که از متدولوژی دواپس (DevOps) بهره میگیرند با داکر تعامل داشته باشند.
داکر محیطی لوکال را برای توسعه فراهم میکند که این محیط دقیقاً عملکرد یک سرور را در اختیار توسعهدهندگان قرار میدهد. این امر برای روش توسعه CI/CD کاربرد زیادی دارد. از این طریق میتوان چندین محیط توسعه را از یک هاست مشخص با یک نرمافزار، سیستمعامل و تنظیمات واحد اجرا کرد.
از طرف دیگر پروژه را میتوان روی چند سرور جدید و مختلف آزمایش کرد و تمامی اعضای گروه بر روی یک پروژه واحد با تنظیمات همانند قادر به همکاری هستند. این کار توسعهدهندگان را قادر میسازد تا نسخههای جدید برنامه خود را به سرعت آزمایش کرده و از عملکرد صحیح آن اطمینان خاطر حاصل کنند.
اگر از قدیمیهای دنیای کامپیوتر باشید به احتمال زیاد FreeBSD Jail که در اواخر سال ۲۰۰۰ استفاده میشد را به خاطر دارید. جالب است بدانید سابقه کانتینرها به همان دوران باز میگردد. اوراکل نیز مفهوم خاص خودش را از کانتینرها داشت که با نام Zones شناخته میشد.
با این حساب میتوان گفت توسعهدهندگان احتمال دارد تاکنون حتی بدون اینکه بدانند از کانتینرها کمک گرفته باشند. برای نمونه هر زمان که از یکی از سرویسهای گوگل مانند جیمیل و گوگل داکس استفاده میکنید عملاً یک کانتینر جدید برای شما ایجاد شده است.
داکر روی LXC سوار میشود و همانند سایر کانتینرها به فایلهای سیستمی، فضای ذخیرهسازی، پردازنده، رم و دیگر منابع به صورت اختصاصی دسترسی دارد. به این ترتیب میتوان تفاوت اصلی میان کانتینرها و ماشینهای مجازی (VM)، را در این دانست که وقتی هایپروایزر (Hypervisor) به صورت انتزاعی تمام یک سیستم را ایجاد میکند، کانتینرها تنها به صورت انتزاعی کرنل سیستمعامل را ایجاد میکنند.
این امر میلیونها دلار صرفهجویی را برای شرکتهای ارائهدهنده خدمات رایانشابری به دنبال دارد و به همین دلیل است که غولهای فناوری به سرعت به سمت داکر پیش رفتهاند.
داکر ارمغانهای جدیدی در اختیار شرکتها قرار داد که پیش از این شاهد آنها نبودیم. در این زمینه میتوان به سادهسازی اجرا و استفاده آن اشاره کرد. از طرف دیگر داکر با کانتینرهای دیگری از کنونیکال، گوگل و ردهت همکاری دارد و در نتیجه استانداردسازی خوبی را برای کانتینرها شاهد هستیم.
داکر همچنان به استاندارد سازی ادامه داده و از آنجایی که عملاً این روزها نمیتوان رقیبی برای داکر متصور شد میتوان آن را روی هر سیستمعاملی اجرا کرد و در نتیجه استانداردسازی مطلوبی را برای داکر شاهد هستیم.
تمامی زیرساختهای IT نیازمند مدیریت و نظارت هستند و در همین راستا کانتینرها نیز باید مانیتور شوند و در حالت کنترلشدهای قرار بگیرند. درغیر این صورت مشخص نخواهد شد سرور چه برنامههایی را اجرا میکند.
خوشبختانه از برنامههای دواپس میتوان برای مانیتور کانتینرهای داکر کمک گرفت، اما به این نکته نیز باید اشاره کرد که این برنامهها برای کانتینرها بهینه نشدهاند. اینجاست که باید سراغ ابزارهای مدیریت و نظارت رایانش ابری را بگیرید.
ابزارهایی مانند Docker Swarm, Kubernetes و Mesosphere در این زمینه گزینههای خوبی بهنظر میرسند و تجربه نشان داده است در بین این ابزارها Kubernetes محبوبیت بیشتری پیدا کرده است.
با کوبرنتیز آشنا شوید.
همانگونه که در بالا هم اشاره شد داکر اجازه اجرای اپلیکیشنهای بیشتری را نسبت به سایر تکنولوژیها با یک سختافزار مشخص میدهد و این امر ساخت و مدیریت اپلیکیشنها را سادهتر میکند.
در پایان پیشنهاد میکنیم اگر شما هم به فناوریهای جدید علاقه دارید و تاکنون از داکر استفاده کردهاید. در قسمت نظرات ما و سایر کاربران را در جریان تجربههای مفید خود قرار دهید.