Loading...
مبانی · ۷ دقیقه مطالعه

Docker چیست (و آیا به آن نیاز دارم)؟

Docker راهی است برای بسته‌بندی یک اپلیکیشن همراه با هر چیزی که برای اجرا نیاز دارد — کد، محیط اجرا، کتابخانه‌ها و تنظیمات — در یک واحد یکپارچه و قابل‌حمل به نام کانتینر. کانتینر روی لپ‌تاپ شما، روی دستگاه یک همکار و روی CDN.com.tr به یک شکل رفتار می‌کند. برای بهره‌مندی لازم نیست متخصص Docker باشید: اغلب فقط یک image موجود را به ما نشان می‌دهید.

Docker چیست (و آیا به آن نیاز دارم)؟

تشبیه روزمره

به یک کانتینر باربری دریایی فکر کنید. هر چه درون آن بگذارید، شکلی استاندارد دارد، پس هر کشتی، کامیون یا جرثقیلی می‌تواند آن را بدون توجه به محتوایش حمل کند. یک کانتینر Docker همین کار را برای نرم‌افزار می‌کند: اپلیکیشن شما و وابستگی‌هایش را در یک بسته‌ی استاندارد می‌پیچد، پس هر سیستم سازگاری می‌تواند آن را به‌صورت یکسان اجرا کند — بدون شگفتی‌هایی از نوع «روی دستگاه من کار می‌کند».

image در برابر container

دو اصطلاح بیشترِ سردرگمی را پدید می‌آورند. «image» نقشه است — یک عکس لحظه‌ای منجمد از اپلیکیشن شما و محیط آن. «container» یک نمونه‌ی زنده و در حال اجراست که از آن image ساخته شده. می‌توانید از یک image کانتینرهای زیادی راه‌اندازی کنید، درست مانند باز کردن نسخه‌های فراوان از یک سند از روی یک قالب. image‌ها معمولاً در یک «registry» (مانند Docker Hub یا یک نمونه‌ی خصوصی) ذخیره و در صورت نیاز دریافت می‌شوند.

docker-compose برای چیست

اپلیکیشن‌های واقعی به‌ندرت یک‌تکه‌اند — ممکن است یک اپ وب، یک worker در پس‌زمینه، یک پایگاه‌داده و یک کش داشته باشید. یک فایل docker-compose.yml همه‌ی این «سرویس‌ها» و چگونگی اتصالشان را فهرست می‌کند تا کل پشته با یک تعریف با هم بالا بیاید. در CDN.com.tr می‌توانید یک فایل compose را وارد کنید و هر سرویس به یک اپلیکیشن مدیریت‌شده تبدیل می‌شود، در حالی که پایگاه‌داده‌ها و کش‌ها می‌توانند به افزونه‌های مدیریت‌شده بدل شوند.

آیا واقعاً به Docker نیاز دارید؟

اغلب کمتر از آنچه انتظار دارید. اگر WordPress یا یک سایت PHP را اجرا می‌کنید، اصلاً به دانش Docker نیاز ندارید — آن پلتفرم‌ها با چند کلیک کار می‌کنند. Docker تنها زمانی اهمیت دارد که بخواهید یک اپلیکیشن اختصاصی اجرا کنید. و حتی آن‌گاه نیز بسیاری از اپلیکیشن‌ها از پیش یک image آماده دارند که می‌توانید با نام از آن استفاده کنید، یا یک فایل docker-compose که می‌توانید وارد کنید، بدون آنکه خودتان Docker بنویسید.

چگونه در CDN.com.tr کار می‌کند

برای اجرای یک اپلیکیشن اختصاصی، یک image به ما می‌دهید (مثلاً یک image عمومی مانند «nginx» یا image خودتان از یک registry) یا یک فایل docker-compose را وارد می‌کنید. پلتفرم image را دریافت می‌کند، اجرا می‌کند، یک URL با HTTPS خودکار به آن می‌دهد و سالم نگه‌اش می‌دارد. متغیرهای محیطی، مقیاس‌پذیری و راه‌اندازی مجدد را از پنل مدیریت می‌کنید — بدون مدیریت سرور و بدون نیاز به ساخت image روی خود پلتفرم.

چند محدودیت صادقانه

پلتفرم کانتینرهای شما را اجرا می‌کند اما جایی برای ساخت image یا اجرای Docker در داخل Docker نیست، و پورت‌های TCP عمومی خام را در معرض دید قرار نمی‌دهد (دسترسی عمومی از طریق HTTP(S) است؛ و ترافیک داخلی میان سرویس‌ها خصوصی می‌ماند). برای بیشتر اپ‌های وب، APIها، workerها و ابزارها این دقیقاً همان چیزی است که می‌خواهید؛ برای یک سیستم CI که image می‌سازد، آن را جایی دیگر می‌سازید و نتیجه را اینجا مستقر می‌کنید.

چه زمانی Docker اینجا به شما کمک می‌کند

اجرای یک ابزار آماده

چیزی مانند RabbitMQ یا Jenkins را با نام image مستقر کنید، همراه با یک volume پایدار تا داده‌هایش پس از راه‌اندازی مجدد باقی بماند.

انتشار اپلیکیشن خودتان

image خود را در pipeline خودتان بسازید، به یک registry بفرستید (push) و آن را اینجا با یک URL و HTTPS اجرا کنید.

آوردن یک پشته‌ی کامل

یک docker-compose.yml وارد کنید و وب، worker، پایگاه‌داده و کش را در یک گام با هم به اجرا درآورید.

پرسش‌های پرتکرار

مبانی ساده است: image یک قالب است، container یک نسخه‌ی در حال اجرا. برای استفاده از CDN.com.tr بیشتر اوقات فقط نام یک image یا یک فایل compose ارائه می‌دهید — به‌ندرت لازم است خودتان Docker بنویسید.

بله. هاستینگ WordPress و PHP اصلاً به Docker نیازی ندارد. Docker تنها برای اپلیکیشن‌های کانتینری اختصاصی وارد می‌شود.

از یک registry — یک نمونه‌ی عمومی مانند Docker Hub، یا یک registry خصوصی با اعتبارنامه‌هایی که در پنل اضافه می‌کنید. پلتفرم image را دریافت و اجرا می‌کند.

نه — پلتفرم image‌ها را اجرا می‌کند، آن‌ها را نمی‌سازد (Docker در داخل Docker در کار نیست). آن را در pipeline خودتان یا به‌صورت محلی بسازید، به یک registry بفرستید و سپس اینجا مستقر کنید.

بله، اگر یک volume پایدار برای اپلیکیشن فعال کنید، یا برای داده‌های دارای حالت از یک افزونه‌ی مدیریت‌شده‌ی پایگاه‌داده/Redis استفاده کنید.