اگر میخواهید بدانید داکر چیست و چه کاربردهایی دارید، با ما همراه باشید. یکی از رایجترین و البته پرکاربردترین ابزارها برای توسعهی برنامه و اپلیکشینهای کاربردی، داکر است. آشنایی با این ابزار، به شما کمک میکند تا فرایند خودکارسازی برخی از مراحل توسعه را با راحتی بیشتری انجام دهید و در وقت و انرژی خود نیز صرفهجویی کنید. در این مطلب، ابتدا توضیح میدهیم که داکر چیست و سپس به دلایل محبوبیت و معرفی برخی از رایجترین ابزارها و اصطلاحات آن میپردازیم. با ما همراه باشید.
داکر چیست؟
در این بخش قصد داریم به این موضوع بپردازیم که داکر چیست و چه کاربردی دارد. داکر یک پلتفرم منبعباز و رایگان است که توسعهدهندگان با کمک آن میتوانند کارهایی نظیر مدیریت، ساخت، استقرار، اجرا و بهروزرسانی کانتینرها را انجام دهند. کانتینرها نیز مولفههای استاندارد و اجرایی هستند که میتوانند در هر محیطی، کد منبع برنامه را با کتابخانههای سیستمعامل و وابستگیهای موردنیازش ترکیب کنند.
با کمک کانتینرها، توسعه و تحویل برنامههای کاربردی توزیعشده بسیار راحتتر از قبل میشود. محبوبیت این ابزار با پیشرفت تکنولوژی و حرکت سازمانها به سمت توسعهی بومی ابری و محیطهای چندابری ترکیبی، روزبهروز بیشتر میشود. توسعهدهندگان میتوانند با کار مستقیم با قابلیتهای ساختهشده در لینوکس و سایر سیستمعاملها، کانتینرهای بدون داکر بسازند. با این حال، داکر میتواند فرآیند کانتینرسازی را بسیار سریعتر، آسانتر و ایمنتر پیش ببرد. در حال حاضر، گزارشها نشان میدهند که بیش از 13 میلیون توسعهدهنده از این پلتفرم استفاده میکنند و حتی زمانی که شما در حال خواندن این مقاله هستید، به تعدادشان اضافه میشود!
داکر به کمپانی Docker که نسخهی تجاری آن را میفروشد و به پروژههای منبعباز داکر که شرکت Docker و بسیاری از سازمانها و افراد دیگر در آن مشارکت دارند، مرتبط است. توسعهدهندگان با استفاده از یک داکر نصب شده روی سرور مجازی یک کشور خارجی مانند سرور مجازی آلمان میتوانند بدون هیچ محدودیتی به توسعه و بهبود اپلیکیشنهای خود بپردازند.
کانتینرها چطور کار میکنند و چرا تا این حد بین توسعهدهندگان محبوباند؟
کانتینرها با جداسازی فرایندها و قابلیتهای مجازیسازیای که در هستهی لینوکس وجود دارد، ساخته میشوند. این قابلیتها، کمک میکنند تا بتوانند چندین مولفهی برنامه را به همان روشی که یک Hypervisor چندین ماشین مجازی و چندین cpu، حافظه و سایر منابع سختافزاری را به اشتراک میگذارد، منابع یک نمونهی واحد از میزبان عامل را به اشتراک بگذارند.
در همین راستا، میتوانیم اینطور بگوییم که فناوری کانتینر میتواند تمام قابلیتها و مزایای یک ماشین مجازی را به همراه داشته باشد. برخی این قابلیتها عبارتنداز جداسازی برنامه، مقیاسپذیری مقرونبهصرفه، یکبارمصرف بودن. مزایای مهم دیگری که این فناوری برای توسعهدهندگان دارد، عبارتنداز:
- سبکتر بودن نسبت به ماشینهای مجازی: کانیتنرها برخلاف ماشینهای مجازی، تمام بار سیستمعامل و hypervisor را حمل نمیکنند. این ابزار فقط شامل فرایندهای سیستمعامل و وابستگیهای لازم برای اجرای کد است. همچنین، برخلاف ماشینهای مجازی که بعضاً چند گیگابایت هستند، کانتینرها بر حسب مگابایت اندازهگیری میشوند و در نتیجه، بهتر از vm از ظرفیت سختافزار استفاده میکنند و زمان راهاندازی سریعتری نسبت به آن دارند.
- بهرهوری بهتر از فناوری: شما میتوانید برنامههای کانتینری را یکبار بنویسید و هرچند بار که خواستید، در مکانهای مختلف اجرا کنید. کانتینرها در مقایسه با VMها بسیار سریعتر هستند و راهاندازی راحتتری دارد. این ابزار در گذرگاه یکپارچهسازی و تحویل مداوم کار میکند و برای تیمهای توسعهای که از شیوهی Agile و DevOps استفاده میکنند، عالی است.
- استفادهی بهتر از منابع سیستم: توسعهدهندگان با استفاده از کانتینرها میتوانند چندین نسخهی یک برنامهی کاربردی را روی سختافزار اجرا کند. این قابلیت در VM وجود ندارد. در نتیجه، هزینههای ابری کاهش مییابد و بهتر میتوان از منابع موجود استفاده کرد. یکی دیگر از راههای استفادهی مفید از منابع، خرید سرور مجازی مانند سرور مجازی ایران است. با استفاده از سرور مجازی، منابع موردنیاز به شما تخصیص داده میشود و دیگر مشکل کمبود منابع نخواهید داشت.
برخی از مزایای دیگر کانتینرها عبارتنداز بهبود کیفیت برنامه، پاسخ سریعتر و غیره….
دلایل اهمیت استفاده از داکر چیست؟
در این قسمت به این موضوع میپردازیم که اهمیت استفاده از داکر چیست و قصد داریم به مواردی اشاره کنیم که توسعهدهندگان را مجاب میکنند تا از آن استفاده کنند.
امروزه داکر آنقدر محبوب است که در برخی مواقع به جای container استفاده میشود. container یک فناوری مرتبط با داکر است که دههها قبل از انتشار عمومی داکر در دسترس عموم قرار داشت. فناوری مشابه دیگر LinuX Containers (یا LXC) نام دارد که در سال 2008 در هستهی لینوکس پیادهسازی شد و فرایند مجازی سازی را برای یک نمونه از لینوکس امکانپذیر کرد. با اینکه هنوز هم برخی از توسعهدهندگان از LXC استفاده میکنند، فناوریهای جدیدتری با استفاده از هستهی لینوکس به دنیا معرفی شدهاند. به عنوان مثال، اوبونتو یکی از توزیع های لینوکس منبعباز و مدرن است که این قابلیت را فراهم میکند.داکر با سیستم عامل های مختلف سازگار است، اما بسیاری از کاربران ترجیح می دهند به علت ثبات، امنیت و انعطاف پذیری بیشتر لینوکس، از سرور مجازی لینوکس استفاده کنند.
داکر به توسعهدهندگان کمک میکند تا با استفاده از دستورات ساده، بتوانند از قابلیت کانتینرسازی بومی استفاده کرده و بسیاری از کارها را از طریق یک رابط برنامهنویسی کاربردی (API) به صورت خودکار انجام دهند. داکر در مقایسه با LXC دارای برخی از قابلیتهای زیر است:
- بهبود و بدون درز بودن قابلیت جابجایی کانتینر: کانتینرهای LXC اغلب به پیکربندیهای مخصوص ماشین اشاره میکنند. این در حالی است که کانتینرهای داکر در هر دسکتاپ، دیتاسنتر و محیط ابری و بدون هیچ تغییری اجرا میشوند.
- سبکتر بودن اجرا و بروزرسانیهای سنگینتر: با استفاده از LXC میتوانید چندین فرایند را در یک ظرف واحد ترکیب کنید. با کمک این قابلیت، میتوانید برنامهای بسازید که بتواند در حین اجرا، بروزرسانی، حذف یا تعمیر یکی از قسمتهایش بپردازد.
- ایجاد خودکار کانتینر: با استفاده از داکر، میتوانید به طور خودکار یک کانتینر را بر اساس کد منبع بسازید.
- نسخهسازی کانتینر: داکر میتواند نسخههای تصویر یک کانتینر را ردیابی کرده، به نسخههای قبلی برگردد و حتی ردیابی کند که چه کسی و چطور یک نسخه را ساختهاست. همچنین، میتواند نسخههای دلتا را در بین نسخههای موجود و نسخهی جدید پیدا کرده و آن را آپلود کند.
- استفادهی مجدد از کانتینر: شما میتوانید کانتینرهای موجود را به عنوان تصویر پایه که مانند الگوهایی برای ساخت containerهای جدید است، استفاده کنید.
- کتابخانههای کانتینر مشترک: توسعهدهندگان با استفاده از داکر میتوانند به یک رجیستری منبعباز و رایگان که حاوی هزاران کانتینر است دسترسی داشته باشد. این کانتینرها توسط کاربرهای دیگر ساخته و به اشتراک گذاشته شدهاند.
در حال حاضر، میتوانید با Microsoft Windows و Apple MacOS نیز به فرایند کانتینرسازی داکر دسترسی داشته باشید. توسعهدهندگان میتوانند کانتینرهای داکر را بر روی هر سیستم عاملی اجرا کنند. از آن طرف، اکثر ارائهدهندگان پیشرو ابر مانند Microsoft، Amazon Web Services، Microsoft Azure و IBM Cloud برخی خدمات خاص را برای کمک به توسعه دهندگان به منظور ساخت، استقرار و اجرای برنامههای کانتینری با داکر، ارائه میدهند.
ابزار و اصطلاحات رایج در داکر چیست؟
شاید از خودتان پرسیده باشید که ابزار و اصطلاحات رایج داکر چیست و دانستن آنها چه کمکی به من میکند؟ اگر میخواهید از امکانات این پلتفرم پرکاربرد استفاده کنید، باید با اصطلاحات رایج آن آشنا باشید. برخی از مهمترین ابزار و اصطلاحات داکر عبارتنداز:
داکر فایل (DockerFile)
هر کانتینر داکر با یک فایل متنی ساده، حاوی دستورالعملهایی است که کانتینر ایمیج را میسازند. DockerFile میتواند فرایند ایجاد داکر ایمیج را خودکارسازی کند. این ابزار، شامل فهرستی از دستورالعملهای رابط خط فرمان (CLI) است که داکر انجین از اجرای آنها برای جمعآوری تصویر، استفاده میکند. این فهرست بسیار بزرگ و استاندارد شده است و تمام عملیات داکر بدون توجه به محتوا، زیرساخت یا سایر متغیرهای محیطی به صورت یکسان عمل میکنند.
داکر ایمیج (Docker images)
داکر ایمیج حاوی کد منبع برنامهی اجرایی و تمام ابزارها، کتابخانهها و وابستگیهای موردنیاز برای اجرا است. پس از اجرای داکر ایمیج، این ایمیج به یک نمونه از کانتینر تبدیل میشود. با اینکه میتوان یک داکر ایمیج را از ابتدا ساخت، اما اکثر توسعهدهندگان ترجیح میدهند آن را از مخازن رایج دانلود و استفاده کنند. شما میتوانید چندین داکر ایمیج را از یک ایمیج پایه ایجاد کرده و آنها به طور پیش فرض، اشتراکات پشتهی خود را به اشتراک خواهند گذاشت.
داکر ایمیجها از لایههای مختلف تشکیل میشوند که هر لایه، مربوط به نسخهای از ایمیج است. زمانی که توسعهدهنده تغییراتی را در ایمیج ایجاد میکند، یک لایه بر بالای لایههای قبلی ایجاد میشود و این لایهی بالایی، جایگزین لایهی بالایی قبلی میشود و به عنوان نسخهی فعلی ایمیج ثبت میشود. لایههای قبلی نیز برای استفادهی مجدد یا بازیابی در پروژههای دیگر ذخیره میشوند.
هر بار که یک کانتینر از یک داکر ایمیج ایجاد میشود، لایهای جدید به نام لایهی کانتینر ایجاد میشود. تغییرات ایجادشده در کانتینر مانند حذف فایلها، افزودن و غیره فقط در لایهی کانتینر ذخیره میشوند و زمانی وجود دارند که کانتینر در حال اجرا باشد. میتوانیم اینطور بگوییم که با خودکارسازی فرایند تکراری ایجاد ایمیج، کارایی توسعهدهندگان افزایش مییابد، زیرا چندین کانتینر زنده میتوانند به طور همزمان نه تنها از یک ایمیج پایه اجرا شوند و از یک پشتهی مشترک استفاده کنند.
کانتینرهای داکر (Docker containers)
یک کانتینر داکر، نمونهی زنده و در حال اجرای داکر ایمیج است. همانطور که قبلاً اشاره کردیم، داکر ایمیجها فایلهای فقط خواندنی هستند؛ اما کانتینرها شامل محتوای زنده، زودگذر و اجرایی هستند که کاربران با استفاده از آنها میتوانند با سیستم تعامل داشته باشند و مدیران نیز میتوانند تنظیمات و شرایط را با استفاده از دستورات داکر تنظیم کنند.
داکر هاب (Docker Hub)
مخزن عمومی داکر ایمیجها، داکر هاب نام دارد که یکی از بزرگترین کتابخانهها و انجمن داکر ایمیج در جهان به شمار میرود. بیش از 100000 داکر ایمیج در این مخزن نگهداری میشود که اغلب آنها توسط فروشندگان نرمافزارهای تجاری، پروژههای منبعباز و توسعهدهندگان مستقل به اشتراک گذاشته شدهاند. همچنین، بخش عظیمی از ایمیجها توسط شرکت داکر و Docker Trusted Registry در این مخزن قرار داده شدهاند.
تمام کاربران داکر هاب میتوانند ایمیجهای خود را به اشتراک بگذارند. از طرف دیگر، میتوانند ایمیجهای پایهی ازپیش تعریفشده را از سیستم فایل داکر دانلود کرده تا به عنوان نقطهی شروع پروژهی کانتینرسازی خود استفاده کنند.
البته، مخازن ایمیج دیگری مانند گیتهاب نیز وجود دارند که میتوانید از آنها به عنوان مکانی برای ذخیره و دانلود ایمیجهای موردنظرتان استفاده کنید. به عنوان مثال، کاربران داکر هاب میتوانند یک مخزن ایجاد کرده و سپس ایمیجهای خود را در آن جای دهند. این مخزن میتواند به صورت عمومی یا خصوصی تعریف شود و به حسابهای گیتهاب یا BitBucket مرتبط شود.
داکر دسکتاپ (Docker Desktop)
داکر دسکتاپ، یک برنامهی کابردی است که از آن در مک یا ویندوز استفاده میشود و شامل Docker، Docker CLI Client، Docker Compose، Kubernetes و موارد دیگر است. همچنین، این برنامه شامل دسترسی به داکر هاب میشود.
داکر دیمون (Docker daemon)
داکر دیمون سرویسی است که میتواند داکر ایمیج را با استفاده از دستورات کلاینت ایجاد کرده و آن را مدیریت کند. این سرویس به عنوان مرکز کنترل اجرای داکر در نظر گرفته میشود سروری که داکر دیمون روی آن اجرا میشود را میزبان داکر یا داکر هاست (Docker host) میگویند.
داکر رجیستری (Docker registry)
داکر رجیستری، یک سیستم ذخیرهسازی و توزیع منبعباز و مقیاسپذیر برای داکر ایمیج است. این سیستم، به شما کمک میکند تا نسخههای ایمیج را با استفاده از برچسبگذاری، در مخازن ردیابی کنید. این کار، با استفاده از گیت (git) که یک ابزار کنترل نسخه است، انجام میشود.
استقرار داکر و ارکستراسیون
زمانی که فقط چند کانتینر را اجرا میکنید، مدیریت یک برنامه در Docker Engine در زمان اجرای واقعی راحتتر میشود. اما وقتی قصد استقرارهای بزرگی که شامل هزاران کانتینر و صدها سرویس میشود را دارید، بدون استفاده از ابزارهای کمکی، مدیریت گردش کار تقریباً غیرممکن است. در این قسمت از آموزش داکر، برخی از رایجترین ابزارهای استقرار داکر را معرفی میکنیم:
پلاگینهای داکر (Docker plugins)
Docker Compose
Docker Compose برای مدیریت برنامههای چندکانتینری که در آنها، همهی کانتینرها روی یک میزبان داکر اجرا میشوند، استفاده میشود. این ابزار، یک فایل YAML که با پسوند (.YML) معلوم میشود را ایجاد میکند. این فایل، مشخص میکند که کدام سرویسها در برنامه قرار دارند و میتوانند کانتینرها را با یک فرمان واحد، راهاندازی و اجرا کنند. از آنجایی سینتکس این فایل به زبان آگنوستیک (agnostic) است، میتوانید آن را در برنامههای نوشتهشده در جاوا، پایتون، روبی و بسیاری از زبانهای دیگر، استفاده کنید.
همچنین، توسعهدهندگان میتوانند از ابزار Docker Compose برای تعریف حجمهای پایدار برای ذخیرهسازی، تعیین گرههای پایه، سندنگاری و پیکربندی وابستگیهای سرویس، استفاده کنند.
کوبرنتیس (Kubernetes)
توسعهدهندگان برای نظارت و مدیریت چرخههای حیات کانتینرها در محیطهای پیچیده، به ابزارهای هماهنگسازی کانتینر نیاز دارند. با اینکه داکر ابزار ارکستراسیونی به نام Docker Swarm دارد، اما اکثر توسعهدهندگان ترجیح میدهند به جای آن از Kubernetes استفاده کنند.
Kubernetes یک پلتفرم ارکستراسیون کانینتر رایگان و منبعباز است. این ابزار، در ابتدا از طریق توسعهی یک پروژه که برای استفادهی داخلی در گوگل ساخته شدهبود، به وجود آمد. توسعهدهندگان با هدف خودکارسازی و برنامهریزی از Kubernetes برای استقرار کانتینرها، بهروزرسانی، کشف سرویس، ذخیرهسازی، لود بالانسینگ، نظارت و کارهای دیگر استفاده میکنند.
علاوهبراین، سازمانها میتوانند از اکوسیستم منبعباز Kubernetes که شامل Istio و Knative میشود، برای استقرار یک PaaS با بهرهوری بالا برای برنامههای کاربردی کانتینری و یک on-ramp برای محاسبات بدون سرور، استفاده کنند.
سخن پایانی
کار توسعهی برنامهها و اپلیکیشنها به زمان، انرژی و هزینهی نسبتاً زیادی نیاز دارد. به همین دلیل، توسعهدهندگان همواره به دنبال ابزارهایی هستند که برخی از کارهای تکراری و زمانبر را به صورت خودکار انجام میدهند.
یکی از این ابزارها که توانسته تأثیر خوبی بر عملکرد توسعهدهندگان بگذارد، داکر است. داکر یک پلتفرم منبعباز و رایگان است که با استفاده از آن میتوان کارهایی نظیر مدیریت، ساخت، استقرار، اجرا و بهروزرسانی کانتینرها را به صورت خودکار و بدون نیاز به نیروی انسانی بیشتر، انجام داد. در این مطلب به پاسخ به این سوال که داکر چیست و مفاهیم رایج در داکر مانند ابزارها و اصطلاحات رایج و مفهوم کانتینر در داکر پرداختیم.