داکر ابزاری است که برنامه را همراه با همهٔ وابستگیهایش (کتابخانهها، نسخهٔ زبان برنامهنویسی و تنظیمات) در یک بستهٔ استاندارد به نام ایمیج قرار میدهد و آن را به شکل کانتینری ایزوله روی هر سرور لینوکسی اجرا میکند. نتیجه این است که برنامه روی لپتاپ توسعهدهنده و روی سرور دقیقاً یکسان رفتار میکند، نصب و بهروزرسانی سریعتر میشود و چند سرویس بدون تداخل روی یک سرور کنار هم اجرا میشوند.
مشکلی که داکر حل میکند
جملهٔ معروف «روی سیستم من کار میکرد!» را احتمالاً شنیدهاید. برنامهای که روی لپتاپ برنامهنویس بینقص اجرا میشود، روی سرور به خطا میخورد؛ چون نسخهٔ پایتون فرق دارد، یک کتابخانهٔ سیستمی نصب نیست یا تنظیمی جا افتاده است. هرچه تعداد سرویسها و سرورها بیشتر شود، مدیریت این تفاوتها سختتر میشود. دو برنامه که به دو نسخهٔ متفاوت از یک کتابخانه نیاز دارند، روی یک سرور با هم تداخل پیدا میکنند.
داکر این مشکل را با یک ایدهٔ ساده حل میکند: بهجای اینکه برنامه را روی سرور «نصب» کنید، آن را همراه با محیط اجراییاش بستهبندی میکنید و همان بسته را همهجا اجرا میکنید. این بسته روی لپتاپ، سرور تست و سرور اصلی یکسان است.
مفاهیم اصلی داکر به زبان ساده
برای کار با داکر کافی است چهار مفهوم را بشناسید:
ایمیج (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 اجرا میشود.
کانتینر چطور کار میکند؟
کانتینر ماشین مجازی نیست. ماشین مجازی یک سیستمعامل کامل با هستهٔ جداگانه را روی سختافزار شبیهسازیشده اجرا میکند، در حالی که همهٔ کانتینرهای یک سرور از هستهٔ لینوکس همان سرور استفاده میکنند. ایزولهسازی با دو قابلیت هستهٔ لینوکس انجام میشود:
- 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 یا اتصال یک پوشهٔ سرور به کانتینر استفاده کنید تا دادهها مستقل از عمر کانتینر بمانند.
از ۱٬۲۰۰ تومان در ساعت · پرداخت ریالی



