ماذا تعني عبارة "Docker على CDN"
الـ CDN بشكله الكلاسيكي يقف أمام موقع تشغّله أنت أصلاً: الـ edge يخزّن origin الثابت مؤقتاً ويسرّعه. هذا هو نمط Pull، وهو ممتاز حين يكون لديك خادم في مكان ما. لكن إن كان ما لديك هو صورة Docker — واجهة برمجية خلفية، تطبيق ويب، عامل معالجة — فستحتاج مع ذلك إلى جهاز يشغّل تلك الحاوية فعلياً. هذه هي الفجوة التي تسدّها منصّة الحاويات المُدارة.
على cdn.com.tr تنشر صورة Docker نفسها. تشغّل المنصّة حاويتك كتطبيق حاوية مُدار وتضعها خلف edge الـ CDN، فتصبح الصورة نفسها التي تشغّلها على جهازك بأمر docker run مُقدَّمة الآن على نطاق حقيقي مع HTTPS تلقائي، وتخزين مؤقت على الـ edge، وWAF في المقدّمة — دون أن تجهّز جهازاً افتراضياً، أو تثبّت Docker، أو تعدّ TLS، أو تنصب reverse proxy. أنت تحضر صورة ومنفذاً؛ والمنصّة تتولّى تشغيلها وتقديمها عالمياً. هذا ما يقصده الناس بـ"Docker على CDN" أو "استضافة Docker" بالطريقة المُدارة: الحاوية هي الـ origin، والـ edge يتولّى التقديم.
الخيار A — النشر من اللوحة (دون CLI)
المسار الذي لا يتطلّب كتابة كود يعمل بالكامل داخل لوحة إدارة cdn.com.tr. ضمن CDN Hosting / Platforms، اختر Managed Container وأنشئ تطبيقاً من صورتك. تشير إلى صورة registry وtag (مثلاً registry.example.com/acme/app:1.0.0)، وتضبط المنفذ الذي تستمع إليه حاويتك (مثلاً 8080)، وتضيف مسار health check كي تعرف المنصّة متى تكون الحاوية جاهزة فعلاً (مسار HTTP مثل /health، أو فحص TCP، أو بلا فحص). أضف النطاق المخصص الذي تريد التقديم عليه، وإن كانت الصورة في registry خاص، أرفق بيانات اعتماد registry التي حفظتها سابقاً.
ثم اضغط Deploy. تسحب المنصّة الصورة، وتشغّل الحاوية، وتنتظر نجاح health check، وتضعها أونلاين خلف الـ edge. من واجهة Operations الخاصة بالتطبيق يمكنك متابعة تقدّم النشر، ومتابعة السجلات (logs) لحظياً، ورؤية الحالة والإصدارات، وإعادة التشغيل أو التراجع (rollback) — كل ذلك دون لمس طرفية. هذا هو المسار الصحيح حين تريد رؤية كل شيء بصرياً أو تنشر حاوية واحدة يدوياً.
الخيار B — cdnctl CLI
cdnctl هي أداة سطر الأوامر الخاصة بمشغّلي cdn.com.tr، وهي تقود المنصّة نفسها. سجّل الدخول مرّة واختر حسابك كي يعرف كل أمر أين يعمل: نفّذ cdnctl login --email you@example.com --password ... (أو cdnctl configure --endpoint https://cdn.com.tr --token <token> إن كنت تستخدم API token)، ثم cdnctl accounts use <account_uuid>. قبل أول نشر لك، يتحقّق cdnctl container preflight --account <uuid> من أن الحساب جاهز.
أنشئ الحاوية وانشرها في خطوتين. أولاً عرّفها: cdnctl container apps create --account <uuid> --name mobile-backend --image registry.example.com/acme/app --tag 1.0.0 --port 8080 --healthcheck /health --healthcheck-type http --domain api.example.com (أضف --registry-credential <uuid> لصورة خاصة، و--persistent-mount-path /app/data و--persistent-storage-gb 5 إن احتاجت إلى وحدة تخزين دائمة). ثم اشحنها: cdnctl container apps deploy --account <uuid> --app <app_uuid>. للحصول على معاينة فورية دون إعداد DNS، يمنحك cdnctl container apps expose --account <uuid> --app <app_uuid> رابط <uid>.cdn.com.tr ثابتاً يمكنك زيارته فوراً.
التشغيل اليومي موجود هنا أيضاً بالكامل: apps logs --tail 100 لمتابعة المخرجات لحظياً، وapps status وapps wait --status running --timeout 300 للتحقّق من الجاهزية، وapps restart، وapps scale --replicas 0 للإيقاف المؤقت (أو التوسيع)، وapps show لرؤية التطبيق وإصداراته، وapps rollback --revision <uuid> للعودة إلى إصدار سليم معروف، وapps diagnose حين يكون هناك خلل، وapps update ... --env-json '{"APP_URL":"https://api.example.com"}' لتغيير الإعدادات. للصور الخاصة، أنشئ بيانات الاعتماد مرّة واحدة بأمر cdnctl container registry-credentials create --account <uuid> --name docker --registry-url https://index.docker.io/v1/ --username <user> --password <token> واستخدمها عند إنشاء التطبيق.
حزم متعدّدة الخدمات، والإضافات، والمهام، والبيانات
التطبيقات الحقيقية نادراً ما تكون حاوية واحدة. إن كنت تصف حزمتك أصلاً بملف docker-compose، يمكنك نشرها بالكامل: cdnctl container compose preview --account <uuid> --file docker-compose.yml يعرض ما سيُنشأ، وcdnctl container compose apply --account <uuid> --file docker-compose.yml --yes ينشر الحزمة متعدّدة الخدمات. يتحوّل ملف compose الخاص بك إلى تطبيقات حاوية مُدارة على المنصّة.
بالنسبة للأجزاء التي يعتمد عليها تطبيقك، اربط إضافات مُدارة بدل تشغيلها بنفسك: cdnctl container addons enable-redis وenable-postgres وenable-database وenable-nats توفّر الخدمة وتحقن تفاصيل الاتصال بها في تطبيقك كمتغيّرات بيئة (استخدم --env-prefix للتحكّم بأسمائها). العمل الخلفي والمجدول تغطّيه jobs: cdnctl container jobs create --account <uuid> --app <app_uuid> --name sync --schedule "*/30 * * * *" --method POST --path "/run" يسجّل مهمّة على نمط cron تستدعي تطبيقك وفق جدول، وjobs run [--wait] يشغّلها عند الطلب. ولتزويد الحالة الأولية، cdnctl container imports database --file dump.sql.gz يحمّل نسخة SQL، بينما cdnctl container imports files --file data.tar.gz --target-path /app/data يفكّ الملفات في وحدة تخزين دائمة.
التقديم عبر edge الـ CDN
الفائدة من تشغيل حاويتك هنا بدل خادم افتراضي عادي هي ما يقف أمامها. بمجرّد النشر، يصبح تطبيقك متاحاً على النطاق المخصص الذي أرفقته، ومُقدَّماً عبر edge الـ CDN. TLS تلقائي — تحصل على HTTPS دون شهادة عليك شراؤها أو تثبيتها أو تجديدها — والاستجابات القابلة للتخزين المؤقت تُخزَّن على الـ edge قريباً من زوّارك، فتقوم حاويتك بعمل أقلّ ويحصل المستخدمون على استجابات أسرع. WAF يقف في المقدّمة لفلترة الحركة الخبيثة وامتصاص الهجمات قبل وصولها إلى حاويتك.
لست بحاجة إلى نطاق مخصص كي تبدأ الاختبار. cdnctl container apps expose (أو الإجراء نفسه في اللوحة) يمنحك رابط <uid>.cdn.com.tr ثابتاً يقدّم حاويتك العاملة فوراً — مثالي لمعاينة، أو عرض تجريبي، أو ربط تطبيق موبايل بخلفية قبل جهوزية DNS. حين تصبح جاهزاً للإنتاج، وجّه نطاقك الحقيقي إلى التطبيق فيُقدَّم عليه بدلاً من ذلك، مع HTTPS تلقائي وحماية edge نفسها.
النشر من Git — CI/CD والترقية دون توقّف
لمشروع مستمر، عادةً لا تريد تشغيل أمر نشر يدوياً في كل مرّة. اربط مستودعاً في اللوحة ويمكن لعمليات push أن تنشر تلقائياً: حين تدفع (push)، تبني المنصّة وتعيد النشر تلقائياً، فيصبح شحن تغيير مجرّد git push. هذا هو مسار CI/CD للحاويات على CDN.
للحفاظ على أمان الإنتاج، تمرّ عمليات النشر عبر خط أنابيب staging → production. يعيد push نشر بيئة Staging أولاً، حيث يمكنك التحقّق من الإصدار الجديد على رابط معاينة؛ وحين يبدو صحيحاً، عملية Promote يدوية واحدة تستبدل فوراً ذلك البناء في Production. ولأنّ الترقية (promote) هي استبدال فوري لإصدار مبني ومُسخَّن مسبقاً، ينتقل الإنتاج دون أي توقّف — بلا إعادة بناء، وبلا بداية باردة لزوّارك. يناسب cdnctl التدفّق نفسه من خط أنابيب CI: صادق بـ token، ثم أنشئ/انشر التطبيق كخطوة بناء، فيستطيع GitHub أو GitLab CI الحاليان لديك قيادة عمليات النشر أيضاً.
ما الذي يشغّله الناس كحاويات Docker على CDN
انشر خدمتك بـ Node أو Python أو Go أو PHP أو Java كحاوية وقدّمها على نطاق حقيقي مع HTTPS تلقائي وWAF في المقدّمة.
أحضر ملف docker-compose الخاص بك وانشر الحزمة متعدّدة الخدمات بالكامل، مع ربط Redis أو Postgres أو NATS المُدارة كمتغيّرات بيئة.
اشحن خلفية (backend)، وأتح رابط <uid>.cdn.com.tr فورياً لاختبار عميلك، ثم رقِّها إلى الإنتاج على نطاقك المخصص دون توقّف.
أسئلة شائعة حول Docker على CDN
هل يمكنني تشغيل حاوية Docker على CDN؟
نعم. على منصّة cdn.com.tr المُدارة تنشر صورة Docker الخاصة بك كتطبيق حاوية مُدار، وتُقدَّم عبر edge الـ CDN — مع نطاق مخصص، وHTTPS تلقائي، وتخزين مؤقت وWAF في المقدّمة. لست بحاجة لتجهيز خادم أو صيانته؛ تحضر صورة ومنفذاً وتشغّلها المنصّة.
كيف أنشر حاوية Docker — من اللوحة أم سطر الأوامر؟
كلاهما يقود المنصّة نفسها. استخدم لوحة الإدارة (CDN Hosting / Platforms → Managed Container) لإنشاء تطبيق من صورة والنشر بصرياً، أو استخدم cdnctl CLI: cdnctl container apps create ... ثم cdnctl container apps deploy. تندمج الـ CLI أيضاً في CI/CD.
هل أحتاج نطاقاً مخصصاً لمعاينة حاويتي؟
لا. نفّذ cdnctl container apps expose (أو الإجراء نفسه في اللوحة) وتحصل على رابط <uid>.cdn.com.tr ثابت يقدّم حاويتك العاملة فوراً — دون إعداد DNS. أرفق نطاقك المخصص حين تصبح جاهزاً للإنتاج.
هل يمكنني نشر حزمة docker-compose كاملة؟
نعم. cdnctl container compose preview يعرض ما سيُنشأ، وcdnctl container compose apply --file docker-compose.yml --yes ينشر الحزمة متعدّدة الخدمات. يمكنك أيضاً ربط إضافات مُدارة — Redis أو Postgres أو NATS — كي تصل تفاصيل اتصالها إلى تطبيقك كمتغيّرات بيئة.
كيف يعمل النشر من Git، وهل الإنتاج آمن؟
اربط مستودعاً ويمكن لعمليات push أن تنشر تلقائياً. تمرّ عمليات النشر عبر خط أنابيب staging → production: يعيد push نشر Staging، وعملية Promote يدوية واحدة تستبدل فوراً البناء في Production. ولأنّ الترقية استبدال فوري لإصدار مبني مسبقاً، ينتقل الإنتاج دون أي توقّف.