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

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

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

ابدأ الدورة

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

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



1. أساسيات Docker لمطور PHP

Docker هي منصة لتطوير التطبيقات وتسليمها وتشغيلها في بيئات معزولة (حاويات). تحتوي كل حاوية على كل ما هو ضروري للتشغيل: الكود، المكتبات، الأدوات المساعدة للنظام والإعدادات. بالنسبة لـ PHP، هذا مهم بشكل خاص، لأن التطبيق غالبًا ما يعتمد على إصدار معين من المفسر، والإضافات (مثل pdo_mysql، redis، gd) وخادم الويب (Apache أو Nginx).



المكونات الرئيسية لـ Docker:

  • Dockerfile — ملف نصي يحتوي على تعليمات لبناء الصورة.
  • الصورة (Image) — قالب غير قابل للتغيير لإنشاء الحاويات.
  • الحاوية (Container) — نسخة قيد التشغيل من الصورة.
  • docker-compose — أداة لتحديد وتشغيل التطبيقات متعددة الحاويات.


2. إنشاء Dockerfile لتطبيق PHP

لنبدأ بمثال بسيط. لنفترض أن لدينا تطبيق PHP على إطار عمل Laravel أو Symfony. لننشئ ملف Dockerfile في جذر المشروع:



# نستخدم الصورة الرسمية PHP 8.2 مع FPMFROM php:8.2-fpm-alpine

# نحدد دليل العملWORKDIR /var/www/html

# نثبت تبعيات النظام وإضافات PHPRUN apk add --no-cache \ git \ unzip \ libpng-dev \ libjpeg-turbo-dev \ freetype-dev \ && docker-php-ext-configure gd --with-freetype --with-jpeg \ && docker-php-ext-install -j$(nproc) \ pdo_mysql \ mbstring \ exif \ pcntl \ bcmath \ gd

# نثبت ComposerCOPY --from=composer:latest /usr/bin/composer /usr/bin/composer

# ننسخ ملفات المشروعCOPY . .

# نضبط الصلاحيات (لـ Laravel/Symfony)RUN chown -R www-data:www-data /var/www/html \ && chmod -R 755 storage bootstrap/cache

# نفتح المنفذ 9000 (PHP-FPM)EXPOSE 9000

# أمر التشغيلCMD ["php-fpm"]


يقوم هذا Dockerfile بما يلي:

  1. يأخذ صورة خفيفة php:8.2-fpm-alpine.
  2. يثبت الإضافات الضرورية: pdo_mysql، gd، mbstring وغيرها.
  3. ينسخ Composer من الصورة الرسمية.
  4. ينقل كود التطبيق.
  5. يضبط صلاحيات الوصول للذاكرة المؤقتة والسجلات.


3. إعداد docker-compose: PHP + Nginx + MySQL

للمشروع الفعلي، سنحتاج إلى خادم ويب وقاعدة بيانات. لننشئ ملف docker-compose.yml:



version: '3.8'

services: # خدمة PHP-FPM php: build: context: . dockerfile: Dockerfile container_name: app_php volumes: - .:/var/www/html networks: - app-network

# خادم الويب Nginx nginx: image: nginx:alpine container_name: app_nginx ports: - "8080:80" volumes: - .:/var/www/html - ./nginx/default.conf:/etc/nginx/conf.d/default.conf depends_on: - php networks: - app-network

# قاعدة بيانات MySQL mysql: image: mysql:8.0 container_name: app_mysql environment: MYSQL_ROOT_PASSWORD: root_password MYSQL_DATABASE: app_db MYSQL_USER: app_user MYSQL_PASSWORD: app_password ports: - "3306:3306" volumes: - mysql_data:/var/lib/mysql networks: -

المدونات

توصيات الكتب