قیاس روزمره: 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 بنویسید.
docker-compose.yml چیست؟ یک مثال 60 ثانیهای
docker-compose.yml یک فایل متنی کوچک است که همه سرویسهای مورد نیاز اپلیکیشن شما و نحوه اتصالشان را نام میبرد. این نمونه یک اپلیکیشن سهتکه را توصیف میکند — یک وبسرور، API خودتان و یک دیتابیس:
``` services: web: image: nginx:alpine ports: - "80:80" api: build: ./api db: image: postgres:16 environment: POSTGRES_PASSWORD: example ```
از بالا به پایین که بخوانید، کل پشته را میشناسید: web از یک image آماده nginx استفاده میکند، api از کد خودتان ساخته میشود و db یک Postgres با یک تنظیم است. «Docker Compose» در عمل یعنی همین فایل — بهجای بالا آوردن دستی سه کانتینر با فلگهای درست، یک بار آنها را مینویسید و همه با هم بالا میآیند.
در CDN.com.tr همین فایل فرمت ورودی است: آن را وارد کنید تا هر سرویس به یک اپلیکیشن مدیریتشده تبدیل شود و دیتابیسها به افزونههای مدیریتشده.
نحوه کار آن در 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 اجرا کنید.
یک 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 کنید، سپس اینجا مستقر کنید.
Docker Compose در یک جمله چیست؟
Docker Compose روشی است برای توصیف چند کانتینر (وب، API، دیتابیس…) در یک فایل docker-compose.yml تا با هم اجرا و متصل شوند — و همان فایل را میتوان مستقیماً در CDN.com.tr وارد کرد.