Docker چیست؟ آموزش مقدماتی داکر برای توسعهدهندگان و مدیران سرور

«روی سیستم من که کار میکرد!» — این جملهی آشنای دنیای برنامهنویسی، دقیقاً همان مشکلی است که Docker (داکر) حل میکند. داکر به شما اجازه میدهد یک اپلیکیشن را همراه با همهی وابستگیهایش در یک بستهی استاندارد به نام «کانتینر» بپیچید تا روی هر سرور و هر سیستمی دقیقاً یکسان اجرا شود. در این راهنمای مقدماتی، قدمبهقدم با مفاهیم، دستورات و کاربردهای داکر آشنا میشوید.
Docker چیست؟
داکر یک پلتفرم متنباز برای ساخت، اجرا و مدیریت کانتینرها است. کانتینر یک واحد سبک و ایزوله است که اپلیکیشن شما را بههمراه هر چیزی که برای اجرا نیاز دارد — کد، کتابخانهها، تنظیمات و وابستگیها — در خود جای میدهد. در نتیجه، اپلیکیشن مستقل از محیط زیرین، همهجا یکجور رفتار میکند: روی لپتاپ شما، روی سرور تست و روی سرور محصول.
چرا داکر اینقدر محبوب است؟
قبل از داکر، انتقال یک اپلیکیشن بین محیطهای مختلف دردسر بزرگی بود؛ نسخهی متفاوت زبان، کتابخانهی گمشده یا تنظیمات متفاوت باعث خطا میشد. داکر این مشکل را با بستهبندی همهچیز در یک کانتینر حل میکند. مزایای کلیدی:
- سازگاری: همان کانتینر، همهجا یکسان اجرا میشود.
- سبکی و سرعت: کانتینرها بسیار سبکتر از ماشین مجازیاند و در چند ثانیه بالا میآیند.
- ایزوله بودن: هر اپلیکیشن در کانتینر خودش اجرا میشود بدون تداخل با بقیه.
- مقیاسپذیری: بهراحتی میتوان نسخههای بیشتری از یک کانتینر اجرا کرد.
تفاوت Image و Container
دو مفهوم پایه که نباید اشتباه گرفته شوند:
- Image (ایمیج): یک قالبِ فقطخواندنی است؛ مثل نقشهی ساخت. شامل اپلیکیشن و همهی وابستگیهاست.
- Container (کانتینر): یک نمونهی در حال اجرا از یک ایمیج است. از روی یک ایمیج میتوانید چندین کانتینر بسازید.
تشبیه ساده: ایمیج مثل «دستور پخت» است و کانتینر مثل «غذای پختهشده» از روی آن دستور. از یک دستور پخت میتوان چند بشقاب غذا درست کرد.
مفاهیم کلیدی داکر
| مفهوم | توضیح |
|---|---|
| Image | قالب فقطخواندنی برای ساخت کانتینر |
| Container | نمونهی در حال اجرای یک ایمیج |
| Dockerfile | فایل متنی با دستورالعمل ساخت ایمیج |
| Registry | مخزن ذخیره و اشتراک ایمیجها (مثل Docker Hub) |
| Volume | فضای ذخیرهی دائمی برای دادههای کانتینر |
| Network | شبکه برای ارتباط کانتینرها با هم |
دستورات پرکاربرد داکر
پس از نصب داکر، با این دستورات بیشتر کارها را انجام میدهید:
| دستور | کاربرد |
|---|---|
| docker pull | دانلود یک ایمیج از Registry |
| docker run | ساخت و اجرای یک کانتینر از ایمیج |
| docker ps | نمایش کانتینرهای در حال اجرا |
| docker images | نمایش ایمیجهای موجود |
| docker stop / start | توقف یا اجرای کانتینر |
| docker build | ساخت ایمیج از Dockerfile |
| docker logs | مشاهدهی لاگ کانتینر |
| docker exec | اجرای دستور داخل کانتینر در حال اجرا |
برای مثال، اجرای یک وبسرور Nginx فقط با یک دستور:
docker run -d -p 80:80 nginx
Dockerfile چیست؟
برای ساختن ایمیجِ اپلیکیشن خودتان، یک فایل به نام Dockerfile مینویسید که مرحلهبهمرحله میگوید ایمیج چطور ساخته شود. یک نمونهی ساده برای یک اپ Node.js:
FROM node:20 WORKDIR /app COPY . . RUN npm install CMD ["npm", "start"]
سپس با docker build -t myapp . ایمیج ساخته میشود و با docker run myapp اجرا میشود.
Docker Compose برای چند کانتینر
بیشتر اپلیکیشنهای واقعی از چند سرویس تشکیل شدهاند (مثلاً اپ + دیتابیس + کش). با Docker Compose میتوانید همهی این سرویسها را در یک فایل docker-compose.yml تعریف و با یک دستور (docker compose up) همه را با هم بالا بیاورید. این کار راهاندازی محیطهای پیچیده را بسیار ساده میکند.
داکر در مقابل ماشین مجازی (VM)
سوال رایج: تفاوت کانتینر با ماشین مجازی چیست؟ جدول زیر پاسخ میدهد:
| ویژگی | کانتینر (Docker) | ماشین مجازی |
|---|---|---|
| سیستمعامل | کرنل میزبان مشترک | سیستمعامل کامل مجزا |
| حجم | مگابایت | گیگابایت |
| زمان راهاندازی | ثانیه | دقیقه |
| مصرف منابع | کم | زیاد |
| ایزولاسیون | سطح فرایند | کامل (سختافزاری) |
بهبیان ساده، کانتینرها سبکتر و سریعترند، در حالی که ماشینهای مجازی ایزولاسیون کاملتری میدهند. این دو میتوانند مکمل هم باشند؛ مثلاً کانتینرها را روی یک سرور مجازی اجرا کنید.
کاربردهای داکر
- محیط توسعهی یکسان: همهی اعضای تیم با یک محیط دقیقاً یکسان کار میکنند.
- استقرار سریع: اپلیکیشن را همانطور که تست شده، روی محصول منتشر کنید.
- میکروسرویسها: هر سرویس در کانتینر خودش، مستقل و مقیاسپذیر.
- CI/CD: داکر بخش جداییناپذیر خطوط لولهی استقرار خودکار است.
- اجرای ابزارها: اجرای سریع یک دیتابیس یا ابزار بدون نصب مستقیم روی سیستم.
اگر با وایب کدینگ یا هوش مصنوعی یک اپ ساختید، داکر یکی از تمیزترین راهها برای بستهبندی و انتشار آن است.
داکر و میزبانی
برای اجرای کانتینرهای داکر در محیط واقعی، به یک سرور با دسترسی کامل نیاز دارید. هاست اشتراکی معمولاً اجازهی اجرای داکر را نمیدهد، اما روی یک VPS یا سرور اختصاصی میتوانید داکر را نصب و کانتینرهای خود را اجرا کنید. برای میزبانی اپلیکیشن نهایی هم بسته به نیاز میتوانید از هاست وب یا سرور مجازی استفاده کنید.
سوالات متداول
آیا یادگیری داکر سخت است؟
مفاهیم پایه (ایمیج، کانتینر، Dockerfile) سادهاند و با چند تمرین یاد میگیرید. پیچیدگی در پروژههای بزرگ و ارکستراسیون است.
تفاوت Docker و Kubernetes چیست؟
داکر کانتینرها را میسازد و اجرا میکند؛ Kubernetes ابزاری برای مدیریت و ارکستراسیون تعداد زیادی کانتینر در مقیاس بزرگ است.
آیا داکر فقط برای لینوکس است؟
داکر روی ویندوز و مک هم با Docker Desktop کار میکند، اما در عمل بیشترِ کانتینرها مبتنی بر لینوکساند.
دادههای کانتینر بعد از حذف چه میشوند؟
بهطور پیشفرض با حذف کانتینر، دادهها از بین میروند؛ برای ذخیرهی دائمی از Volume استفاده کنید.
جمعبندی
داکر روش بستهبندی و اجرای اپلیکیشنها را متحول کرده است؛ با کانتینرهای سبک و قابلحمل، مشکل «روی سیستم من کار میکرد» را برای همیشه حل میکند. با یادگیری مفاهیم پایه — ایمیج، کانتینر، Dockerfile و Compose — میتوانید محیط توسعه و استقرار خود را ساده، سریع و قابلاعتماد کنید. بهترین راه شروع، نصب داکر و اجرای چند کانتینر ساده روی یک سرور مجازی است.

علی کارشناس زیرساخت و شبکه است و سالها تجربهی مدیریت سرور و میزبانی وب دارد. در مقالههایش تجربههای عملیِ انتخاب و مدیریت سرور را به زبانی ساده به اشتراک میگذارد تا انتخاب درستی برای هر پروژه ممکن شود.
مقالههای بیشتر از علی محمدی ←

