अब भी WAMP चला रहे हो? Docker बार पर इंतज़ार कर रहा है
सच में, तुम अभी भी WAMP खोलते हो?
WAMP, XAMPP और MAMP ने 2010 में PHP छेड़ते समय मदद की होगी, लेकिन आज वे बासी सोडा परोसने वाले ढाबे जैसे लगते हैं। प्रोड-जैसी स्टैक लोकल में चाहिए? कॉन्फ़िग को version करना है? तीन प्रोजेक्ट सँभालते हुए पोर्ट-रूलेट बंद करनी है? Docker ने सब हल कर दिया जबकि तुम्हारा Apache इंस्टॉलर लाल झपकी देता रहा।
WAMP/XAMPP/MAMP की अंतहीन झुंझलाहट
- जमे हुए एनवायरनमेंट: हर पैकेज अपनी PHP, MySQL और Apache वर्ज़न थोपता है। PHP 8.3 ट्राई करनी है? बाकी प्रोजेक्ट उड़ने दो।
- कॉन्फ़िग जिसे कोई साझा नहीं कर सकता: टीम या CI को
.iniफाइलें Slack पर पेस्ट करोगे? प्यारा है, पर बेकार। - अलगाव शून्य: एक Apache मॉड्यूल ऑन किया तो उसके दुष्प्रभाव हर प्रोजेक्ट में रिसते हैं। भूतिया बग्स को नमस्ते कहो।
Docker पूरा खेल बदल देता है
- YAML में स्टैक: version किया हुआ
compose.ymlकिसी भी लैपटॉप या CI पाइपलाइन पर एक ही कमांड से वही एनवायरनमेंट बनाता है। - सर्विस-स्तर का आइसोलेशन: हर कंटेनर अपनी सटीक PHP, Redis, PostgreSQL वगैरह लेकर आता है। मिलाओ, बदलो, हटाओ।
- ऑब्ज़र्वेबिलिटी पैकेज में: लॉग्स, मेट्रिक्स, healthcheck... अब अंदाज़ा नहीं लगाना पड़ेगा कि
mysqldजागा या नहीं। - पोर्टेबिलिटी: Linux, macOS, Windows, ARM, x86… Docker को बस कंटेनर-सक्षम kernel चाहिए।
अब पुराने docker-compose.yml नहीं, आधुनिक Compose
Docker डॉक्यूमेंटेशन चिल्लाता है: फ़ाइल का नाम compose.yml, कोई version फ़ील्ड नहीं, वेरिएबल्स .env में, और सर्विसेस को डिक्लेरेटिव तरह से लिखो। यह स्निपेट तुरंत चलने लायक है:
yaml
कुछ ज़रूरी बातें:
nameसेdocker compose lsऔर लॉग पढ़ना आसान हो जाता है।pull_policy: alwaysस्टैक अपडेट करते समय बासी इमेज बचाती है।depends_onऔरcondition: service_healthyमिलकर FrankenPHP शुरू होने से पहले MariaDB के तैयार होने का इंतज़ार करते हैं।- नीचे डिक्लेयर किए गए वॉल्यूम रीडिप्लॉय के बीच MySQL डेटा सुरक्षित रखते हैं।
FrankenPHP, Apache का ढीठ विकल्प
कंटेनर के भीतर Apache या Nginx क्यों घसीटना, जब FrankenPHP आधुनिक SAPI, HTTP worker और Symfony/Laravel का नैटिव सपोर्ट एक साथ देता है?
- परफॉर्मेंस: पर्सिस्टेंट worker मोड, प्री-वॉर्म्ड OPCache, HTTP/2 और जल्द ही HTTP/3।
- सादगी: 14
.confफाइलें नहीं;/appमें ऐप डालो, पोर्ट 80 खोलो और काम पूरा। - डेव इंटीग्रेशन:
symfony serveके बिना भी हॉट रीलोड; FrankenPHP खुद लूप संभालता है।
CI/CD बिना “मेरी मशीन पर चलता है” जप के
docker compose run --rm lint चलाओ, कोड जांचो और प्रोड में वही स्टैक डिप्लॉय करो। न म्यूटेटिंग एनवायरनमेंट, न पोर्ट 3306 की खोज।
सनकी लेकिन ईमानदार समापन
अगर दर्द पसंद है तो WAMP की हरी आइकन को दुलराते रहो। मगर तेज डिलीवरी, versioned इंफ्रा और अजीब कॉम्बो (Redis + Meilisearch + FrankenPHP + PostgreSQL) को तीन लाइनों में लांच करना है तो Docker पहले से तैयार बैठा है। प्रागैतिहासिक इंस्टॉलर फेंको, अपना compose.yml कमिट करो और पांच मिनट वाले ऑनबोर्डिंग का मज़ा लो।