مقدمه
امروزه یکی از چالشهای توسعه نرمافزار، اجرای یکسان برنامهها در محیطهای مختلف است. ممکن است برنامهای روی سیستم توسعهدهنده بدون مشکل اجرا شود، اما روی سیستم دیگری به دلیل تفاوت نسخه کتابخانهها یا تنظیمات اجرا نشود. Docker ابزاری است که این مشکل را برطرف میکند و امکان اجرای برنامهها را در محیطی ایزوله و قابل حمل فراهم میسازد.
Docker چیست؟
Docker یک پلتفرم متنباز (Open Source) برای ساخت، توزیع و اجرای برنامهها در قالب Container است. با استفاده از Docker میتوان برنامه را همراه با تمام وابستگیهای آن بستهبندی کرد تا روی هر سیستمی به یک شکل اجرا شود.
از مهمترین مزایای Docker میتوان به موارد زیر اشاره کرد:
- اجرای یکسان برنامه در محیطهای مختلف
- راهاندازی سریع پروژه
- مدیریت آسان وابستگیها
- مصرف منابع کمتر نسبت به ماشینهای مجازی (Virtual Machine)
Docker Image چیست؟
Docker Image را میتوان به عنوان یک قالب یا الگوی آماده در نظر گرفت. Image شامل برنامه، کتابخانهها، فایلها و تنظیمات موردنیاز برای اجرای یک نرمافزار است.
به عبارت دیگر، Image فقط یک فایل آماده است و به تنهایی اجرا نمیشود.
برای مشاهده Imageهای موجود روی سیستم میتوان از دستور زیر استفاده کرد:
docker images
Docker Container چیست؟
Docker Container نمونه در حال اجرای یک Image است. زمانی که یک Image اجرا میشود، Docker یک Container ایجاد میکند و برنامه داخل آن اجرا خواهد شد.
برای مشاهده Containerهای در حال اجرا از دستور زیر استفاده میشود:
docker ps
و برای مشاهده تمام Containerها (در حال اجرا و متوقفشده):
docker ps -a
تفاوت Image و Container
گاهی این دو مفهوم با یکدیگر اشتباه گرفته میشوند، اما تفاوت آنها بسیار ساده است:
| Docker Image | Docker Container |
| قالب آماده برنامه | نمونه در حال اجرای Image |
| قابل اجرا نیست | در حال اجرا یا متوقفشده است |
| میتوان از آن چندین Container ساخت | از یک Image ایجاد میشود |
به عنوان مثال، میتوان از یک Image مانند nginx چندین Container مختلف ایجاد کرد که هر کدام به صورت مستقل اجرا شوند.
چرخه ساده اجرای Docker
فرآیند کار Docker را میتوان به صورت زیر نمایش داد:
دریافت یا ساخت Image
│
▼
docker run
│
▼
ایجاد و اجرای Container
│
▼
مدیریت Container (Start / Stop / Remove)
این چرخه نشان میدهد که ابتدا یک Image از Docker Hub دریافت یا توسط کاربر ساخته میشود، سپس از روی آن یک Container اجرا شده و در ادامه میتوان آن را مدیریت کرد.
مثال عملی
برای آشنایی با نحوه کار Docker، دستور زیر اجرا شد:
docker run hello-world
در اولین اجرا، Docker بررسی میکند که آیا Image موردنظر روی سیستم وجود دارد یا خیر. اگر Image موجود نباشد، آن را به صورت خودکار از Docker Hub دانلود میکند. سپس یک Container از روی آن Image ایجاد شده و پیام زیر نمایش داده میشود:
Hello from Docker!
This message shows that your installation appears to be working correctl y.
پس از اجرای دستور، میتوان Container ایجادشده را مشاهده کرد:
docker ps -a
همچنین Image دانلودشده نیز با دستور زیر قابل مشاهده است:
docker images
Docker Compose
در بسیاری از پروژهها، تنها یک Container کافی نیست. برای مثال، یک پروژه Odoo معمولاً علاوه بر خود Odoo به یک پایگاه داده PostgreSQL نیز نیاز دارد. مدیریت این سرویسها به صورت جداگانه دشوار است.
Docker Compose ابزاری است که امکان اجرای چندین Container را به صورت همزمان و با یک دستور فراهم میکند. تنظیمات سرویسها در فایل docker-compose.yml یا compose.yaml نوشته میشود.
نمونه فایل Compose:
services:
db:
image: postgres:16
web:
image: nginx
اجرای سرویسها:
docker compose up -d
توقف سرویسها:
docker compose down
Docker Volume
به طور پیشفرض، اطلاعات داخل یک Container دائمی نیستند و در صورت حذف Container ممکن است از بین بروند.
Docker Volume برای ذخیره دائمی اطلاعات استفاده میشود. دادههایی که داخل Volume ذخیره میشوند، حتی پس از حذف Container نیز باقی میمانند و میتوان از آنها در Containerهای جدید استفاده کرد.
Volume بیشتر برای نگهداری اطلاعات پایگاه داده، فایلهای کاربران و لاگها کاربرد دارد.
نمونه استفاده از Volume:
docker run -d -v my-volume:/var/lib/postgresql/data postgres:16
جمعبندی
Docker یکی از ابزارهای مهم توسعه نرمافزار است که با استفاده از Image و Container اجرای برنامهها را در محیطهای مختلف ساده و یکسان میکند.
در این مقاله با مفهوم Docker، تفاوت Image و Container، چرخه ساده اجرای Docker و یک مثال عملی از اجرای دستور docker run hello-world آشنا شدیم. این مفاهیم پایه، اولین قدم برای یادگیری Docker و استفاده از آن در پروژههای واقعی هستند.