داکر چیست؟ هر آنچه باید درباره Docker و معماری آن بدانید

اشتراک گذاری:
داکر چیست
فهرست مطالب

داکر چیست؟ داکر یک پلتفرم منبع‌باز است که اپلیکیشن‌ها را در واحدهای ایزوله‌ای به‌نام کانتینرها بسته‌بندی می‌کند تا بدون وابستگی به محیط اجرا شوند؛ به‌عبارت ساده‌تر، نرم‌افزار شما همراه با تمام وابستگی‌هایش درون یک جعبه قرار می‌گیرد و روی هر سروری بدون دردسر اجرا می‌شود. برای اینکه بدانید معماری داکر چگونه کار می‌کند و چه تفاوتی با ۶ فناوری مشابه دارد، ادامه این مطلب را مطالعه کنید.

داکر چیست و چه مشکلی را حل می‌کند؟

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

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

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

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

بنابراین یک کانتینر لینوکسی به میزبان لینوکسی نیاز دارد. ابزارهایی مانند Docker Desktop برای ویندوز و مک، این امکان را با اجرای یک ماشین مجازی سبک لینوکسی در پس‌زمینه فراهم می‌کنند و این حس را به شما می‌دهند که کانتینرها مستقل از سیستم‌عامل هستند.

تاریخچه کوتاه Docker و سیر تکامل آن

حال که دانستید داکر چیست، دانستن تاریخچه‌ای از آن خالی از لطف نیست. داکر در سال ۲۰۱۳ توسط شرکت dotCloud معرفی و با ساده‌سازی استفاده از فناوری‌های کانتینرسازی لینوکس مثل cgroups و namespaces، به‌سرعت محبوب شد. این پلتفرم با فراهم‌کردن رجیستری تصاویر آماده و ابزارهایی مانند Docker Compose و Swarm، روند توسعه و استقرار نرم‌افزار را متحول کرد. با ظهور Kubernetes نقش داکر بیشتر به‌عنوان موتور کانتینر تثبیت شد؛ اما همچنان یکی از پایه‌های اصلی دنیای DevOps و توسعه نرم‌افزار مدرن است.

ابزارهای داکر برای مدیریت کانتینر
ابزارهای داکر برای مدیریت کانتینر

محصولات و ابزارهای داکر

Docker شامل چند محصول و ابزار اصلی است:

  • Docker Engine: هسته اصلی برای اجرای کانتینرها؛
  • Docker Desktop: نسخه گرافیکی برای توسعه‌دهندگان ویندوز و مک؛
  • Docker Hub: رجیستری ابری برای ذخیره و اشتراک‌گذاری ایمیج‌ها؛
  • Docker Enterprise: نسخه سازمانی با امکانات امنیتی و مدیریتی؛
  • Docker Compose: ابزار مدیریت چند کانتینر همزمان؛
  • Docker Swarm: راهکار ارکستراسیون داخلی Docker.

معماری Docker، اجزای اصلی و مفاهیم مهم

داکر از معماری کلاینت-سرور استفاده می‌کند. کلاینت داکر با داکر دایمون (Docker (Daemon ارتباط برقرار می‌کند که وظیفه انجام عملیات سنگین ساخت، اجرا و توزیع کانتینرهای داکر را برعهده دارد.

کلاینت و دایمون داکر می‌توانند روی همان سیستم اجرا شوند یا می‌توانید یک کلاینت داکر را به دایمون داکر راه دور متصل کنید. کلاینت و دایمون از طریق REST API و با استفاده از Unix Socket یا رابط شبکه با یکدیگر ارتباط برقرار می‌کنند. یکی دیگر از کلاینت‌های داکر، Docker Compose است که به شما اجازه می‌دهد با برنامه‌هایی که شامل چند کانتینر هستند، کار کنید.

اجزا و مفاهیم کلیدی داکر
اجزا و مفاهیم کلیدی داکر

دایمون داکر (Docker daemon)

دایمون داکر (dockerd) به درخواست‌های API داکر گوش می‌دهد و اشیاء داکر مانند ایمیج‌ها، کانتینرها، شبکه‌ها و ولوم‌ها را مدیریت می‌کند. دایمون می‌تواند با دیگر دایمون‌ها هم ارتباط برقرار نموده و خدمات داکر را مدیریت کند.

کلاینت داکر (Docker client)

کلاینت داکر (docker) اصلی‌ترین راه تعامل بسیاری از کاربران با داکر است. وقتی از دستوری مانند `docker run` استفاده می‌کنید، کلاینت این دستور را به dockerd ارسال می‌کند تا اجرا شود. دستور docker از Docker API استفاده می‌کند و می‌تواند با بیش‌از یک دایمون ارتباط برقرار کند.

Docker Desktop

Docker Desktop برنامه‌ای آسان برای نصب روی Mac، Windows یا Linux است که امکان ساخت و به‌اشتراک‌گذاری برنامه‌ها و میکروسرویس‌های کانتینری را فراهم می‌کند. Docker Desktop شامل دایمون داکر (dockerd)، کلاینت داکر، Docker Compose Docker Content Trust, Kubernetes, and Credential Helper است.

رجیستری‌های داکر (Docker registries)

رجیستری داکر محل ذخیره‌سازی ایمیج‌های داکر (Docker Images) است. Docker Hub یک رجیستری عمومی است که هر کسی می‌تواند از آن استفاده کند و داکر به‌طور پیش‌فرض ایمیج‌ها را از Docker Hub جست‌وجو می‌کند. شما می‌توانید یک رجیستری خصوصی هم راه‌اندازی کنید.

وقتی از دستورات `docker pull` یا `docker run` استفاده می‌کنید، داکر ایمیج‌های موردنیاز را از رجیستری تنظیم‌شده شما دریافت می‌کند. وقتی از دستور `docker push` استفاده می‌کنید، داکر ایمیج شما را به رجیستری تنظیم‌شده ارسال می‌کند.

اشیاء داکر (Docker objects)

هنگامی که از داکر استفاده می‌کنید، در حال ایجاد و استفاده از ایمیج‌ها، کانتینرها، شبکه‌ها، ولوم‌ها، پلاگین‌ها و سایر اشیاء هستید. در ادامه به برخی از این اشیاء اشاره می‌کنیم.

ایمیج‌ها و کانتینرهای داکر
ایمیج‌ها و کانتینرهای داکر

ایمیج‌ها (Images)

ایمیج یک قالب فقط‌خواندنی است که دستورالعمل‌هایی برای ساخت کانتینر داکر دارد. اغلب ایمیج‌ها براساس یک ایمیج دیگر ساخته می‌شوند و شامل تغییرات اضافی هستند؛ برای مثال ممکن است ایمیجی براساس Ubuntu بسازید که Apache Web Server و برنامه شما را همراه با پیکربندی‌های لازم نصب کند.

شما می‌توانید ایمیج‌های خود را بسازید یا از ایمیج‌های آماده دیگران استفاده کنید. برای ساخت ایمیج خود، می‌توانید یک Dockerfile ایجاد کنید که شامل دستورالعمل‌هایی برای ساخت و اجرای ایمیج است. هر دستور در Dockerfile یک لایه در ایمیج ایجاد می‌کند. وقتی Dockerfile را تغییر می‌دهید و دوباره ایمیج را می‌سازید، تنها لایه‌های تغییریافته دوباره ساخته می‌شوند. این فرایند باعث می‌شود ایمیج‌ها سبک، کوچک و سریع باشند.

کانتینرها (Containers)

اما کانتینر داکر چیست؟ کانتینر یک نمونه اجرایی از یک ایمیج است که با استفاده از Docker API یا CLI می‌توان آن را ایجاد، شروع، توقف، انتقال یا حذف کرد. شما می‌توانید کانتینر را به یک یا چند شبکه متصل کنید، به آن حافظه اضافه کنید یا حتی از وضعیت فعلی آن یک ایمیج جدید بسازید.

به‌طور پیش‌فرض، یک کانتینر از دیگر کانتینرها و حتی میزبان خود ایزوله است. شما می‌توانید میزان ایزولاسیون شبکه، ذخیره‌سازی یا سایر زیرسیستم‌های کانتینر را کنترل کنید.

کانتینر توسط ایمیج و هر گزینه پیکربندی که هنگام ایجاد یا شروع آن فراهم می‌کنید، تعریف می‌شود. وقتی یک کانتینر حذف شود، هر تغییر غیرثابت در وضعیت آن ناپدید می‌شود.

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

مزایای داکر
مزایای داکر

چرا از داکر استفاده کنيم؟

برخی از دلایل اصلی استفاده از داکر، عبارت‌اند از:

  • قابلیت حمل (Portability): داکر به توسعه‌دهندگان کمک می‌کند برنامه‌هایشان را همراه با تمام وابستگی‌ها در قالب یک کانتینر سبک بسته‌بندی کنند و همین باعث می‌شود عملکرد در محیط‌های مختلف یکسان باشد؛
  • تکرارپذیری (Reproducibility): با قرارگرفتن برنامه‌ها و وابستگی‌ها داخل کانتینر، تنظیمات نرم‌افزار در محیط توسعه، تست و تولید یکسان باقی می‌ماند؛
  • بهره‌وری (Efficiency): معماری مبتنی بر کانتینر داکر باعث بهینه‌سازی مصرف منابع می‌شود و امکان اجرای چند برنامه ایزوله روی یک سیستم میزبان را فراهم می‌کند؛
  • مقیاس‌پذیری (Scalability): ویژگی‌های مقیاس‌پذیر داکر، مدیریت برنامه‌ها را هنگام افزایش بار کاری بسیار ساده‌تر می‌کند.

نحوه عملکرد و کارکرد داکر چیست؟

داکر روی سیستم‌عامل میزبان نصب می‌شود و هر بار که شما یک ایمیج اجرا می‌کنید، یک کانتینر ساخته می‌شود. این کانتینر سبک است، منابع را بهینه مصرف می‌کند و سریع راه‌اندازی می‌شود. در ادامه، نحوه عملکرد داکر را با یک مثال توضیح می‌دهیم.

فرآیند اجرای داکر
فرآیند اجرای داکر

دستور زیر یک کانتینر Ubuntu ایجاد می‌کند، به‌صورت تعاملی به ترمینال شما متصل می‌شود و /bin/bash را اجرا می‌کند.

docker run -i -t ubuntu /bin/bash

وقتی این دستور را اجرا می‌کنید، اتفاقات زیر رخ می‌دهد (با فرض اینکه از پیکربندی پیش‌فرض رجیستری استفاده می‌کنید):

  1. اگر ایمیج Ubuntu روی سیستم شما موجود نباشد، داکر آن را از رجیستری تنظیم‌شده شما دریافت می‌کند؛ انگار که شما دستور docker pull ubuntu را به‌صورت دستی اجرا کرده‌اید؛
  2. داکر یک کانتینر جدید ایجاد می‌کند؛ مثل اینکه دستور docker container create را به‌صورت دستی اجرا کرده‌اید؛
  3. داکر یک سیستم فایل خواندنی-نوشتنی به کانتینر اختصاص می‌دهد که به‌عنوان لایه نهایی عمل می‌کند و این امکان را می‌دهد که کانتینر در حال اجرا فایل‌ها و دایرکتوری‌ها را در سیستم فایل محلی خود ایجاد کند یا تغییر دهد؛
  4. داکر یک رابط شبکه ایجاد می‌کند تا کانتینر به شبکه پیش‌فرض متصل شود؛ زیرا شما هیچ گزینه شبکه‌ای مشخص نکرده‌اید. این شامل اختصاص یک آدرس IP به کانتینر هم می‌شود. به‌طور پیش‌فرض، کانتینرها می‌توانند از طریق اتصال شبکه میزبان به شبکه‌های خارجی متصل شوند؛
  5. داکر کانتینر را راه‌اندازی و دستور /bin/bash را اجرا می‌کند. چون کانتینر به‌صورت تعاملی اجرا می‌شود و به ترمینال شما متصل است (به‌دلیل گزینه‌های -i و -t)، می‌توانید با صفحه‌کلید ورودی بدهید و داکر خروجی را در ترمینال نمایش می‌دهد؛
  6. وقتی دستور exit را برای پایان‌دادن به /bin/bash اجرا کنید، کانتینر متوقف می‌شود، اما حذف نمی‌شود. می‌توانید دوباره آن را راه‌اندازی یا حذف کنید.
موارد استفاده داکر
موارد استفاده داکر

کاربرد و قابلیت‌های داکر چیست؟

برخی از موارد استفاده داکر، عبارت‌اند از:

  • ادغام و استقرار مداوم (CI/CD): داکر به بهینه‌سازی و خودکارسازی فرایند تحویل نرم‌افزار کمک و انتشار سریع‌تر و قابل‌اعتمادتر را تضمین می‌کند؛ برای مثال، تیمی که روی یک فروشگاه آنلاین کار می‌کند، می‌تواند از داکر استفاده کند تا هر بار که کسی کد را تغییر می‌دهد، سایت به‌صورت خودکار تست و به‌روزرسانی شود.
  • معماری میکروسرویس‌ها: داکر توسعه، استقرار و مدیریت میکروسرویس‌ها را تسهیل و امکان مقیاس‌پذیری و نگهداری مستقل هر سرویس را فراهم می‌کند؛ به‌عنوان‌مثال، یک اپلیکیشن تحویل غذا می‌تواند کانتینرهای جداگانه برای ورود کاربران، ثبت سفارش و ردیابی تحویل داشته باشد و هر بخش می‌تواند بدون تأثیر بر سایر بخش‌ها به‌روزرسانی یا اصلاح شود.
  • ثبات محیط توسعه:  داکر به تمام توسعه‌دهندگان همان محیط کاری را می‌دهد؛ بدون اینکه توجه کند از چه سیستمی استفاده می‌کنند. برای مثال در یک تیم، یکی از اعضا از ویندوز و دیگری از مک استفاده می‌کند، اما داکر اطمینان می‌دهد که برنامه برای همه به یک شکل اجرا شود و مشکلاتی مانند «روی سیستم من کار می‌کند، ولی روی سیستم دیگر نه» رخ ندهد.
  • استقرار چندابری و ابری هیبریدی: داکر اجرای برنامه‌ها روی سکوهای ابری مختلف مانند AWS، Azure یا Google Cloud را ساده می‌کند؛ مثلا کسب‌وکاری که امروز از AWS استفاده می‌کند، می‌تواند فردا با کمک کانتینرهای داکر، برنامه خود را با کمترین تلاش به Google Cloud منتقل کند.

شاید برای شما جالب باشد بدانید، شرکت‌هایی مانند Netflix، Spotify، PayPal و BBC News با استفاده از داکر توانسته‌اند زمان downtime را کاهش دهند، scaling را آسان‌تر کنند، امنیت تراکنش‌ها را بهبود دهند و محتوای خبری را سریع‌تر مستقر کنند.

مزایا و معایب استفاده از Docker چیست؟

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

مزایا داکرمعایب داکر
سازگاری با طیف وسیعی از سیستم‌ها و محیط‌ها؛ کار توسعه‌دهندگان را آسان‌تر می‌کندمستندات گسترده داکر همیشه با به‌روزرسانی‌های پلتفرم همگام نیست
کانتینرهای داکر مبتنی بر ابر هستند و برای اجرای مطمئن نیاز به حافظه فعال زیادی ندارندتوسعه‌دهندگانی که از زیرساخت‌های دیگر می‌آیند، شروع را آسان ولی تسلط را دشوار می‌بینند
حذف نصب‌ها و پیکربندی‌های اضافی؛ استقرار سریع و آساننبود جداسازی کامل؛ چند کانتینر می‌توانند سیستم میزبان را در معرض حمله قرار دهند
امکان استفاده از هر زبان برنامه‌نویسی و افزایش/کاهش منابع کانتینر برحسب نیازمدیریت چند کانتینر به‌طور همزمان بدون قابلیت‌های ارکستراسیون دشوار است

مقایسه داکر با فناوری‌های مشابه

اگرچه Docker مشهورترین پلتفرم کانتینرسازی است، اما چند فناوری و ابزار مشابه وجود دارد که بسته به نیاز می‌توانند جایگزین یا مکمل آن باشند. در جدول زیر این فناوری‌ها را با هم مقایسه کرده‌ایم تا بتوانید بهترین تصمیم را بگیرید:

فناوریمزایامعایبمناسب برای
Docker– محبوب‌ترین پلتفرم کانتینرسازی
– مستندات و جامعه کاربری بزرگ
-. سازگاری با ابزارهای DevOps و CI/CD
– نیاز به یادگیری مفاهیم کانتینر
– محدودیت‌های امنیتی در صورت پیکربندی اشتباه
– توسعه‌دهندگان
– تیم‌های کوچک تا متوسط
– پروژه‌های میکروسرویس
Podman– بدون daemon و Rootless
– امنیت بالاتر
– CLI مشابه Docker
– جامعه کاربری کوچک‌تر
– برخی ابزارها مثل Docker Compose نیاز به پیکربندی جدا دارند
– پروژه‌های حساس به امنیت و محیط‌های لینوکس
containerd– اجرای سبک و سریع کانتینر
– زیرساخت بسیاری از ابزارها از جمله Docker
– ابزار مدیریتی و ارکستراسیون ندارد– توسعه‌دهندگان حرفه‌ای
– زیرساخت کانتینرها
– ارکستراسیون با Kubernetes
LXC / LXD– اجرای کل سیستم‌عامل داخل کانتینر
– کنترل دقیق منابع و امنیت
– پیچیده‌تر از Docker برای اپلیکیشن‌ها
– مستندات و جامعه محدود
– سناریوهای نیازمند ایزوله کامل سیستم
– آزمایش سیستم‌عامل‌ها
rkt (Rocket)– امنیت بالا
– استاندارد Open Container Initiative
– کمتر محبوب
– منسوخ‌شدن پروژه در برخی محیط‌ها
– سازمان‌ها و محیط‌های حرفه‌ای که نیاز به امنیت و استاندارد دارند
OpenShift / OKD– ابزار مدیریتی و امنیتی قوی
– مناسب Enterprise
– ارکستراسیون خودکار
– پیچیدگی بالا و نیاز به منابع زیاد– سازمان‌های بزرگ
– پروژه‌های Enterprise و توزیع‌شده

ارکستراسیون کانتینرها با Kubernetes و Docker Swarm

مدیریت کانتینرها با Docker روی یک ماشین واحد بسیار ساده و کارآمد است، اما وقتی تعداد کانتینرها به صدها یا حتی هزار عدد می‌رسد و نیاز است روی چند سرور (یک خوشه یا Cluster) اجرا شوند، مدیریت دستی آن‌ها تقریباً غیرممکن می‌شود. مسائلی مانند شبکه‌بندی، توزیع بار و جایگزینی کانتینرهای ازکارافتاده، بدون ابزار مناسب، بسیار پیچیده و زمان‌بر خواهند بود.

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

Kubernetes (K8s)

Kubernetes استاندارد صنعتی و محبوب‌ترین ابزار ارکستراسیون در جهان است. وظایف اصلی آن شامل موارد زیر است:

  • زمان‌بندی (Scheduling): تصمیم‌گیری هوشمند درباره اینکه هر کانتینر روی کدام سرور اجرا شود؛
  • خودترمیمی (Self-healing): اگر یک کانتینر از کار بیفتد، به‌صورت خودکار یک کانتینر جایگزین ایجاد می‌کند؛
  • مقیاس‌پذیری افقی (Horizontal Scaling): به‌راحتی می‌توانید تعداد کانتینرهای یک اپلیکیشن را کم یا زیاد کنید؛
  • کشف سرویس و توزیع بار (Service Discovery & Load Balancing): کانتینرها می‌توانند یکدیگر را در شبکه پیدا کنند و ترافیک بین آن‌ها پخش شود.

Docker Swarm

Docker Swarm ابزار ارکستراسیون بومی Docker است که برای مدیریت چند کانتینر روی چند سرور طراحی شده است. استفاده از آن ساده و سریع است و برای پروژه‌های کوچک یا تیم‌هایی که تازه با کانتینرها کار می‌کنند، گزینه مناسبی محسوب می‌شود. بااین‌حال، قابلیت‌ها و انعطاف‌پذیری Docker Swarm نسبت به Kubernetes محدودتر است و برای پروژه‌های بزرگ و نیازمند مقیاس‌پذیری پیچیده، کمتر توصیه می‌شود.

سخن پایانی

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

منبع ++

تفاوت داکر و ماشین مجازی چیست؟

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

آیا داکر رایگان است؟

بله! نسخه متن‌باز داکر رایگان است. نسخه Enterprise امکانات بیشتری دارد.

داکر روی چه سیستم‌عامل‌هایی اجرا می‌شود؟

ویندوز، لینوکس و مک.

آیا یادگیری داکر برای توسعه‌دهندگان ضروری است؟

بله! چون امروزه بیشتر پروژه‌های حرفه‌ای مبتنی بر CI/CD و میکروسرویس‌ها از داکر استفاده می‌کنند.