डॉकर और PHP: उन्नत स्तर के अनुप्रयोगों का कंटेनरीकरण
\n\nडॉकर के साथ कंटेनरीकरण लंबे समय से PHP अनुप्रयोगों के विकास और तैनाती के लिए एक मानक बन गया है। बुनियादी ज्ञान - PHP और Nginx के साथ एक कंटेनर चलाना - केवल पहला कदम है। उन्नत स्तर पर, मल्टी-स्टेज बिल्ड सेटअप, इमेज आकार अनुकूलन, कई सेवाओं के साथ कार्य, पर्यावरण चर प्रबंधन, CI/CD के साथ एकीकरण और माइक्रोसर्विस आर्किटेक्चर के निर्माण की आवश्यकता होती है। इस लेख में, हम प्रमुख तकनीकों पर चर्चा करेंगे जो आपको PHP कंटेनरीकरण को एक नए स्तर पर ले जाने में मदद करेंगी।
\n\n1. PHP के लिए मल्टी-स्टेज बिल्ड
\n\nमल्टी-स्टेज बिल्ड आपको एक ही Dockerfile में कई FROM निर्देशों का उपयोग करने की अनुमति देता है। यह PHP अनुप्रयोगों के लिए आदर्श है, जहां बिल्ड चरण के दौरान Composer, Node.js और अन्य टूल की आवश्यकता होती है, लेकिन अंतिम इमेज में केवल संकलित फ़ाइलें और न्यूनतम निर्भरताएँ ही शामिल होनी चाहिए।
मल्टी-स्टेज बिल्ड के साथ Laravel एप्लिकेशन के लिए Dockerfile का उदाहरण:
\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
- अंतिम इमेज में केवल runtime-निर्भरताएँ (PHP-FPM, एक्सटेंशन, कोड) होती हैं। \n
- बिल्ड टूल (Composer, Node.js) प्रोडक्शन में शामिल नहीं होते। \n
- इमेज के आकार में महत्वपूर्ण कमी (800-900 MB से 150-200 MB तक)। \n
2. PHP के लिए डॉकर इमेज के आकार का अनुकूलन
\n\nछोटी इमेज तेजी से लोड होती हैं, डिस्क पर कम जगह लेती हैं और हमले की सतह को कम करती हैं। मुख्य रणनीतियाँ:
\n\n- \n
- बेस इमेज के alpine संस्करणों का उपयोग करें।
php:8.2-fpm-alpineका वजन ~50 MB है, जबकि मानकphp:8.2-fpmका वजन ~400 MB है। \n - लेयर्स की संख्या कम करें।
&&के साथRUNकमांड को मिलाएं। \n - अस्थायी फ़ाइलों को हटाएं। एक्सटेंशन स्थापित करने के बाद कैश साफ़ करें:
docker-php-source deleteऔरapk del .build-deps। \n .dockerignoreका उपयोग करें।.git,node_modules,tests,.envऔर अन्य अनावश्यक फ़ाइलों को बाहर करें। \n
उन्नत .dockerignore का उदाहरण:
.git\n.gitignore\n.env\n.env.example\nnode_modules\ntests\nstorage/logs/*\n!storage/logs/.gitkeep\ndocker-compose.yml\nMakefile\nREADME.md\n\n3. जटिल PHP प्रोजेक्ट्स के लिए Docker Compose
\n\nPHP अनुप्रयोगों के लिए जो डेटाबेस, कतारें, कैश और वेब सर्वर का उपयोग करते हैं, docker-compose.yml एक केंद्रीय कॉन्फ़िगरेशन फ़ाइल बन जाता है। उन्नत सेटिंग्स में शामिल हैं:
- \n
- नेटवर्क: सेवाओं को अलग करें (उदाहरण के लिए, डेटाबेस बाहर से सुलभ नहीं होना चाहिए)। \n
- वॉल्यूम: <