داکر چیست؟

آیا تا به حال سندروم WOMM به گوشتان خورده؟  نگران نباشید، بیماری نیست؛WOMM  مخفف   Work On My Machine مربوط به توسعه دهنگان و برنامه نویسانی است که داکر(Docker) را نمی شناسند یا تا به حال از آن استفاده نکرده اند(البته نه لزوما). همانهایی که پروژه شان اغلب روی سیستم خودشان به خوبیس اجرا می شود اما روی سرور یا سیستم های دیگر نه!  حال برای این که شما جزو این دسته نباشید پیشنهاد می کنم باقی مقاله را بخوانید.

داکر چیست؟
داکر چیست؟

داکر چیست و چرا استفاده می‌شود؟

اگر بخواهیم داکر را در یک جمله تعریف کنیم، باید بگوییم:

“داکر یک پلتفرم متن‌باز (opensorce)است که ابزارهایی برای کانتینری‌سازی (Containerization) فراهم می‌کند.”

و البته داکریک انقلاب در روش ساخت و استقرار نرم‌افزار است. به طور خیلی ساده، داکر پلتفرمی است که به شما اجازه می‌دهد برنامه‌ها و تمام چیزهایی که برای اجرا شدن نیاز دارند (مانند کد، کتابخانه‌ها، تنظیمات و حتی یک سیستم‌عامل سبک) را در یک “جعبه” کوچک به نام  Image و این بسته را در محیط  ایزوله‌شده به نام کانتینر(Container) اجرا کنید. این کانتینر تضمین می‌کند که برنامه شما در هر محیطی، دقیقا به همان شکلی که انتظار می‌رود، اجرا شود.

تصور کنید شما به عنوان یک برنامه نویس حرفه ای هستید و اپلیکیشنی را توسعه داده اید و حال میخواهید برنامه را در محیطی دیگر مانند سیستم همکارانتان اجرا کنید . برنامه ای که شما نوشته اید ممکن است به نسخه ی خاصی از پایتون یا کتابخانه خاصی احتیاج داشته باشد و شاید سیستم همکار شما دارای چنین نسخه هایی نباشد و برنامه شما به درستی کار نکند . در اینجا با استفاده از Image  برنامه ای میسازید و نسخه دقیق پایتون و کتابخانه های لازم را در آن قرار می دهید و شما این Image را به هر سیستمی که داکر را روی آن نصب باشد در کانتینر دلخواه خود، متصل می کنید و برنامه را بدون هیچ تغییری بدرستی اجرا می شود .

کانتینر(Container) چیست ؟

کانتینر در داکر چیست، در واقع یک محیط ایزوله و سبک است که به شما امکان می‌دهد یک برنامه و تمام چیزهایی که برای اجرای آن نیاز دارید (مانند کتابخانه‌ها و وابستگی‌ها) را در یک بسته‌بندی کوچک اجرا کنید.

به زبان ساده‌تر:

فرض کنید می‌خواهید یک برنامه رو روی کامپیوترهای مختلف اجرا کنید، اما هر کامپیوتر تنظیمات یا نرم‌افزارهای خودش رو داره. اینجاست که کانتینر به کمک میاد! کانتینر مثل یک جعبه است که برنامه و تمام چیزهایی که نیاز داره (مثل نسخه خاصی از پایتون یا یک دیتابیس) توش قرار می‌گیره، و شما می‌تونید این جعبه رو هر جا اجرا کنید، بدون اینکه نگران ناسازگاری باشین .

به همین دلیل، کانتینرها خیلی سبک‌تر و سریع‌تر از ماشین‌های مجازی (Virtual Machines) هستند، چون فقط بخش مورد نیاز از سیستم عامل رو استفاده می‌کنند .

مزایای داکر چیست؟

و اما هدف اصلی داکر، حل مشکلی به نام “ناسازگاری محیط (Environment Inconsistency)” است.

در توضیح ناسازگاری محیط باید بگویم، محیط‌های مختلف (مثلاً محیط توسعه، تست و تولید) یکسان نیستند و تفاوت‌هایی در موارد زیر دارند:

  1. نسخه‌های سیستم‌عامل
  2. نسخه‌های زبان‌های برنامه‌نویسی (مثلا پایتون ۲ در مقابل پایتون ۳)
  3. کتابخانه‌ها و وابستگی‌های سیستم

این شرایط باعث می‌شود برنامه‌ای که روی سیستم شما اجرا می‌شود، روی سرور به مشکل بخورد.

فرض  کنید برای حمل و نقل کالا در سراسر جهان، هر بار کشتی‌ها مجبور بودند برای هر نوع بار (گندم، ماشین، لباس) یک جعبه مخصوص بسازند. فرآیند پر کردن، تخلیه و انتقال کابوس می‌شد! اما با اختراع کانتینرهای حمل و نقل استاندارد، این فرآیند فوق‌العاده ساده شد: بار هر چیزی که باشد، در یک کانتینر استاندارد قرار می‌گیرد و به راحتی با کشتی، قطار یا کامیون حمل می‌شود.

داکر دقیقاً همین کار را برای نرم‌افزار انجام می‌دهد:

  1. استانداردسازی: همه چیز در یک قالب مشخص(استاندارد)بسته بندی می‌شود.
  2. ایزوله‌سازی : این کانتینرازمحیط بیرون جداست و مستقل از محیط میزبان اجرا می‌شود (چیزی بر روی سرور اصلی در آن تأثیر نمی‌گذارد.)
  3. قابل حمل بودن: کانتینررا می‌توان به سادگی از کامپیوتر توسعه‌دهنده به سرور تست یا سرور اصلی منتقل کرد، بدون اینکه نگران وابستگی‌ها و تنظیمات باشید چون تغییری نمی‌کنند.

به همین دلیل داکر نقشی اساسی در سرعت و اطمینان فرایند استقرار (Deployment) و تحویل نرم‌افزار (Delivery) ایفا می‌کند و بخشی جدایی‌ناپذیر از فرهنگ DevOps است.

 

توضیح کلی داکر چیست
توضیح کلی داکر چیست

حال برای شما سوال پیش بیاید که ماشین مصنوعی (Virtual Machine) چیست و چه کاربردی دارد ؟ با اینکه خارج از بحث داکر هست اما برای درک بهتر شما از داکر اشاره کوچکی نیز به این موضوع می کنیم .

ماشین مصنوعی (Virtual Machine) چیست ؟

به زبان ساده:

تصور کنید کامپیوتر شما مثل یک خانه است. شما می‌خواهید داخل این خانه یک اتاق جداگانه بسازید که قوانین خودش را دارد. مثلاً اتاقی که می‌توانید داخلش مثل یک محیط متفاوت زندگی کنید. این اتاق همان ماشین مجازی است.

ماشین مجازی چگونه کار می‌کند؟

  1. Hypervisor یا نرم‌افزار ماشین مجازی: یک نرم‌افزار (مثل VMware، VirtualBox یا Hyper-V) به شما امکان می‌دهد ماشین‌های مجازی بسازید. این نرم‌افزار منابع سخت‌افزاری (مثل CPU، RAM و حافظه) را بین سیستم واقعی و ماشین‌های مجازی تقسیم می‌کند.
  2. سیستم‌عامل مهمان: داخل ماشین مجازی، می‌توانید یک سیستم‌عامل دیگر نصب کنید. مثلاً اگر روی لپ‌تاپ شما ویندوز است، می‌توانید یک لینوکس در ماشین مجازی اجرا کنید.
  3. منابع مجازی‌سازی‌شده: ماشین مجازی از منابع واقعی سیستم (مثل پردازنده و رم) استفاده می‌کند، اما همه‌چیز در یک محیط مجازی اتفاق می‌افتد، بدون اینکه به سیستم اصلی آسیب برساند.

تفاوت بین ماشین مصنوعی و کانتینر :

  • ماشین مجازی: کل سیستم‌عامل را شبیه‌سازی می‌کند و سنگین‌تر است.
  • کانتینر: فقط بخش‌های مورد نیاز برنامه را شبیه‌سازی می‌کند و سبک‌تر است.

برای کار با داکر، باید سه اصطلاح اصلی را بشناسید:

. داکر ایمیج (Docker Image)

  • یک قالب (Template) فقط خواندنی (Read-Only) است که شامل تمام دستورالعمل‌های لازم برای ساخت یک کانتینر است، مثل دستور پخت کیک (خود کیک نیست، اما شامل تمام مواد لازم و مراحل پخت است)

۲. داکر کانتینر (Docker Container)

  • یک نمونه فعال و در حال اجرا از یک ایمیج. این همان محیط ایزوله‌ای است که برنامه شما در آن کار می‌کند. مثل کیکی که بر اساس دستور پخت (ایمیج) پخته شده و آماده خوردن است.

۳. داکر فایل (Dockerfile)

  • یک فایل متنی حاوی تمام دستورات مورد نیاز برای ساخت یک داکر ایمیج است. مثل خود دستور پخت که شما آن را روی کاغذ می‌نویسید (مراحل: آرد اضافه کن، بپز، …).

داکر در مقابل کوبرنتیس  (Docker vs Kubernetes)

این یکی از مهم‌ترین سوالات در حوزه مهندسی نرم‌افزار است، چون غالبا این دو با هم اشتباه گرفته می‌شوند، در حالی که نقش هایشان متفاوت است:

داکر (Docker) کوبرنتیس (Kubernetes) ویژگی
ابزاری برای کانتینری‌سازی (بسته‌بندی برنامه) ابزاری برای ارکستراسیون کانتینرها (مدیریت آن بسته‌ها) تعریف
روی یک کانتینر یا یک سرور تمرکز دارد. روی خوشه‌ای از سرورها (Cluster) و هزاران کانتینر تمرکز دارد. مقیاس
ساخت، اجرای ایزوله و توزیع یک کانتینر. مدیریت، خودکارسازی استقرار، مقیاس‌دهی (Scaling) و مدیریت سلامت کانتینرها. وظیفه اصلی
داکر مثل آجر ساختمانی استاندارد است. کوبرنتیس مثل مهندس معماری و نقشه‌بردار است که از آن آجرها یک آسمان‌خراش بزرگ می‌سازد و آن را مدیریت می‌کند. یه مقایسه ساده

 

در نهایت شما برای استفاده از کوبرنتیس، به داکر نیاز دارید (یا ابزارهای مشابه کانتینر‌سازی). کوبرنتیس بدون کانتینرها بی‌معنی است، و داکر اغلب برای مدیریت در مقیاس بزرگ به کوبرنتیس متکی است.

مقاله گیت به زبان ساده را از کداستورپرو را بخوانید

داکر در فرانت‌اند و بک‌اند

داکر به هیچ حوزه خاصی محدود نیست و به طور گسترده در هر دو حوزه استفاده می‌شود، اما تاثیرگزاری آن کمی متفاوت است:

۱ . در بخش بک‌اند (Backend)

داکر یک ابزار حیاتی است. زیرا بک‌اند معمولاً شامل چندین جزء است: دیتابیس (مانند PostgreSQL)، سرویس‌های کش( مانRedis)، APIها با  Node.js یا Python و… و داکر به شما اجازه می‌دهد هر جزء بک‌اند را در یک کانتینر جداگانه اجرا کنید. این ایزوله‌سازی باعث می‌شود توسعه، تست و به‌روزرسانی هر سرویس (میکروسرویس) کاملاً مستقل باشد.

  1. در بخش فرانت‌اند (Frontend)

داکردر فرانت اند یک ابزار مفید است. اگرچه کدهای فرانت‌اند )مانند React یا( Vue عمدتاً در مرورگر کاربر اجرا می‌شوند، اما برای سرو کردن (Serving) این کدها در مرحله تولید، یا برای اجرای تست‌ها و ساخت (Build) پروژه، به یک سرور وب )مانند Nginx  یا ( Apache نیاز است.  داکر می‌تواند کد فرانت‌اند شما را به همراه سرور وب مورد نیاز، در یک کانتینر بسته‌بندی کند تا فرآیند Build و استقرار آن در سرور نهایی، ساده و قابل تکرار باشد.

چرا باید از داکر (ِDocker) استفاده کنیم ؟

داکر به‌دلیل ساده‌سازی توسعه، استقرار و اجرای نرم‌افزارها در محیط‌های مختلف، بسیار کاربردی و محبوب است.

کاربردهای داکر از نیازهای واقعی توسعه‌دهندگان و تیم‌های عملیاتی نشأت می‌گیرد. در ادامه توضیح می‌دهم چرا داکر بسیار کاربردی است:

1. ایزوله‌سازی محیط‌ها

  • هر کانتینر داکر به‌طور ایزوله اجرا می‌شود، به این معنی که شما می‌توانید نرم‌افزارها و وابستگی‌های آن‌ها را بدون نگرانی از تداخل با دیگر برنامه‌ها در یک سیستم، اجرا کنید.
  • مثلاً می‌توانید چند نسخه از یک برنامه یا سرویس (مثل نسخه‌های مختلف یک پایگاه داده) را همزمان اجرا کنید.

2. قابل حمل بودن (Portability)

  • کانتینرها به شما امکان می‌دهند که برنامه را با همه وابستگی‌هایش (کتابخانه‌ها، فایل‌ها، تنظیمات) بسته‌بندی کرده و روی هر سیستم عاملی که داکر را پشتیبانی می‌کند اجرا کنید.
  • شعار داکر: “Build once, run anywhere” (یک بار بساز، همه‌جا اجرا کن).

3. سازگاری در محیط‌های مختلف

  • مشکل “روی کامپیوتر من کار می‌کند، اما روی سرور کار نمی‌کند” با داکر حل می‌شود، چون محیط اجرای برنامه کاملاً یکنواخت و کنترل‌شده است.

4. سبک بودن در مقایسه با ماشین‌های مجازی

  • کانتینرها برخلاف ماشین‌های مجازی نیاز به شبیه‌سازی کل سیستم‌عامل ندارند، بلکه فقط قسمت‌های لازم را به اشتراک می‌گذارند. این باعث می‌شود:
    • سرعت بالا: سریع‌تر از ماشین‌های مجازی راه‌اندازی می‌شوند.
    • مصرف کمتر منابع: رم و CPU کمتری استفاده می‌کنند.

5. خودکارسازی فرآیندها

  • با داکر می‌توانید فایل‌های Dockerfile بسازید و دقیقاً مشخص کنید که برنامه چگونه باید نصب و اجرا شود. این فرآیندها کاملاً خودکار و قابل تکرار هستند.

6. مدیریت ساده وابستگی‌ها

  • شما می‌توانید هر چیزی که برنامه به آن نیاز دارد، مانند نسخه خاصی از کتابخانه‌ها یا ابزارها، را داخل یک کانتینر تعریف کنید. این یعنی نیازی به نصب این موارد روی سیستم اصلی نیست.

7. مقیاس‌پذیری (Scalability)

  • داکر به شما کمک می‌کند تا به راحتی سرویس‌های خود را در مقیاس بزرگ اجرا کنید. مثلاً اگر یک سرویس وب دارید، می‌توانید چندین نسخه از آن را در کانتینرهای مختلف اجرا کنید تا بار پردازشی بین آن‌ها تقسیم شود.

8. ابزارهای اکوسیستم داکر

  • Docker Compose: برای اجرای چندین کانتینر به‌صورت همزمان.
  • Docker Swarm: برای مدیریت کانتینرها در مقیاس بالا (ارکستراسیون).
  • Docker Hub: مخزن آنلاین برای به اشتراک‌گذاری و دریافت کانتینرها.

چرا داکر، آینده است؟

داکر صرفاً یک ابزار نیست، بلکه یک استاندارد صنعتی و یک تغییر پارادایم در نحوه ساخت، تست و تحویل نرم‌افزار است. با فراهم کردن بسته‌بندی‌های ایزوله‌شده و قابل حمل به نام کانتینر، داکر مشکل قدیمی ناسازگاری محیط‌ها را حل کرد.

چه در حال توسعه یک پروژه کوچک در فرانت‌اند باشید، چه در حال ساخت یک سیستم بزرگ میکروسرویس در بک‌اند، داکر به شما اطمینان می‌دهد که برنامه شما همواره در هر محیطی و در هر مقیاسی، به بهترین شکل ممکن اجرا خواهد شد. تسلط بر داکر امروز، کلید ورود به دنیای پیشرفته DevOps و آینده مهندسی نرم‌افزاراست