Docker के साथ PHP एप्लिकेशन के कंटेनरीकरण की आवश्यकता क्यों है?
PHP में आधुनिक वेब डेवलपमेंट शायद ही कभी कंटेनरीकरण के उपयोग के बिना होता है। Docker आपको आपके एप्लिकेशन को सभी निर्भरताओं (वेब सर्वर, PHP एक्सटेंशन, डेटाबेस) के साथ एक पृथक कंटेनर में पैकेज करने की अनुमति देता है। यह सुनिश्चित करता है कि एप्लिकेशन डेवलपर की स्थानीय मशीन, परीक्षण सर्वर और प्रोडक्शन वातावरण में समान रूप से काम करेगा। इस लेख में, हम PHP के लिए Docker को सही तरीके से कैसे कॉन्फ़िगर करें, एक तैयार प्रोजेक्ट बनाएं और सर्वोत्तम प्रथाओं पर चर्चा करेंगे।
PHP के साथ Docker का उपयोग करने के लाभ
- पर्यावरण की पुनरुत्पादन क्षमता: "मेरी मशीन पर काम करता है" की समस्या को भूल जाइए।
- पृथक्करण: प्रत्येक एप्लिकेशन PHP और लाइब्रेरी के आवश्यक संस्करणों के साथ अपने कंटेनर में रहता है।
- स्केलिंग: docker-compose की मदद से एप्लिकेशन के कई इंस्टेंस आसानी से चलाए जा सकते हैं।
- CI/CD को सरल बनाना: कंटेनर स्वचालित बिल्ड और डिप्लॉयमेंट पाइपलाइनों के लिए आदर्श हैं।
PHP एप्लिकेशन के लिए Dockerfile बनाना
आइए सबसे महत्वपूर्ण चीज़ से शुरू करें — Dockerfile फ़ाइल। यह बताती है कि आपके PHP एप्लिकेशन की इमेज कैसे बनाई जाएगी। आइए Apache वेब सर्वर के साथ PHP 8.2 पर एप्लिकेशन के लिए एक बुनियादी उदाहरण देखें।
# DockerfileFROM php:8.2-apache
# PHP एक्सटेंशन इंस्टॉल करनाRUN docker-php-ext-install pdo pdo_mysql mysqli
# Apache के लिए mod_rewrite सक्षम करना (फ्रेमवर्क के लिए उपयोगी)RUN a2enmod rewrite
# एप्लिकेशन का सोर्स कोड कॉपी करनाCOPY . /var/www/html/
# सही एक्सेस अधिकारों के लिए मालिक बदलनाRUN chown -R www-data:www-data /var/www/html
# पोर्ट 80 खोलनाEXPOSE 80यह Dockerfile Apache के साथ आधिकारिक PHP 8.2 इमेज लेता है, MySQL के लिए ड्राइवर इंस्टॉल करता है और आपका कोड कॉपी करता है। अधिक जटिल प्रोजेक्ट्स, जैसे Laravel या Symfony के लिए, अतिरिक्त कॉन्फ़िगरेशन की आवश्यकता होगी।
Nginx और PHP-FPM के साथ Laravel का उदाहरण
आधुनिक फ्रेमवर्क के लिए, अक्सर Nginx + PHP-FPM कॉम्बिनेशन का उपयोग किया जाता है। PHP-FPM के लिए Dockerfile का उदाहरण यहां दिया गया है:
# Dockerfile.php-fpmFROM php:8.2-fpm
# सिस्टम निर्भरताएं और एक्सटेंशन इंस्टॉल करनाRUN apt-get update && apt-get install -y \ libpq-dev \ libzip-dev \ unzip \ git \ && docker-php-ext-install pdo pdo_mysql zip
# Composer इंस्टॉल करनाCOPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# प्रोजेक्ट कॉपी करनाWORKDIR /var/wwwCOPY . .
# PHP निर्भरताएं इंस्टॉल करनाRUN composer install --no-interaction --optimize-autoloader
# Laravel के लिए एक्सेस अधिकारRUN chown -R www-data:www-data /var/www/storage /var/www/bootstrap/cache
CMD ["php-fpm"]और यहां Nginx कॉन्फ़िगरेशन है, जिसे docker-compose के माध्यम से एक अलग कंटेनर में रखा जाना चाहिए:
# default.conf (Nginx के लिए)server { listen 80; server_name localhost; root /var/www/public;
add_header X-Frame-Options "SAMEORIGIN"; add_header X-Content-Type-Options "nosniff";
index index.php;
charset utf-8;
location / { try_files $uri $uri/ /index.php?$query_string; }
location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
location ~ \\.php$ { fastcgi_pass php:9000; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; }
location ~ /\\.(?!well-known).* { deny all; }}docker-compose के साथ ऑर्केस्ट्रेशन
कई कंटेनरों (PHP, Nginx, MySQL) को प्रबंधित करने के लिए docker-compose.yml का उपयोग करें। यह स्थानीय विकास और परीक्षण के लिए एक मानक उपकरण है।
# docker-compose.ymlversion: '3.8'
services: php: build: co