Loading...

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

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

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

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

قیاس روزمره: image‌ها و کانتینرها

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

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

فایل‌های compose و اینکه واقعاً به چه مقدار Docker نیاز دارید

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

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

نحوه کار آن در CDN.com.tr، و محدودیت‌های صادقانه‌اش

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

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

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

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

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

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

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

یک stack کامل بیاورید

یک docker-compose.yml را وارد کنید و web، worker، دیتابیس و cache را در یک گام با هم به اجرا درآورید.

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

آیا یادگیری Docker سخت است؟

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

آیا می‌توانم بدون Docker از پلتفرم استفاده کنم؟

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

آیا می‌توانم image خود را روی CDN.com.tr بسازم؟

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