مفاهیم پایه

داکر (Docker) چیست و چرا برای استقرار نرم‌افزار محبوب شده است؟

تهیه: کلودیفای (نگارش با کمک هوش مصنوعی) · انتشار: · زمان مطالعه: ۷ دقیقه

Dockerمفاهیم پایهداکر (Docker) چیست وچرا برای استقرار نرم‌افزارمحبوب شده است؟مجلهٔ کلودیفایclodify.net/blog
پاسخ کوتاه

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

مشکلی که داکر حل می‌کند

جملهٔ معروف «روی سیستم من کار می‌کرد!» را احتمالاً شنیده‌اید. برنامه‌ای که روی لپ‌تاپ برنامه‌نویس بی‌نقص اجرا می‌شود، روی سرور به خطا می‌خورد؛ چون نسخهٔ پایتون فرق دارد، یک کتابخانهٔ سیستمی نصب نیست یا تنظیمی جا افتاده است. هرچه تعداد سرویس‌ها و سرورها بیشتر شود، مدیریت این تفاوت‌ها سخت‌تر می‌شود. دو برنامه که به دو نسخهٔ متفاوت از یک کتابخانه نیاز دارند، روی یک سرور با هم تداخل پیدا می‌کنند.

داکر این مشکل را با یک ایدهٔ ساده حل می‌کند: به‌جای اینکه برنامه را روی سرور «نصب» کنید، آن را همراه با محیط اجرایی‌اش بسته‌بندی می‌کنید و همان بسته را همه‌جا اجرا می‌کنید. این بسته روی لپ‌تاپ، سرور تست و سرور اصلی یکسان است.

از کد تا کانتینر
docker builddocker pushdocker runDockerfileدستور ساختایمیجبستهٔ قابل‌حملرجیستریDocker Hub یا خصوصیکانتینراجرا روی سرورdocker builddocker pushdocker runDockerfileدستور ساختایمیجبستهٔ قابل‌حملرجیستریDocker Hub یا خصوصیکانتینراجرا روی سرور
شکل ۱ Dockerfile به ایمیج تبدیل می‌شود، ایمیج در رجیستری نگهداری می‌شود و روی هر سروری به شکل کانتینر اجرا می‌شود.

مفاهیم اصلی داکر به زبان ساده

برای کار با داکر کافی است چهار مفهوم را بشناسید:

ایمیج (Image)

ایمیج یک قالب فقط‌خواندنی است که شامل سیستم‌فایل لازم برای اجرای برنامه است: فایل‌های برنامه، کتابخانه‌ها، مفسر یا runtime و تنظیمات پیش‌فرض. ایمیج‌ها لایه‌لایه ساخته می‌شوند؛ مثلاً یک لایهٔ پایه از دبیان، یک لایه برای پایتون و یک لایه برای کد شما. لایه‌های مشترک بین ایمیج‌ها فقط یک بار دانلود و ذخیره می‌شوند.

کانتینر (Container)

کانتینر نمونهٔ در حال اجرای یک ایمیج است. از یک ایمیج می‌توانید چندین کانتینر بسازید. هر کانتینر فرایندهای خودش، شبکهٔ خودش و یک لایهٔ قابل‌نوشتن روی ایمیج دارد. وقتی کانتینر حذف شود، تغییراتی که داخلش داده‌اید هم از بین می‌رود، مگر اینکه داده را در Volume نگه دارید.

رجیستری (Registry)

رجیستری مخزن ایمیج‌هاست. معروف‌ترین آن Docker Hub است که ایمیج‌های رسمی Nginx، PostgreSQL، Redis و هزاران نرم‌افزار دیگر را میزبانی می‌کند. شرکت‌ها معمولاً رجیستری خصوصی هم دارند.

Dockerfile

Dockerfile فایل متنی ساده‌ای است که مراحل ساخت ایمیج را تعریف می‌کند. یک مثال کوچک برای یک برنامهٔ پایتونی:

FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "main.py"]

با دستور docker build -t myapp . از این فایل ایمیج ساخته می‌شود و با docker run -d myapp اجرا می‌شود.

لایه‌های اجرای کانتینر روی سرور مجازی
کانتینرهابرنامهٔ شما، Nginx، دیتابیس
Docker Engineمدیریت ایمیج، شبکه و Volume
هستهٔ لینوکسNamespaces و cgroups برای ایزوله‌سازی
سرور مجازی (VPS)ماشین مجازی روی سخت‌افزار دیتاسنتر
شکل ۲ همهٔ کانتینرها هستهٔ لینوکس سرور را مشترک استفاده می‌کنند؛ به همین دلیل سبک و سریع هستند.

کانتینر چطور کار می‌کند؟

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

  • Namespaces: هر کانتینر فقط فرایندها، شبکه، نام میزبان و سیستم‌فایل خودش را می‌بیند.
  • cgroups: مقدار CPU، رم و ورودی‌وخروجی دیسکی که هر کانتینر می‌تواند مصرف کند محدود می‌شود.

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

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

چرا داکر این‌قدر محبوب شد؟

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

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

docker run -d --name redis -p 127.0.0.1:6379:6379 redis:7

جداسازی سرویس‌ها: چند پروژه با نسخه‌های مختلف PHP، Node.js یا پایتون بدون تداخل روی یک سرور اجرا می‌شوند.

به‌روزرسانی و برگشت آسان: نسخهٔ جدید یعنی ایمیج جدید. اگر مشکلی پیش آمد، کانتینر نسخهٔ قبلی را دوباره اجرا می‌کنید.

هماهنگی با CI/CD: خط تولید نرم‌افزار ایمیج را می‌سازد، تست می‌کند و همان ایمیج را روی سرور می‌برد.

اصطلاحات دیگری که زیاد می‌شنوید

وقتی کمی جلوتر بروید، با این مفاهیم هم سروکار خواهید داشت:

  • Volume: فضای ذخیره‌سازی ماندگاری که داکر مدیریت می‌کند و به کانتینر متصل می‌شود. دیتابیس‌ها همیشه باید داده‌شان را در Volume نگه دارند تا با حذف یا به‌روزرسانی کانتینر از بین نرود.
  • Network: کانتینرها می‌توانند در یک شبکهٔ مجازی مشترک قرار بگیرند و با نام یکدیگر را صدا بزنند؛ مثلاً برنامهٔ شما به آدرس db وصل می‌شود، بدون اینکه دیتابیس روی اینترنت باز باشد.
  • Docker Compose: ابزاری برای تعریف چند کانتینر مرتبط (مثلاً برنامه، دیتابیس و Redis) در یک فایل YAML و اجرای همهٔ آن‌ها با یک دستور. برای اغلب پروژه‌های واقعی روی یک سرور، Compose ساده‌ترین روش مدیریت است.
  • Tag: برچسب نسخهٔ ایمیج، مثل nginx:1.27 یا redis:7. استفاده از برچسب مشخص به‌جای latest باعث می‌شود به‌روزرسانی‌ها ناخواسته اتفاق نیفتند.

محدودیت‌ها و اشتباه‌های رایج

داکر برای همه‌چیز راه‌حل جادویی نیست. پیش از استفاده این نکته‌ها را بدانید:

  • داده‌ها موقتی‌اند: هر داده‌ای که باید بماند (دیتابیس، فایل‌های آپلودشده) را در Volume یا پوشهٔ میزبان نگه دارید. حذف کانتینر بدون Volume یعنی از دست رفتن داده.
  • پورت‌های منتشرشده فایروال را دور می‌زنند: وقتی با -p 8080:80 پورتی را منتشر می‌کنید، داکر مستقیماً قوانین iptables می‌سازد و UFW ممکن است جلویش را نگیرد. سرویس‌های داخلی را روی 127.0.0.1 منتشر کنید. توضیح کامل در آموزش فایروال UFW آمده است.
  • مصرف دیسک: ایمیج‌ها و لاگ‌های قدیمی جمع می‌شوند. هر چند وقت یک‌بار با docker system df وضعیت را ببینید و با docker image prune ایمیج‌های بلااستفاده را پاک کنید.
  • ایمیج‌های ناشناس: فقط از ایمیج‌های رسمی یا منابع معتبر استفاده کنید؛ ایمیج ناشناس ممکن است بدافزار داشته باشد.
  • دسترسی به Docker Hub از ایران: روی سرورهای ایران، دانلود ایمیج یا بسته‌های داکر ممکن است با خطای ۴۰۳ مواجه شود. راه‌حل‌ها در مقالهٔ رفع خطای ۴۰۳ داکر و apt در ایران آمده است.
نصب مستقیم یا داکر؟
نصب مستقیم
  • وابستگی‌ها روی کل سیستم نصب می‌شوند
  • تداخل نسخه‌ها بین پروژه‌ها
  • انتقال به سرور جدید یعنی نصب دوباره
  • برای یک سرویس ساده کافی است
در برابر
داکر
  • هر برنامه محیط جداگانه دارد
  • چند نسخه کنار هم بدون تداخل
  • انتقال با همان ایمیج
  • نیاز به یادگیری Volume و شبکه
شکل ۳ داکر وقتی ارزش بیشتری دارد که چند سرویس یا چند محیط دارید.

داکر برای چه کسانی مناسب است؟

اگر یک سایت وردپرسی ساده دارید، شاید نصب مستقیم روی سرور ساده‌تر باشد. اما در این موارد داکر تقریباً همیشه انتخاب بهتری است:

  • اجرای چند پروژه یا چند نسخهٔ متفاوت روی یک سرور؛
  • راه‌اندازی ابزارهای آماده مثل n8n، Uptime Kuma، Gitea یا Portainer که ایمیج رسمی دارند؛
  • ربات‌ها و میکروسرویس‌هایی که باید سریع روی سرور دیگری منتقل شوند؛
  • تیم‌هایی که می‌خواهند محیط توسعه و سرور یکسان باشد.

شروع کار با داکر روی سرور مجازی

برای شروع یک سرور لینوکسی با دست‌کم یک گیگابایت رم کافی است؛ برای چند کانتینر هم‌زمان، دو گیگ یا بیشتر راحت‌تر است. راهنمای انتخاب منابع را در چه مقدار رم و CPU لازم دارم بخوانید. سپس داکر را از مخزن رسمی نصب کنید؛ مراحل گام‌به‌گام در آموزش نصب داکر روی اوبونتو ۲۴.۰۴ آمده است. بعد از نصب، این دستورها را امتحان کنید:

docker run --rm hello-world
docker ps -a
docker images

اگر می‌خواهید بدون تعهد ماهانه داکر را یاد بگیرید، یک سرور ساعتی در کلودیفای بسازید، تمرین کنید و پس از پایان کار حذفش کنید. مستندات رسمی هم در docs.docker.com مرجع کاملی برای ادامهٔ مسیر است.

سؤالات متداول

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

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

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

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

برای اجرای داکر چه سروری لازم است؟

هر سرور مجازی لینوکسی با مجازی‌ساز KVM که هستهٔ نسبتاً جدیدی دارد مناسب است. یک گیگابایت رم برای شروع کافی است و مقدار واقعی به کانتینرهایی که اجرا می‌کنید بستگی دارد.

اگر کانتینر را پاک کنم، داده‌هایم از بین می‌رود؟

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

آماده‌اید؟ سرورتان را بسازید.

از ۱٬۲۰۰ تومان در ساعت · پرداخت ریالی

سرورتان را همین حالا بسازید.

ساعتی بپردازید. هر وقت خواستید حذف کنید.