Docker और PHP: एप्लिकेशन कंटेनरीकरण के लिए संपूर्ण गाइड
आधुनिक वेब डेवलपमेंट कंटेनरीकरण के बिना अकल्पनीय है। Docker एप्लिकेशन को पैकेज करने, डिलीवर करने और चलाने के लिए डी-फैक्टो मानक बन गया है। PHP डेवलपर्स के लिए, Docker का उपयोग कई समस्याओं का समाधान करता है: PHP संस्करणों की असंगति से लेकर विभिन्न मशीनों पर एनवायरनमेंट सेटअप की जटिलताओं तक। इस लेख में, हम Docker और docker-compose का उपयोग करके PHP एप्लिकेशन को स्क्रैच से कंटेनरीकृत करने का तरीका समझेंगे।
1. PHP डेवलपर के लिए Docker की मूल बातें
Docker एक प्लेटफॉर्म है जो एप्लिकेशन को आइसोलेटेड एनवायरनमेंट (कंटेनर) में डेवलप, डिलीवर और चलाने के लिए है। प्रत्येक कंटेनर में काम करने के लिए आवश्यक सब कुछ होता है: कोड, लाइब्रेरी, सिस्टम यूटिलिटी और कॉन्फ़िगरेशन। PHP के लिए यह विशेष रूप से प्रासंगिक है, क्योंकि एप्लिकेशन अक्सर इंटरप्रेटर के विशिष्ट संस्करण, एक्सटेंशन (जैसे, pdo_mysql, redis, gd) और वेब सर्वर (Apache या Nginx) पर निर्भर करता है।
Docker के मुख्य घटक:
- Dockerfile — इमेज बनाने के निर्देशों वाली टेक्स्ट फ़ाइल।
- इमेज (Image) — कंटेनर बनाने के लिए अपरिवर्तनीय टेम्पलेट।
- कंटेनर (Container) — इमेज का चलता हुआ इंस्टेंस।
- docker-compose — मल्टी-कंटेनर एप्लिकेशन को परिभाषित और चलाने का टूल।
2. PHP एप्लिकेशन के लिए Dockerfile बनाना
एक सरल उदाहरण से शुरू करते हैं। मान लीजिए कि हमारे पास Laravel या Symfony फ्रेमवर्क पर PHP एप्लिकेशन है। प्रोजेक्ट की रूट में Dockerfile फ़ाइल बनाएं:
# आधिकारिक PHP 8.2 FPM इमेज का उपयोग करेंFROM php:8.2-fpm-alpine
# वर्किंग डायरेक्टरी सेट करेंWORKDIR /var/www/html
# सिस्टम डिपेंडेंसी और PHP एक्सटेंशन इंस्टॉल करेंRUN 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
# Composer इंस्टॉल करेंCOPY --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 निम्नलिखित कार्य करता है:
- हल्की इमेज
php:8.2-fpm-alpineलेता है। - आवश्यक एक्सटेंशन इंस्टॉल करता है:
pdo_mysql,gd,mbstringऔर अन्य। - आधिकारिक इमेज से Composer कॉपी करता है।
- एप्लिकेशन कोड ट्रांसफर करता है।
- कैश और लॉग के लिए एक्सेस परमिशन सेट करता है।
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: - app-network```