Docker وPHP: حاويات التطبيقات المتقدمة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

Docker وPHP: حاويات التطبيقات المتقدمة

\n\n

أصبحت الحاويات باستخدام Docker معيارًا لتطوير ونشر تطبيقات PHP. المعرفة الأساسية - تشغيل حاوية تحتوي على PHP وNginx - هي مجرد الخطوة الأولى. على المستوى المتقدم، يلزم إعداد البناء متعدد المراحل، تحسين حجم الصور، العمل مع خدمات متعددة، إدارة متغيرات البيئة، التكامل مع CI/CD وبناء بنية الخدمات المصغرة. في هذه المقالة، سنناقش التقنيات الرئيسية التي ستساعدك على رفع مستوى حاويات PHP إلى مستوى جديد.

\n\n

1. البناء متعدد المراحل (Multi-stage builds) لـ PHP

\n\n

يسمح البناء متعدد المراحل باستخدام عدة تعليمات FROM في ملف Dockerfile واحد. هذا مثالي لتطبيقات PHP، حيث تحتاج في مرحلة البناء إلى Composer وNode.js وأدوات أخرى، بينما يجب أن يدخل إلى الصورة النهائية فقط الملفات المترجمة ومجموعة الحد الأدنى من التبعيات.

\n\n

مثال على Dockerfile لتطبيق Laravel مع البناء متعدد المراحل:

\n\n
# المرحلة 1: تثبيت التبعيات والبناء\nFROM composer:2.5 AS vendor\nWORKDIR /app\nCOPY composer.json composer.lock ./\nRUN composer install --no-dev --optimize-autoloader --no-interaction\n\nFROM node:18 AS frontend\nWORKDIR /app\nCOPY package.json package-lock.json ./\nRUN npm ci --only=production\nCOPY resources/ ./resources/\nRUN npm run production\n\n# المرحلة 2: الصورة النهائية\nFROM php:8.2-fpm-alpine3.18 AS final\nWORKDIR /var/www/html\n\n# تثبيت إضافات PHP الضرورية\nRUN apk add --no-cache \\\n        libpng-dev \\\n        libjpeg-turbo-dev \\\n        freetype-dev \\\n        libzip-dev \\\n        oniguruma-dev \\\n    && docker-php-ext-configure gd --with-freetype --with-jpeg \\\n    && docker-php-ext-install -j$(nproc) \\\n        pdo_mysql \\\n        mbstring \\\n        gd \\\n        zip \\\n        opcache\n\n# نسخ الملفات الضرورية فقط من المراحل السابقة\nCOPY --from=vendor /app/vendor/ ./vendor/\nCOPY --from=frontend /app/public/build/ ./public/build/\nCOPY . .\n\n# تحسين للإنتاج\nRUN php artisan optimize\n\nEXPOSE 9000\nCMD ["php-fpm"]
\n\n

المزايا الرئيسية:

\n
    \n
  • تحتوي الصورة النهائية على تبعيات وقت التشغيل فقط (PHP-FPM، الإضافات، الكود).
  • \n
  • لا تدخل أدوات البناء (Composer, Node.js) إلى الإنتاج.
  • \n
  • تقليل كبير في حجم الصورة (من 800-900 MB إلى 150-200 MB).
  • \n
\n\n

2. تحسين حجم صور Docker لـ PHP

\n\n

الصور الصغيرة تُحمّل بشكل أسرع، وتتطلب مساحة أقل على القرص، وتقلل من سطح الهجوم. الاستراتيجيات الرئيسية:

\n\n
    \n
  • استخدم إصدارات alpine من الصور الأساسية. تزن php:8.2-fpm-alpine حوالي 50 MB مقابل حوالي 400 MB للصورة القياسية php:8.2-fpm.
  • \n
  • قلل عدد الطبقات. ادمج أوامر RUN باستخدام &&.
  • \n
  • احذف الملفات المؤقتة. بعد تثبيت الإضافات، نظف ذاكرة التخزين المؤقت: docker-php-source delete و apk del .build-deps.
  • \n
  • استخدم .dockerignore. استبعد .git و node_modules و tests و .env والملفات الأخرى غير الضرورية.
  • \n
\n\n

مثال على .dockerignore متقدم:

\n\n
.git\n.gitignore\n.env\n.env.example\nnode_modules\ntests\nstorage/logs/*\n!storage/logs/.gitkeep\ndocker-compose.yml\nMakefile\nREADME.md
\n\n

3. Docker Compose للمشاريع PHP المعقدة

\n\n

للتطبيقات PHP التي تستخدم قواعد البيانات، قوائم الانتظار، ذاكرة التخزين المؤقت وخادم الويب، يصبح ملف docker-compose.yml ملف التكوين المركزي. تتضمن الإعدادات المتقدمة:

\n\n
    \n
  • الشبكات (networks): اعزل الخدمات (على سبيل المثال، لا ينبغي أن تكون قاعدة البيانات متاحة من الخارج).
  • \n
  • وحدات التخزين (volumes):<

المدونات

توصيات الكتب