جملهٔ معروف «روی سیستم من کار میکرد!» دلیل به وجود آمدن داکر است. برنامهای که روی لپتاپ برنامهنویس درست کار میکند، روی سرور به خاطر یک نسخهٔ متفاوت PHP، یک کتابخانهٔ جاافتاده یا یک تنظیم متفاوت خراب میشود. داکر برنامه را همراه با همهٔ چیزهایی که لازم دارد در یک بستهٔ استاندارد میپیچد، تا هر جا اجرا شود، دقیقاً همانطور اجرا شود.
کانتینر یا ماشین مجازی؟
| ماشین مجازی (سرور مجازی) | کانتینر | |
|---|---|---|
| چه چیزی را جدا میکند | یک کامپیوتر کامل با سیستمعامل خودش | فقط برنامه و وابستگیهایش؛ هستهٔ سیستمعامل مشترک است |
| حجم | چند گیگابایت | از چند ده مگابایت |
| زمان روشن شدن | دقیقه | ثانیه |
| جداسازی امنیتی | قوی | خوب، ولی ضعیفتر از VM |
این دو رقیب نیستند: معمولترین حالت این است که داکر روی یک سرور مجازی اجرا شود و چند سرویس را کنار هم و جدا از هم نگه دارد.
چهار مفهوم اصلی
- Image: قالب فقطخواندنی برنامه؛ مثلاً
nginx:1.27یاwordpress:latest. مثل فایل نصب، ولی کامل و آماده. - Container: یک نمونهٔ در حال اجرا از image. از یک image میشود ده کانتینر ساخت. هر چیزی که داخل کانتینر عوض شود، با پاک شدن کانتینر از بین میرود.
- Volume: فضای ذخیرهسازی بیرون از کانتینر که میماند؛ دیتابیس و فایلهای آپلودی باید اینجا باشند.
- Registry: جایی که imageها نگه داشته میشوند. معروفترین، Docker Hub است؛ GitHub (ghcr.io) و GitLab هم رجیستری دارند.
دستورهای پایه
docker run -d --name web -p 8080:80 nginx:1.27 # دانلود image و اجرای کانتینر
docker ps # کانتینرهای در حال اجرا
docker logs -f web # لاگ زنده
docker exec -it web sh # رفتن به داخل کانتینر
docker stop web && docker rm web # توقف و حذف
docker images # imageهای دانلودشده
docker volume ls # volumeها-p 8080:80 یعنی پورت ۸۰۸۰ سرور به پورت ۸۰ داخل کانتینر وصل شود. این سادهترین شکل است؛ در عمل سرویسها را با Docker Compose و یک فایل تعریف میکنیم تا قابل تکرار باشند.
چرا اینقدر محبوب شد
- نصب یکخطی نرمافزارهای پیچیده: ابزارهایی مثل Uptime Kuma، GitLab، n8n، Nextcloud یا یک دیتابیس، با یک image رسمی و چند دقیقه.
- چند نسخه کنار هم: پروژهٔ قدیمی با PHP 7.4 و پروژهٔ جدید با PHP 8.3 روی یک سرور، بدون تداخل.
- جابهجایی آسان: با فایل compose و volumeها، کل سرویس به سرور دیگر منتقل میشود.
- استاندارد CI/CD: گیتهاب و گیتلب برای تست و دیپلوی خودکار از کانتینر استفاده میکنند.
آیا شما داکر لازم دارید؟
| نیاز شما | پیشنهاد |
|---|---|
| یک سایت وردپرسی یا شرکتی | هاست cPanel؛ داکر لازم نیست و نگهداریاش با خود شماست. |
| اپلیکیشن Node.js، Python یا Go | سرور مجازی + داکر |
| چند ابزار داخلی (مانیتورینگ، اتوماسیون، ویکی) | سرور مجازی + Docker Compose |
| یک سرویس خیلی سبک روی روتر | کانتینر میکروتیک |
منابع
- Docker Docs — Get started docs.docker.com/get-started
- Docker Docs — Volumes docs.docker.com/engine/storage/volumes