داکر چیست؟ کانتینر چیست؟ اینها به چه دردی میخورند؟ چه مزایایی دارند؟ آیا درست است که میگویند داکر توانسته دنیای ساخت و توسعۀ اپلکیشنها را دگرگون کند؟
این مقاله را نوشتهایم تا به این سؤالها پاسخ بدهیم. همهچیز حول محور داکر میچرخد؛ پلتفرم متنبازی که فرایند ساخت و مدیریت کانتینرها را برای دولوپرها، بهشکلی قابل توجه راحتتر میکند.
مقدمهچینی بیشتر از این چیزی که نوشتهایم، ممکن است گیجتان کند؛ پس بیایید برویم سراغ اصل مطلب و اول از همه، تعریفی این این پلتفرم:
داکر (Docker) چیست؟ به زبان ساده
داکر یک پلتفرم نرمافزاری متنباز است که جهت ساخت، پیادهسازی، اجرا و بهروزرسانی کانتینرها، توسط دولوپرها مورد استفاده قرار میگیرد.
به زبان سادهتر، داکر به شما اجازه میدهد برنامهها و تمام وابستگیهایشان را در یک «بسته» یا «پکیج» به نام کانتینر (Container) قرار دهید. این کانتینرها تضمین میکنند که برنامه شما در هر محیطی (مثل کامپیوتر شخصی، سرور یا فضای ابری) دقیقاً همانطور که باید کار کند.
اجازه دهید یک مثال بزنم که بهتر متوجه شوید.
فرض کنید بهعنوان یک دولوپر، برنامهای ساختهاید که روی کامپیوتر خودتان عالی و بدون نقص کار میکند، ولی وقتی همان برنامه را برای اجرا به سرور میفرستید، یا روی کامپیوتر دیگری امتحان میکنید، تازه یکسری مشکلات رو میشوند؛ مثل چی؟
مثلاً اینکه برنامه شما با نسخه خاصی از از یک زبان برنامهنویسی توسعه داده شده، ولی سرور با نسخه دیگری سازگار است، یا تنظیمات و وابستگیهای مورد نیاز برنامه شما، روی سرور نیست.
اینجاست که داکر میتواند وارد عمل شود و این مشکل را حل کند. چطور؟
داکر به شما کمک میکند که تمام موارد لازم برای اجرای دقیق برنامه را در یک کانتینر بستهبندی و به سرور یا هر جایی که برنامه در آن اجرا میشود، منتقل کنید.
در نتیجه، بدون اینکه لازم باشد تغییراتی در برنامه، سیستم یا سرور اعمال کنید، برنامه در هر محیطی، همانطور که روی کامپیوتر خودتان کار میکرد، بدون دردسر کار میکند.
پس در واقع داکر تسهیلکنندۀ کار دولوپرها است.
اگر بخواهیم فنیتر به قضیه نگاه کنیم، داکر، اپلیکیشن تازهساختهشده را در محیط اختصاصی خودش ایزوله میکند. محیطی که در آغاز یک Docker image (یک پیکج قابل اجرا که نحوۀ ساخت کانتینر، نرمافزارهایی که از آن استفاده میشوند و چگونگی انجام کار را تعیین میکند) است.
بعد از اجرای Docker image، این پلتفرم، کانتینری میسازد حاوی تمام ملزومات ضروری برای اجرای اپلیکیشن. منظور ملزوماتی است مثل:
- System Tools
- Code Libraries
- Dependencies
- Runtime
احتمالاً بیشتر از هر چیزی تشنۀ این باشید که بفهمید کانتینر چیست و کاملاً هم حق دارید! بیایید تمرکزمان را بگذاریم روی معنا و مفهوم Container.
🧩 یک نکته ظریف
وقتی افراد از این عبارت استفاده میکنند، معمولاً به Docker Engine اشاره دارند؛ همان پلتفرمی که چند خط بالاتر چیستی آن را توضیح دادیم و گفتیم به درد ساخت و اجرای Containerها میخورد؛ اما گاهی اوقات، منظور Docker.inc، کمپانی سازنده است که انحصار فروش نسخۀ تجاری این پلتفرم را در اختیار دارد. |
منظور از container چیست و سازوکار آن چطور است؟
تا اینجا که مشغول تعریف داکر بودیم، چند باری به کانتینرها اشاره کردیم. کانتینر مثل یک جعبه است که برنامه شما و تمام ملزوماتی که برای اجرای آن نیاز است (مثل کتابخانهها، کدها، تنظیمات و ابزارهای لازم) را داخل خودش قرار میدهد.
از دیدگاهی دیگر (و کمی تخصصیتر)، کانتینرها شکلی از مجازیسازی سیستمعامل هستند که امکان اجرا شدن اپلیکیشنها در فضای ایزولهشدۀ کاربر، روی کرنل همان سیستمعامل را فراهم میکنند.
در رابطه با ایزولهسازی باید بگوییم ضروری است، چون تضمین میکند که هر کانتینر میتواند بهصورت کاملاً مستقل عمل کند.
در همان خطهای ابتدایی مقاله توضیح دادیم که داکر برای ساخت، توسعه، پیادهسازی و… این کانتینرها کاربرد دارد. باید بدانید اگرچه داکر بدون کانتینر معنا ندارد، اما ساخت کانتینرها بدون داکر هم شدنی است و این وابستگی کاملاً یکطرفه پیش میرود!
در رابطه با طرز کار کانتینرها باید بگوییم آنها قابلیتهای اصلی کرنل مثل Namespaceها و cgroup را به کار میگیرند تا امکان ایزولهسازی منابع به وجود بیاید. در ضمن با توجه به این موضوع که کانتینر تمام ملزومات اجرای اپلیکیشن را پکیج میکند، میتوان بهطور همزمان از آن در محیطهای مختلف استفاده کرد؛ از لپتاپ دولوپر گرفته تا ابرهای عمومی!
پس بهطور خلاصه، containerها اپلیکیشنها و ملزومات اجرای آنها را در یونیتهای پرتابل و ایزوله قرار میدهند و دولوپر میتواند بهشکل همزمان آنها را در محیطهای مختلف به اجرا دربیاورد.
در ظاهر، کانتینر همان ماشین مجازی است؛ اما تفاوتهایی وجود دارند که نادیده گرفتن آنها ممکن نیست!
⭐ محتوای مرتبط: تکنولوژی مجازی سازی چیست و چه انواعی دارد؟ |
تفاوت بین کانتینرهای داکر و ماشین مجازی چیست؟
همین اول کار از شما دعوت میکنیم مقالۀ “ماشین مجازی (vm) چیست؟ آشنایی با کلید ورود به دنیای ابری!” را بخوانید تا درک درستی از این مفهوم به دست بیاورید؛ و اما اینکه فرق بین ماشینهای مجازی و کانتینرهای داکر چیست؟
برخلاف ماشینهای مجازی، کانتینرها سختافزارها را مجازیسازی نمیکنند و نیازمند یک سیستمعامل مهمان کامل نیست! در عوض، این اجزای استاندارد خود سیستمعامل را مجازیسازی میکنند و آن را بهعنوان یک فرایند کاملاً ایزوله روی Docker host به اجرا درمیآورند. به همین خاطر است که کانتینرها سبکتر هستند و سرعت بیشتری از ماشینهای مجازی سنتی دارند.
علاوهبر این موضوع، چون کانتینرهای داکر منابع ماشین هاست را بهجای اختصاص منابع به VMهای مختلف، به اشتراک میگذارند، کارآمدتر هستند.
با این اوصاف، اگر دنبال فضایی پرتابل و سبک برای اجرای اپلیکیشنهای خود هستید، کانتینر به کارتان میآید. از طرفی دیگر، هر وقت به یک سیستمعامل مهمان کامل، یا فضایی متشکل از سختافزارهای مجازیسازیشده نیاز داشتید، ماشینهای مجازی انتخاب بهتری خواهند بود.
احتمالاً میپرسید دلیل محبوبیت docker چیست. در بخش بعدی به این سؤال پاسخ خواهیم داد.
⭐ محتوای مرتبط: کتابخانه ریاکت (React) چیست؟ تجربیات یک دولوپر! |
علت محبوبیت داکر چیست و چرا باید از آن استفاده کنیم؟
سهم بازار این پلتفرم متنباز حیرتآور است. بیشتر از ۸۲ درصد کاربران با این ابزار کانتینرسازی کار میکنند؛ پس شکوشبههای در محبوبیت بالای این ابزار وجود ندارد! این را هم بگوییم تا قبل از این ابزار، کلی پلتفرم مشابه دیگر با همین کاربرد وجود داشتند و اینطور نیست که داکر شروعکنندۀ این مسیر باشد.
نکتۀ جذاب دربارۀ داکر این است که به دولوپرها اجازه میدهد از قابلیتهای کانتینرسازهای دیگر در این پلتفرم استفاده کنند. آن هم از طریق نوشتن دستورهای ساده و به کمک API.
پیشنهاد خواندن: اگر چیزی از API نمیدانید، حتماً مقالۀ “API چیست؟ هرآنچه باید درباره API بدانید (به زبان ساده)” را بخوانید تا بفهمید چقدر وجود چنین چیزی در دنیای انیترنت و شبکه ضروری است.
علاوهبر این ویژگی جذاب، بررسی کاربردهای داکر هم میتواند به شناسایی دلایل محبوبیت داکر کمک بکند.
۱. مهاجرت ابری
داکر بهخاطر پرتابل بودن، فرایند مهاجرت ابری از محیطی به محیطی دیگر را سادهتر و سریعتر پیش میبرد. فرقی نمیکند میخواهید دادهها و اپلیکیشنها را از دیتاسنتر فیزیکی به محیط ابری بفرستید یا برعکس، در هر دو صورت، داکر بهخوبی نیازتان را برطرف میکند.
پیادهسازی ساختار میکروسرویس
خیلی ساده بگوییم: میکروسرویس نام یک سبک ساختاری جدید اپلیکیشنها است. ساختاری که اپلیکیشن را مجموعهای از سرویسهای کوچک و مستقل در نظر میگیرد که وقتی با هم ترکیب میشوند، موجودیت اپلیکیشن را شکل میدهند.
در میکروسرویس، هر قابلیت که بخشی از کار را بر عهده میگیرد، بهصورت مستقل و جداگانه توسعه یافته و پیاده شده است. داکر بهخاطر خصوصیاتش، گزینهای ایدئال برای اجرا و پیادهسازی این ساختار توسعۀ نرمافزارها است.
CI/CD
ci/cd سازوکاری نوین است که به پیشبرد مطمئنتر و سریعتر فرایند ساخت و توسعۀ نرمافزارها، بهصورت گروهی کمک میکند. برای کسب اطلاعات بیشتر دربارۀ این مفهوم، مقالۀ “ci/cd چیست؟ به زبان خیلی ساده” را بخوانید.
با توجه به اینکه داکر یک محیط پایدار برای تست و پیادهسازی اپلیکیشنها ارائه میکند، برای این سازوکار هم خیلی به کار میآید.
DevOps
یادآوری میکنیم که این پلتفرم متنباز برای پیادهسازی سازوکار DevOps هم بهدردبخور است. سازوکاری که بالاتر به مقالۀ مختص آن لینک دادیم و میدانید توانایی افزایش سرعت ساخت و توسعۀ نرمافزارها را دارد.
⭐ محتوای مرتبط: دواپس چیست؟ همه چیز دربار Devops به زبان ساده ساده! |
پیادهسازی محیطهای ابری هیبرید
سبک بودن کانتینرهای ساختهشده با داکر، باعث میشوند جابهجایی آنها بین محیطهای مختلف در نهایت سادگی و بهشکلی کاملاً آسان انجام بگیرد؛ به همین خاطر، تقریباً تمام ارائهدهندگان ابری اسمورسمدار سرویسهای توسعه و مدیریت داکرمحور را در اختیار کاربرانشان قرار میدهند.
Container as a Service یا CaaS
اگر با IaaS ،SaaS و PaaS آشنایی داشته باشید، عبارت CaaS کمتر به گوشتان غریب خواهد بود! به بیان ساده، CaaS به دولوپرها اجازه میدهد اپلیکیشنهای کانتینرشده را مدیریت و پیادهسازی کنند. در واقع، CaaS امکان اجرای کانتینرهای داکر در مقیاس بزرگ را ممکن میکند.
هوش مصنوعی و یادگیری ماشین (AI&ML)
بهلطف ساختاری که داکر فراهم میکند، توسعۀ تکنولوژیهای مرتبط با هوش مصنوعی و ماشین لرنینگ با سرعت خیلی بیشتری انجام میگیرد.
در بخش بعدی، تمام اصطلاحات و اجزای این اکوسیستم کاربردی را بررسی خواهیم کرد.
⭐ محتوای مرتبط: کلاینت چیست؟ انواع Client و ربط آن به سرور |
اجزای اکوسیستم داکر زیر ذرهبین
داکر با یک ساختار مبتنیبر client/server کار میکند و از این اجزا تشکیل شده است:
Docker host
منظور ماشینی مجازی (یا فیزیکی) است که لینوکس (یا هر سیستمعامل سازگار با موتور داکر) را اجرا میکند.
Docker Engine (موتور داکر)
موتور داکر اپلیکیشنی مبتنیبر client/server است که از Docker daemon (منظور API داکر است که با daemon ارتباط میگیرد) و رابط کاربری فرمانمحور (CLI)، جهت برقراری ارتباط با daemon تشکیل شده.
Docker daemon
سرویسی که بعد از دریافت دستور از کاربر، Docker imageها را میسازد، با عنوان Docker daemon شناخته میشود. به بیان بهتر، این سرویس مرکز کنترل فرایند پیادهسازی داکر به حساب میآید.
Docker client
کلاینت داکر CLI را برای دسترسی به Docker API فراهم میکند؛ هدف برقراری ارتباط با Docker daemon است. هم میتوان بهصورت ریموت به daemon وصل شد، هم دولوپر میتواند daemon و client را روی یک دستگاه کامپیوتر واحد اجرا کند!
⭐ محتوای مرتبط: نود جی اس (Node.js) چیست؟ |
Docker objects
آبجکتها اجزایی هستند که به پکیج کردن و توزیع اپلیکیشنها کمک میکنند.
Docker images
بالاتر توضیح دادیم که این جزو اکوسیستم داکر چیست؛ پس اجازه دهید اینجا خیلی مختصر به آن بپردازیم: Docker image شامل تمام اجزای لازم برای عمکلرد اپلیکیشن میشود.
Docker build
دستوری است دارای تمام ابزارها و قابلیتهای لازم برای ساخت Docker imageها.
Dockerfire
به بیان ساده، Dockerfire لیستی است از تمام دستورات CLI که Docker engine با استفاده از آنها Docker image را میسازد.
Docker documentation
Docker documentation یا Docker docs کتابخانۀ رسمی داکر است که حاوی تمام منابع، دستورالعملها و راهنماهای لازم برای ساخت اپلیکیشنهای کانتینرشده میشود.
Docker Hub
یک مخزن (repository) خیلی بزرگ با بیشتر از ۱۰۰ هزار Docker image که شرکتهای تجاری، پروژههای متنباز و دولوپرهای مستقل در گردآوری آنها سهم دارند.
تمام اعضای Docker hub هم میتوانند Imageهایی که خودشان ساختهاند را در این مخزن بارگذاری کنند، هم میتوانند Imageهای دیگری که ممکن است به آنها نیاز داشته باشند را از این مخزن دانلود کنند.
Docker Desktop
اگر قرار است روی ویندوز یا macOS از داکر استفاده کنید، به Docker Desktop نیاز خواهید داشت. اپلیکیشنی که از Docker Engine بهعلاوۀ دیگر ملزومات این اکوسیستم مثل Docker CLI Client ،Docker Compose و… تشکیل شده است.
⭐ محتوای مرتبط: Juice SSH چیست؟ (راهنمای اتصال به سرور با سیستم اندرویدی) |
Docker registry
منظور یک فضای ذخیرهسازی و سیستم توزیع متنباز و توسعهپذیر مناسب برای Docker imageها است. دولوپرها با Docker registry میتوانند نسخههای مختلف Docker imageها را زیر نظر بگیرند. این کار با کمک Git انجام میشود.
Docker plug-ins
از آنجایی که داکر متنباز است، با استفاده از پلاگینها یا افزونههای ساختهشده برای آن، میتوان تواناییها و کاربردهایش را از حالت پیشفرض بیشتر کرد.
Docker extensions
با استفاده از Docker extensions دولوپرها میتوانند از ابزارهای واسط (یا اصطلاحاً third-party) در Docker Desktop استفاده کنند و قابلیتهای بیشتری به به پلتفرم اضافه کنند.
Docker Compose
Docker Compose که کمی بالاتر به آن اشاره کردیم، ابزاری است برای مدیریت اپلیکیشنهای چندکانتینری.
این هم از بررسی اجزای اکوسیستم داستانمان که سعی کردیم به سادهترین شکل ممکن آنها را بررسی کنیم. اگر میپرسید نقاط قوت docker چیست، در بخش بعدی پاسخ خود را خواهید گرفت.
مزایای داکر چیست؟
پلتفرم و اکوسیستمی که تا اینجا مشغول تعریف و کندوکاو جوانب مختلف آن بودیم، مزایای زیر را برای کاربرانشان رقم میزند:
تسهیل جابهجایی کانتینرها
برخلاف ابزارهای قبلیای که داکر پا در جای پا آنها گذاشت، میتوان کانتینرهای داکر را بدون نیاز به اصلاح و تغییر بین محیطهای مختلف جابهجا و دقیقاً همان عملکرد مورد انتظار را از آنها دریافت کرد.
سبک و منعطف بودن
همانطور که گفتیم، دولوپرها با این پلتفرم متنباز میتوانند چندین فرایند را داخل یک کانتینر قرار دهند. بهخاطر این انعطافپذیری، ساخت اپلیکیشنی درستوحسابی که حتی اگر یکی از اجزایش به مشکل بخورد، امکان ادامۀ فعالیت را دارد، ممکن میشود.
ساخت خودکار کانتینر
داکر میتواند با توجه به کد منبع (source code) اپلیکیشن، بهصورت کاملاً خودکار کانتینر بسازد.
ارائۀ کنترل کامل بر ورژنهای مختلف کانتینرها
دولوپرها با استفاده از این پلتفرم میتوانند ورژنهای مختلف یک container image را بررسی کرده و در نهایت سازندۀ آن را پیدا کنند.
⭐ محتوای مرتبط: سیستمعامل اوبونتو چیست و چه مزایا و معایبی دارد؟ |
امکان استفادۀ مجدد از کانتینرهایی که قبلاً ساخته و استفاده شدهاند
متنباز بودن باعث میشود بتوانیم از کانتینرهایی که دولوپرها و کمپانیهای دیگر ساختهاند هم استفاده کنیم!
برویم که به جمعبندی مقاله برسیم.
بهلطف داکر، دنیای دولوپرها پروانهای شده است!
داکر بهمعنای واقعی کلمه یک ابزار انقلابی بود که دنیای ساخت و توسعۀ اپلیکیشنها را متحول کرد؛ سهم بازار خیلی بزرگ این پلتفرم ادعای خط قبل را تأیید میکند.
امیدواریم بعد از خواندن این مقاله، جواب تمام پرسشهای خود در را رابطه با این موضوع را گرفته باشید، چون هدف نهایی ما همین بود! با این وجود، اگر احیاناً ابهامی باقی مانده است، در قسمت کامنتها میتوانید سوالاتتان را بپرسید.
منابع: IBM | Geeks for Geeks
دیدگاه ها
اولین نفری باشید که دیدگاه خود را ثبت می کنید