حاوية تطبيقات PHP باستخدام Docker: دليل شامل للمطور

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

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

ابدأ الدورة

لماذا يجب على كل مطور PHP إتقان Docker؟

\n\n

هل سبق لك أن واجهت موقفًا حيث يعمل كل شيء محليًا بشكل مثالي، ولكن على الخادم تحصل على "شاشة الموت البيضاء"؟ أو ما هو أسوأ، عندما يقول زميلك: "كل شيء يعمل لدي، قم بتحديث composer" - ويتحول مشروعك إلى يقطينة؟ مألوف؟ إذن مرحبًا بك في عالم حاويات تطبيقات PHP باستخدام Docker.

\n\n

Docker ليس مجرد كلمة طنانة عصرية. إنها أداة ستغير إلى الأبد طريقة تعاملك مع التطوير. تخيل: لم تعد تقضي ساعات في إعداد البيئة. لا حاجة لتثبيت XAMPP أو OpenServer أو المعاناة مع إصدارات PHP. أمر واحد docker-compose up - وتطبيقك يعيش في عالم معزول ويمكن التنبؤ به. ويمكن مشاركة هذا العالم مع زميل، أو رفعه إلى الخادم، أو حتى بيعه للعميل. في هذه المقالة، سنشرح حاويات تطبيقات PHP من الألف إلى الياء: من Dockerfile الأساسي إلى تحسين الإنتاج.

\n\n

ما هي الحاويات ولماذا هي مهمة لـ PHP؟

\n\n

الحاويات هي طريقة لتغليف التطبيق مع جميع تبعياته (PHP، الإضافات، خادم الويب، قاعدة البيانات) في بيئة معزولة - حاوية. على عكس الأجهزة الافتراضية، الحاويات خفيفة الوزن، وتُشغل في ثوانٍ، وتستهلك الحد الأدنى من الموارد.

\n\n

بالنسبة لـ PHP، هذا مهم بشكل خاص. لماذا؟ لأن تطبيق PHP النموذجي هو مزيج من: PHP-FPM، Nginx أو Apache، MySQL/PostgreSQL، Redis، قائمة المهام. الإعداد اليدوي لهذا النظام البيئي على كل جهاز هو كابوس. ولكن مع Docker، تصف البنية التحتية بأكملها في كود (البنية التحتية ككود) وتعيد إنتاجها بأمر واحد.

\n\n

المزايا الرئيسية للحاويات لمطور PHP:

\n
    \n
  • توحيد البيئات: البيئة المحلية = بيئة الاختبار = بيئة الإنتاج. انسَ عبارة "إنها تعمل لدي".
  • \n
  • عزل التبعيات: مشروع على PHP 7.4 يتعايش بسلام مع مشروع على PHP 8.3 على نفس جهاز المضيف.
  • \n
  • نشر سريع: يكفي دفع الصورة إلى السجل وتحديث الحاوية على الخادم.
  • \n
  • قابلية التوسع: من السهل إضافة حاوية أخرى مع PHP-FPM تحت الحمل.
  • \n
\n\n

إنشاء أول Dockerfile لتطبيق PHP

\n\n

لنبدأ بالأهم - Dockerfile. هذه هي تعليمات بناء صورة تطبيقك. لنفترض أن لدينا تطبيق PHP بسيط على Laravel أو Symfony (المبدأ هو نفسه لأي إطار عمل).

\n\n
# نستخدم الصورة الرسمية PHP 8.2 مع FPM\nFROM php:8.2-fpm-alpine\n\n# تثبيت تبعيات النظام\nRUN apk add --no-cache \\\n    nginx \\\n    supervisor \\\n    libpng-dev \\\n    libjpeg-turbo-dev \\\n    freetype-dev \\\n    && docker-php-ext-configure gd --with-freetype --with-jpeg \\\n    && docker-php-ext-install -j$(nproc) pdo_mysql gd opcache\n\n# نسخ ملفات الإعدادات\nCOPY ./docker/nginx.conf /etc/nginx/http.d/default.conf\nCOPY ./docker/supervisord.conf /etc/supervisor/conf.d/supervisord.conf\nCOPY ./docker/php.ini /usr/local/etc/php/conf.d/custom.ini\n\n# تثبيت Composer\nCOPY --from=composer:latest /usr/bin/composer /usr/bin/composer\n\n# نسخ كود المصدر للتطبيق\nCOPY . /var/www/html\nWORKDIR /var/www/html\n\n# تثبيت تبعيات PHP\nRUN composer install --no-dev --optimize-autoloader\n\n# صلاحيات الوصول\nRUN chown -R www-data:www-data /var/www/html/storage /var/www/html/bootstrap/cache\n\nEXPOSE 80\n\nCMD ["supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]
\n\n

شرح تفصيلي:

\n
    \n
  • FROM php:8.2-fpm-alpine - نأخذ صورة خفيفة مبنية على Alpine Linux. وزنها حوالي 50 ميجابايت بدلاً من 200+ ميجابايت للصور المكتبية.
  • \n
  • docker-php-ext-install - الأمر السحري لتثبيت إضافات PHP مباشرة داخل الحاوية.
  • \n
  • COPY --from=composer:latest - بناء متعدد المراحل. نأخذ الملف الثنائي الجاهز لـ Composer من الصورة الرسمية، دون تثبيت PHP بشكل منفصل.

المدونات

توصيات الكتب