Docker دنیای توسعه و استقرار نرمافزار را متحول کرده است—از محیط توسعه یکسان برای همه اعضای تیم گرفته تا استقرار بدون دردسر در Production. اما Docker روی هر سروری خوب اجرا نمیشود. کانتینرها عاشق RAM هستند، به CPU سریع نیاز دارند و بدون فضای ذخیرهسازی کافی، imageها و volumeها خیلی زود دیسک را پر میکنند.
Docker روی چه سروری اجرا شود؟
پاسخ کوتاه: VPS با حداقل ۲ گیگ RAM و ۲۰ گیگ SSD. اما مثل همیشه، ماجرا جزئیات بیشتری دارد.
Docker ذاتاً سبک است—برخلاف ماشینهای مجازی، کانتینرها کرنل سیستمعامل میزبان را به اشتراک میگذارند و overhead بسیار کمتری دارند. اما مشکل از جایی شروع میشود که چندین کانتینر را همزمان اجرا میکنید. هر کانتینر:
- RAM مخصوص خودش را مصرف میکند
- فضای دیسک برای image و volume نیاز دارد
- CPU time از هستههای میزبان میگیرد
پس قانون سرانگشتی این است: RAM مورد نیاز همه کانتینرها را جمع بزنید + ۱ گیگ برای سیستمعامل و Docker daemon.
چه CPU و RAM برای Docker لازم است؟
| سناریو | CPU | RAM | فضای ذخیرهسازی |
|---|---|---|---|
| توسعه (۲-۳ کانتینر سبک) | ۲ هسته | ۲-۴ گیگ | ۳۰ گیگ SSD |
| میکروسرویسها (۵-۸ کانتینر) | ۴ هسته | ۸ گیگ | ۶۰ گیگ NVMe |
| CI/CD Pipeline + Production | ۶-۸ هسته | ۱۶ گیگ | ۱۲۰ گیگ NVMe |
| Kubernetes (minikube / k3s) | ۴-۸ هسته | ۱۶-۳۲ گیگ | ۲۰۰+ گیگ NVMe |
نکته مهم Docker Desktop: روی سرور لینوکسی، Docker Engine را مستقیم نصب کنید—نیازی به Docker Desktop ندارید. Docker Engine سبکتر است و منابع کمتری مصرف میکند.
Docker Compose — استاندارد طلایی
برای ۹۰٪ پروژهها، Docker Compose کافی است و نیازی به Kubernetes ندارید. یک فایل docker-compose.yml خوب، تمام سرویسهای شما را—از اپلیکیشن و دیتابیس گرفته تا Redis و Nginx—مدیریت میکند.
مثال: یک پروژه Laravel با MySQL و Redis:
version: '3.8'
services:
app:
build: .
ports:
- "8080:80"
depends_on:
- mysql
- redis
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: secret
volumes:
- mysql_data:/var/lib/mysql
redis:
image: redis:7-alpine
volumes:
- redis_data:/data
volumes:
mysql_data:
redis_data:
نکته: برای volumeها حتماً از named volumes استفاده کنید—مدیریت بکآپ و migration را بسیار سادهتر میکند.
فضای ذخیرهسازی — دشمن پنهان Docker
Docker میتواند بیسروصدا دیسک شما را پر کند. مقصران اصلی:
- Imageهای قدیمی: هر بار که
docker buildیاdocker pullمیکنید، image جدید جای image قبلی را نمیگیرد—لایههای unused روی دیسک میمانند - Containerهای متوقفشده: containerهای stop شده فضای دیسک اشغال میکنند
- Volumeهای orphan: volumeهایی که به هیچ containerای متصل نیستند
راه حل—هر چند وقت یکبار این دستورات را اجرا کنید:
docker system prune -a --volumes
این دستور تمام containerهای متوقف، imageهای unused، networkهای بدون استفاده و volumeهای orphan را پاک میکند. روی سرور Production با احتیاط اجرا کنید!
امنیت Docker — فراموش نکنید
Docker امن است، به شرطی که شما امنیت را رعایت کنید:
- هرگز containerها را با
--privilegedاجرا نکنید مگر اینکه واقعاً مجبور باشید - از imageهای رسمی استفاده کنید—مثلاً
mysql:8.0به جایmysql:latest - پورتهای container را به دنیای بیرون expose نکنید—از reverse proxy (مثل Traefik یا Nginx) استفاده کنید
- Docker daemon را به اینترنت expose نکنید—پورت ۲۳۷۵ و ۲۳۷۶ باید بسته باشند
- Regular backup از volumeها بگیرید—volumeها در
/var/lib/docker/volumes/ذخیره میشوند
Nginx Reverse Proxy برای Docker
به جای expose کردن مستقیم پورت containerها، از یک reverse proxy استفاده کنید. دو گزینه عالی:
- Traefik: مخصوص Docker طراحی شده، با labelهای داکر کار میکند، SSL خودکار با Let’s Encrypt
- Nginx Proxy Manager: رابط کاربری گرافیکی، مدیریت ساده SSL و domain
پیشنهاد ما برای پروژههای کوچک تا متوسط، Nginx Proxy Manager است—راهاندازی ساده، مدیریت راحت SSL و قابلیتهای کافی برای اکثر نیازها.
جمعبندی: سرور Docker شما
برای یک محیط Docker استاندارد—چند میکروسرویس، یک دیتابیس، Redis و یک reverse proxy:
- CPU: ۴ هسته
- RAM: ۸ گیگابایت
- ذخیرهسازی: ۶۰ گیگابایت NVMe SSD
- سیستمعامل: Ubuntu 22.04 LTS
- Docker: Docker Engine + Docker Compose
- نظارت: Portainer یا Docker Dashboard
👈 سرور مناسب Docker خود را انتخاب کنید
مقالات مرتبط
- برای سایت من چه سروری لازم است؟ — راهنمای گامبهگام انتخاب سرور
- VPS چیست؟ راهنمای کامل برای مبتدیان — آشنایی با مفهوم سرور مجازی
- سرور ابری برای Laravel — راهنمای تخصصی Laravel روی VPS