داکر (Docker) یک پلتفرم متنباز است که به توسعهدهندگان اجازه میدهد تا کانتینرهایی را ایجاد، مستقر، اجرا و مدیریت کنند. کانتینرها واحدهای استانداردی هستند که شامل تمام اجزای لازم برای اجرای یک نرمافزار میباشند. این اجزا شامل کد برنامه، کتابخانهها، ابزارهای سیستم عامل و تنظیمات پیکربندی میباشد. کانتینرها به توسعهدهندگان اجازه میدهند تا بتوانند برنامه ها را به صورت پرتابل در محیطهای مختلف اجرا کنند.
داکر در ابتدا به عنوان یک پروژه جانبی در شرکت داتکلود (dotCloud) ایجاد شد. داتکلود یک شرکت PaaS (Platform as a Service) بود که در سال 2010 توسط سالومون هایکس (Solomon Hykes) و همکارانش تأسیس شد. هدف داتکلود ارائه یک پلتفرم برای توسعهدهندگان بود که بتوانند به راحتی برنامههای خود را بر روی آن اجرا کنند.
در سال 2013، داکر به صورت رسمی توسط سالومون هایکس در کنفرانس PyCon، به عنوان یک پروژه متنباز معرفی شد. این پروژه به سرعت توجه زیادی را به خود جلب کرد و در سالهای 2013 و 2014، به سرعت رشد کرد و تعداد کاربران آن گسترش یافت. در این دوره، داکر توانست توجه سرمایهگذاران را نیز به خود جلب کند و بودجههای قابل توجهی برای توسعه بیشتر دریافت کرد. در سال 2014، شرکت داتکلود به Docker Inc تغییر نام داد تا نشان دهد تمرکز اصلی شرکت بر روی پروژه داکر است.
در سال 2018، داکر دسکتاپ برای ویندوز و مک معرفی شد. داکر دسکتاپ یک ابزار توسعه بود که به توسعهدهندگان این امکان را میداد تا به راحتی کانتینرهای داکر را بر روی سیستمهای خود اجرا و مدیریت کنند. از سال 2020 به بعد، داکر به نوآوریهای خود ادامه داد و ابزارها و ویژگیهای جدیدی به پلتفرم خود اضافه کرد. این نوآوریها شامل بهبودی بیشتر در زمینه امنیت، عملکرد و قابلیتهای ارکستراسیون بود. همچنین Inc Docker به گسترش همکاریهای خود با سایر شرکتها و پروژههای متنباز ادامه داد تا داکر به یک استاندارد صنعتی در زمینه کانتینرسازی تبدیل شود.
Docker file یک فایل متنی است که شامل مجموعهای از دستورات برای ایجاد یک Docker image میباشد. این فایل دارای اطلاعات بسیار مهمی است که برای راه اندازی داکر، استفاده از آنها ضروری است. Docker file مشخص میکند که پشت کانتینر چه سیستم عاملی قرار بگیرد، از چه زبانها، متغیرهای محلی و پورتهای شبکه استفاده شود و همچنین پس از اجرا قرار است چه کاری انجام دهد.
Docker Image یک فایل قابل حمل است که شامل یک سری دستورالعمل بوده و مشخص میکند کانتینر کدام کامپوننتهای نرم افزاری و چگونه آنها را اجرا کند. Docker image ها شامل سیستمعامل پایه، فایل های اجرایی، کتابخانهها، متغیرهای محیطی، تنظیمات و سایر وابستگیها به عنوان مبنایی برای ایجاد و اجرای کانتینرها میباشند.
Docker Daemon هسته اصلی و موتور اجرای داکر است که تمامی عملیات مربوط به کانتینرها، تصاویر، شبکهها و حجمها را مدیریت میکند. Docker Daemon به عنوان یک سرویس پسزمینه اجرا میشود و با ارتباط با Docker Client و Rest API، به کاربران و ابزارهای مختلف امکان میدهد تا به راحتی کانتینرها را مدیریت و اجرا کنند.
Docker Client یک رابط خط فرمان است که به کاربران اجازه میدهد تا با Docker Daemon ارتباط برقرار کنند و دستورات مختلفی را برای مدیریت کانتینرها، تصاویر، شبکهها و حجمها ارسال کنند. داکر کلاینت دستورات کاربر را دریافت میکند و آنها را به داکر دیمون ارسال میکند تا عملیات مورد نظر انجام شود.
Docker Registry یک سرویس برای ذخیره، مدیریت و توزیع تصاویر داکر است. تصاویر داکر بستههای نرمافزاری هستند که شامل کد، کتابخانهها و وابستگیهای مورد نیاز برای اجرای یک برنامه هستند. Docker Registry این تصاویر را نگهداری میکند و به کاربران این امکان را میدهد تا آنها را به راحتی به اشتراک بگذارند.
Docker Container یک واحد قابل حمل و ایزوله از نرمافزار است که شامل کد، کتابخانهها، وابستگی ها، تنظیمات محیطی و هر آن چیزی است که برای اجرای برنامه به آن نیاز است. کانتینرها براساس تصاویر داکر ساخته میشوند و به کاربران این امکان را میدهند تا برنامهها را به صورت پرتابل اجرا کنند.
· پرتابل و قابل حمل بودن : کانتینرهای داکر میتوانند روی هر سیستمعاملی که داکر را اجرا میکند، بدون تغییر اجرا شوند.
· ایزولهسازی محیطها : کانتینرها به صورت ایزوله از یکدیگر و از سیستم میزبان اجرا میشوند. ایزولهسازی به افزایش امنیت و پایداری سیستم و جلوگیری از تداخل بین برنامهها کمک میکند.
· یکپارچگی محیط توسعه : استفاده از داکر به توسعهدهندگان این امکان را میدهد تا محیط های توسعه یکسانی بر روی سیستمهای مختلف داشته باشند و مشکلات ناشی از تفاوتهای محیطی را کاهش میدهد.
· مقیاس پذیری آسان : به راحتی میتوان تعداد کانتینرهای درحال اجرا را افزایش یا کاهش داد.
· راهاندازی سریع : سرعت بالای کانتینرها در ایجاد و اجرا، باعث کاهش زمان استقرار و آزمایش میشود.
· امکان اشتراک گذاشتن : به آسانی میتوان کانتینرها و تمام وابستگیهای آنها را با دیگران به اشتراک گذاشت.
· مدیریت آسان : داکر مجموعهای از ابزارهای مورد نیاز برای توسعه برنامهها را به صورت یکجا در خود جای داده است که این امر مدیریت برنامهها و کانتینرها را آسان میکند.
· مقرون به صرفه بودن : داکر نسبت به ماشینهای مجازی که از فناوری Hypervisor استفاده میکنند، ارزانتر بوده و از منابع سختافزاری کمتری استفاده میکند. در نتیجه هزینهها را کاهش میدهد.
برای آشنایی با ماشینهای مجازی و فناوری Hypervisor میتوانید مقاله ماشین مجازی چیست؟ را مطالعه نمایید.
· دشواری یادگیری : یادگیری نحوه کار با داکر و کانتینرها زمانبر و پیچیده است و حتی ممکن است توسعهدهندگانی که تجربه کار با ماشینهای مجازی را هم داشتهاند، مدتی طول بکشد تا مفاهیم داکر و نحوه عملکرد آن را درک کنند.
· مشکلات امنیتی : کانتینرها با اشتراکگذاری کرنل سیستم میزبان اجرا میشوند، که این امر خطرات امنیتی را افزایش میدهد. آسیب پذیری کرنل میتواند تمام کانتینرها را تحت تاثیر قرار دهد.
· پیچیدگی تنظیمات : مدیریت و پیکربندی داکر و کانتینرها میتواند پیچیده باشد و نیازمند دانش فنی است.
· محدودیتها در سیستمعامل ویندوز : اگرچه داکر از ویندوز پشتیبانی میکند، اما عملکرد و قابلیتهای آن بر روی لینوکس بهتر است.
نظارت بر سلامت عملکرد داکر که شامل مانیتورینگ سلامت کانتینرها، سرویسها، وضعیت replicaی سرویسها، وظایف، سلامت کلاستر و گرههای عضو در حالت Swarm، اطلاعات Volumها، شبکه و تصاویر میباشد، دارای اهمیت است. پلتفرم مانیتورینگ معین، در حال حاضر قابلیت مانیتورینگ داکر را دارد. برای مشاهده تمامی شاخصها و پارامترهای داکر که معین آنها را مانیتور میکند، بر روی این لینک کلیک نمایید.