🐳 داکر (Docker)
🔰 مقدمه
Docker یک پلتفرم متنباز برای ایجاد، اجرا، و مدیریت کانتینرها (Containers) است. کانتینرها محیطهایی سبکوزن و ایزولهشده هستند که به توسعهدهندگان اجازه میدهند برنامههای خود را به همراه تمام وابستگیها (Dependencies) اجرا کنند، بدون اینکه نگران تفاوتهای بین سیستمها باشند.
🧱 داکر چطور کار میکنه؟
بهجای اینکه یک ماشین مجازی کامل ایجاد بشه، Docker از Container Engine استفاده میکنه که منابع سیستم رو به اشتراک میگذاره اما محیط ایزوله برای برنامه فراهم میکنه.
🔄 تفاوت Docker با Virtual Machine
| ویژگی | Docker | Virtual Machine |
|---|---|---|
| سرعت راهاندازی | چند ثانیه | چند دقیقه |
| حجم | سبک | سنگین |
| مصرف منابع | کم | زیاد |
| عملکرد | نزدیک به بومی | کمی کندتر |
| ایزولهسازی | پروسهای | کامل (OS-level) |
🎯 مزایای استفاده از Docker
-
🔁 قابلیت تکرار و انتقال آسان پروژهها
-
📦 پکیجکردن برنامه با تمام وابستگیها
-
⚙️ راهاندازی ساده محیط توسعه و تولید
-
🧪 اجرای تستها در محیط ایزوله
-
📤 استقرار سریع در سرویسهای ابری
-
🧼 کاهش مشکل "روی سیستم من کار میکنه!"
🧰 مفاهیم اصلی در Docker
| مفهوم | توضیح |
|---|---|
| Image | قالبی از برنامه + تنظیمات و وابستگیها |
| Container | یک نسخه اجراشده از یک Image |
| Dockerfile | فایلی برای ساخت Image دلخواه |
| Docker Hub | مخزن آنلاین برای اشتراکگذاری Imageها |
| Volume | فضای ذخیرهسازی پایدار برای دیتا |
| Network | برقراری ارتباط بین کانتینرها |
📄 نمونه Dockerfile ساده
💻 دستورات پرکاربرد در Docker
| دستور | توضیح |
|---|---|
docker build -t my-app . | ساخت Image از Dockerfile |
docker run -p 3000:3000 my-app | اجرای کانتینر و نگاشت پورت |
docker ps | نمایش کانتینرهای فعال |
docker images | لیست تصاویر موجود |
docker stop <id> | توقف کانتینر فعال |
docker exec -it <id> bash | ورود به داخل کانتینر |
docker-compose up | اجرای چند کانتینر همزمان (با فایل Compose) |
⚙️ Docker Compose چیست؟
Docker Compose ابزاری برای اجرای چند سرویس با هم است. با تعریف سرویسها در فایل docker-compose.yml، مثلاً برای یک اپ Node.js + MongoDB:
🧪 مثال واقعی: اجرای برنامه Python Flask با Docker
📁 فایلها:
app.py
requirements.txt
Dockerfile
سپس:
🌍 کاربردهای Docker
-
محیط توسعه یکسان بین تیمها
-
اجرای تستهای خودکار در CI/CD
-
میکروسرویسها
-
استقرار برنامه در Cloud (مانند AWS, Google Cloud, Heroku)
-
مجازیسازی سبک در IOT و Embedded Systems
🔐 امنیت در Docker
-
استفاده از Imageهای رسمی یا اسکنشده
-
اجرای کانتینرها با کاربر غیر ریشه (non-root)
-
محدود کردن منابع کانتینر
-
بهروزرسانی مداوم Imageها و حذف کانتینرهای قدیمی
🧳 جمعبندی
Docker انقلابی در توسعه و استقرار نرمافزارها ایجاد کرده. با استفاده از کانتینرها، میتوان برنامهها را در هر جایی با کمترین مشکل اجرا کرد. این ابزار هم برای توسعهدهندگان، هم تیمهای DevOps و هم مدیران سرور، ابزاری قدرتمند و کاربردی است.