داکر (Docker) یک پلتفرم متنباز برای ساخت، استقرار و مدیریت اپلیکیشنهای کانتینری یا Containerized است. اپلیکیشنهای Containerized، در محیطهای اجرای همزمان ایزولهای به نام Container اجرا میشوند. کانتینرها یک اپلیکیشن را با تمام متعلقات آن، از جمله کتابخانههای سیستم، باینریها و فایلهای پیکربندی، بستهبندی میکنند. این بستهبندی یکپارچه، اپلیکیشن را قابل حمل میکند و به آن امکان میدهد در سیستمهای مختلف اجرا شود.
داکر توسعه دهندگان را قادر میسازد تا اپلیکیشنها را در کانتینرها بستهبندی کنند. کانتینرها تحویل اپلیکیشنهای چند بخشی را ساده میکنند. همچنین با تغییر رویکرد سازمانها به سمت توسعه براساس اپلیکیشنهای مبتنی بر ابر و محیطهای چند ابری ترکیبی، این موارد محبوبیت فزایندهای پیدا کردهاند.
توسعهدهندگان میتوانند کانتینرها را بدون داکر (Docker) ایجاد کنند اما این پلتفرم، ساخت، استقرار و مدیریت کانتینرها را آسانتر، سادهتر و ایمنتر میکند. Docker توسعه دهندگان را قادر میسازد تا از طریق یک API و با استفاده از دستورات و اتوماسیون ساده، اقدامات موردنظر را انجام دهند.
تصویر(1)
کانتینرها چگونه کار میکنند و چرا اینقدر محبوب هستند؟
کانتینرها با ایزولهسازی فرآیندها و قابلیتهای مجازی سازی که در هسته لینوکس تعبیه شده، ایجاد میشوند. این قابلیتها، بخشهای مختلف یک اپلیکیشن را قادر میسازند تا منابع میزبان را به اشتراک بگذارند. سیستم مذکور تقریبا مانند یک hypervisor که چندین ماشین مجازی را قادر میسازد تا CPU، رم و سایر منابع یک سرور سختافزاری واحد را به اشتراک بگذارند، عمل میکند.
در نتیجه، فناوری کانتینر تمام عملکردها و مزایای ماشینهای مجازی از جمله ایزولهسازی اپلیکیشن، مقیاسپذیری مقرونبهصرفه و برخی از مزایای مهم دیگر که در ادامه ذکر شدهاند را ارائه میدهد:
- حجم سبکتر: برخلاف ماشینهای مجازی، کانتینرها کل یک سیستم عامل و hypervisor را حمل نمیکنند. آنها فقط شامل فرآیندهای سیستم عامل و متعلقات لازم برای اجرای کد هستند. حجم کانتینرها بر حسب مگابایت (در مقایسه با گیگابایت برای برخی ماشینهای مجازی) اندازهگیری شده، از ظرفیت سختافزار بهتر استفاده میکنند و زمان راهاندازی سریعتری دارند.
- بهرهوری بیشتر از منابع: با کانتینرها میتوانید چندین برابر بیشتر از یک ماشین مجازی، کپی یک اپلیکیشن را روی همان سخت افزار اجرا کنید. این قابلیت میتواند هزینههای سرویس ابری شما را کاهش دهد.
- بهبود بهرهوری توسعه دهندگان: در مقایسه با ماشینهای مجازی، کانتینرها سریعتر هستند و استقرار، تدارک و راه اندازی مجدد آنها آسانتر است. این قابلیت، کانتینر را برای استفاده در CI/CD ( یکپارچهسازی و استقرار مداوم - این ویژگی با خودکارسازی مراحل توسعه نرمافزار، ارائه آن را سرعت میبخشد) ایدهآل میکند.
شرکتهایی که از کانتینر استفاده میکنند، مزایای دیگری از جمله بهبود کیفیت اپلیکیشن، پاسخ سریعتر به تغییرات بازار و موارد دیگر را گزارش میدهند.
چرا باید از داکر (Docker) استفاده نمود؟
داکر (Docker) امروزه آنقدر محبوب است که "Docker" و "container"، به جای یکدیگر استفاده میشوند. با این حال، اولین فناوریهای مرتبط با کانتینر، سالها قبل از انتشار عمومی Docker در سال 2013، در دسترس بودند.
در سال 2008، LinuXContainers (به صورت مخفف LXC)، در هسته لینوکس پیادهسازی شد. در حالی که هنوز از LXC استفاده میشود اما فناوریهای جدیدتری نیز برای هسته لینوکس در دسترس هستند. اوبونتو، به عنوان یک سیستم عامل لینوکس مدرن و متنباز، این قابلیت را فراهم میکند.
تصویر(2)
داکر (Docker) قابلیتهای کانتینریسازی بومی لینوکس را ارتقا داد تا امکانات زیر را فراهم نماید:
- بهبود قابلیت جابجایی: در حالی که کانتینرهای LXC اغلب به پیکربندیهای مخصوص ماشین وابسته هستند، کانتینرهای Docker در هر نوع دسکتاپ، دیتاسنتر و محیط ابری، بدون نیاز به تغییر اجرا میشوند.
- حجم سبکتر و بروزرسانیهای مداوم: با LXC میتوان چندین فرآیند را در یک کانتینر واحد ترکیب کرد. در کانتینرهای Docker، تنها یک فرآیند در هر کانتینر اجرا می گردد. این قابلیت، امکان ساخت اپلیکیشنی را فراهم میکند که میتواند وقتی یکی از قسمتهای آن برای بروزرسانی یا تعمیر غیرفعال شده است، به اجرا ادامه دهد.
- ایجاد خودکار کانتینر: داکر میتواند به طور خودکار بر اساس کد منبع اپلیکیشن، یک کانتینر ایجاد کند.
- نسخهسازی کانتینر: داکر (Docker) میتواند نسخهها یا تاریخچه یک کانتینر را ذخیره نماید و به نسخههای قبلی برگردد. همچنین ردیابی کند که چه کسی و چگونه یک نسخه را ایجاد کرده است.
- استفاده مجدد از کانتینر: کانتینرهای موجود را میتوان به عنوان ایمیج برای ساخت کانتینر جدید استفاده کرد.
- کتابخانههای مشترک کانتینر: توسعهدهندگان میتوانند به یک منبع متنباز که حاوی هزاران کانتینر ارائه شده توسط کاربران است، دسترسی داشته باشند.
امروزه کانتینرساز (containerization) داکر با Microsoft Windows server نیز کار میکند. اکثر ارائه دهندگان سرویس ابری، خدمات خاصی را برای کمک به توسعه دهندگان در جهت ایجاد، انتقال و اجرای اپلیکیشنهای داکر، ارائه میدهند.
به همین دلیل، داکر (Docker) به سرعت پذیرفته شد و همچنان در حال گسترش میباشد. شرکت Docker اعلام کرده است که هر ماه 11 میلیون توسعهدهنده جدید به آن اضافه میگردد و همچنین ایمیجهای کانتینر ماهانه 13 میلیارد بار دانلود میشوند.
ابزارها و اصطلاحات داکر (Docker)
تصویر(3)
برخی از ابزارها و اصطلاحاتی که هنگام استفاده از داکر (Docker) با آنها مواجه خواهید شد عبارتند از:
فایل داکر یا DockerFile
هر کانتینر داکر، دارای یک فایل متنی ساده حاوی دستورالعملهایی برای ساخت ایمیج از کانتینر داکر است. DockerFile فرآیند ایجاد ایمیج داکر (Docker) را خودکارسازی میکند. این فایل در واقع فهرستی از دستورالعملهای command-line یا رابط خط فرمان (CLI) است که Docker Engine برای گردآوری ایمیج اجرا مینماید.
ایمیجهای داکر یا Docker images
ایمیجهای داکر (Docker) حاوی کد منبع اپلیکیشن و همچنین تمام ابزارها، کتابخانهها و متعلقاتی هستند که برای اجرا به صورت یک کانتینر، مورد نیاز است. وقتی ایمیج Docker را اجرا میکنید، به یک یا چند کانتینر تبدیل میشود.
ایجاد یک ایمیج Docker از پایه، امکان پذیر است اما اکثر توسعه دهندگان آن را از مخازن رایج دریافت میکنند. از یک ایمیج پایه میتوان چندین ایمیج Docker ایجاد کرد.
ایمیجهای داکر از چندین لایه تشکیل شده اند و هر کدام مربوط به نسخهای از ایمیج است. هر زمان که یک توسعه دهنده تغییراتی در ایمیج ایجاد میکند، لایه جدیدی در بالای لایه های قبلی ایجاد میگردد. این لایه، جایگزین لایه بالایی قبلی شده و به عنوان نسخه اصلی ایمیج در نظر گرفته میشود. لایههای قبلی جهت عقبگرد یا استفاده مجدد در پروژههای دیگر، ذخیره خواهند شد.
با ساخت یک کانتینر از ایمیج داکر (Docker)، لایه جدید دیگری به نام لایه کانتینر ایجاد میگردد. تغییرات ایجاد شده در کانتینر مانند افزودن یا حذف فایلها، صرفا در لایه کانتینر ذخیره میشوند. این فرآیند تکراری ایجاد ایمیج، بازده کلی را افزایش میدهد. زیرا کانتینرهای در حال اجرا میتوانند تنها از طریق یک ایمیج پایه اجرا شوند که زمان انجام این کار، از یک منبع مشترک استفاده میکنند.
کانتینرهای داکر یا Docker containers
کانتینرهای داکر، نمونههای در حال اجرای ایمیجهای آن میباشند. ایمیجهای داکر، فایلهای فقط خواندنی هستند اما محتوای کانتینرها، فعال، تغییرپذیر و قابل اجرا خواهند بود. کاربران میتوانند با آنها تعامل داشته باشند و مدیران، تنظیمات و شرایط آنها را با استفاده از دستورات docker، تغییر دهند.
داکر هاب یا Docker Hub
Docker Hub مخزن عمومی ایمیجهای داکر است که خود را "بزرگترین کتابخانه و انجمن ایمیجهای کانتینر در جهان" مینامد. این مخزن بیش از 100000 ایمیج کانتینر را در خود جای داده که از فروشندگان نرمافزارهای تجاری، پروژههای متنباز و توسعه دهندگان شخصی، تهیه شدهاند.
همه کاربران داکر هاب میتوانند ایمیجهای دلخواه خود را به اشتراک بگذارند. همچنین میتوانند ایمیجهای پایه آماده را از داکر دانلود کنند تا به عنوان نقطه شروعی برای پروژههای کانتینرسازی، مورد استفاده قرار گیرند.
داکر دیمون یا Docker daemon
Docker Daemon سرویسی است که روی سیستم عامل شما مانند ویندوز، MacOS اپل یا iOS اجرا میشود. این سرویس، ایمیجهای داکر (Docker) شما را با استفاده از دستورات مشتری، ایجاد و مدیریت میکند و به عنوان مرکز کنترل اجرای داکر عمل مینماید.
تصویر(4)
رجیستری داکر یا Docker registry
Docker registry یک سیستم ذخیره سازی و توزیع متنباز مقیاس پذیر برای ایمیجهای داکر است. رجیستری به شما امکان میدهد تا نسخههای ایمیج موجود در مخازن را با استفاده از برچسب گذاری، دنبال کنید. این کار با استفاده از git، یک ابزار کنترل نسخه، انجام میشود.
استقرار داکر (Docker) و هماهنگ کننده
اگر تعداد کمی کانتینر را اجرا میکنید، مدیریت اپلیکیشن در Docker Engine، بسیار ساده خواهد بود. اگر پروژه شما شامل هزاران کانتینر و صدها سرویس باشد، مدیریت گردش کار بدون کمک ابزارهای هدفمند زیر، تقریبا غیرممکن است.
Docker Compose
اگر اپلیکیشنی را در چندین کانتینر ایجاد میکنید که همه در یک سرور قرار دارند، میتوانید از Docker Compose برای مدیریت معماری اپلیکیشن استفاده نمایید. Docker Compose یک فایل YAML ایجاد میکند که نشان میدهد کدام سرویسها در اپلیکیشن بهکار رفته است.
Kubernetes
برای نظارت و مدیریت چرخههای حیات کانتینر در محیطهای پیچیدهتر، باید از ابزار "هماهنگ کننده" یا orchestration کانتینر استفاده نمایید. در حالی که داکر (Docker) ابزار هماهنگکننده خود به نام Docker Swarm را ارائه میکند اما اکثر توسعه دهندگان به جای آن Kubernetes را انتخاب میکنند.
جمع بندی
داکر (Docker) ابزار قدرتمندی است که میتواند به شما در خودکارسازی استقرار اپلیکیشنها کمک کند. استفاده از آن ساده است و نیازی به نصب هیچگونه نرمافزار جانبی روی دستگاه میزبان ندارد.
در چند سال گذشته، داکر (Docker) به یکی از محبوبترین ابزارها برای توسعه و استقرار نرمافزار تبدیل شده است. Docker توسعهدهندگان را قادر میسازد تا چندین اپلیکیشن مجزا را روی یک سرور اجرا کنند.