अलग-अलग कंटेनरों में नंगेक्स और पीएचपी को डॉक करने के क्या फायदे हैं?


19

मैंने अभी Docker और Kubernetes के साथ काम करना शुरू किया है और मैं बहुत सारे ढेर देख रहा हूं, जिसमें कुछ लोग एक छवि में nginx + php का निर्माण करते हैं और कुछ nginx के साथ एक छवि बनाते हैं और दूसरा php (उसी पथ को बढ़ते हुए और संलग्न करते हुए) दोनों कंटेनर कुबेरनेट्स में एक ही तैनाती में)।

एक ही एक में nginx + php दोनों को स्थापित करने के बजाय दो डॉक चित्र बनाने के क्या फायदे होंगे?

जवाबों:


19

नगीनक्स के साथ PHP आमतौर पर php-fpm का उपयोग करके किया जाता है जो एक अलग प्रक्रिया है।

एक प्रक्रिया के कर्ता के मूल विचार को ध्यान में रखते हुए (इस बिंदु पर अधिक विवरण के लिए उत्तर का अंत देखें) प्रति कंटेनर में यह अलग-अलग कंटेनरों में नगीनक्स प्रक्रिया और php-fpm प्रक्रिया है।

के रूप में nginx और php-fpm के बीच संचार fastcgi के माध्यम से उठता है php-fpm कंटेनर एक अलग मेजबान पर भी हो सकता है और यह nginx के पीछे php-fpm कंटेनरों के क्लस्टर का उपयोग करने की अनुमति देता है।

यहां टिप्पणी की दीवार के बाद थोड़ा और पृष्ठभूमि है, डॉक प्रलेखन में इस विचार के बारे में पैराग्राफ है कि एक कंटेनर में केवल एक ही चिंता होनी चाहिए

एक लिनक्स कंटेनर ( lxc ) का मुख्य विचार सीपीयू और मेमोरी स्तर पर एक अलग नामस्थान में एक प्रक्रिया को चलाने के लिए है, फाइलक स्तर पर इस अलगाव के शीर्ष पर docker जोड़ते हैं।
लाभ यह है कि इस नाम स्थान के भीतर एक प्रक्रिया का समझौता अन्य प्रक्रियाओं की स्मृति को पढ़ने की अनुमति नहीं देगा और इस तरह से मेजबान पर अन्य समझौता को रोकना चाहिए।

जबकि nginx और php-fpm के बारे में बात करते हैं, वे जोड़ी में काम करते हैं, लेकिन प्रत्येक की अपनी चिंता है, nginx HTTP भाग, रूटिंग, हेडर सत्यापन, आदि करेगा और php-fpm कोड की व्याख्या करेगा और html भाग को nginx में लौटाएगा। । हालांकि यह सामान्य है कि दोनों को एक साथ एक ही सेवा प्रदान करना अनिवार्य नहीं है।

संदर्भ के आधार पर, एक कंटेनर के लिए एक आवेदन के लिए पूरे स्टैक सहित आसान हो सकता है, उदाहरण के लिए एक डेवलपर वर्कस्टेशन पर। लेकिन आदर्श रूप से उत्पादन के उपयोग के लिए, कंटेनर के अंदर कम बातचीत को रखने की कोशिश करें, पर्यवेक्षक के साथ एक ही कंटेनर में अलग-अलग प्रक्रियाएं होने से ज़ोंबी प्रक्रिया और लॉग हैंडलिंग ( केवल चित्रण के उद्देश्य के लिए यहां उत्कृष्ट कहानी ) में समस्या का अपना हिस्सा लाता है ।

तो अंत में मैं कुछ जोर देने के साथ docker पेज को उद्धृत करूँगा:

जबकि "प्रति कंटेनर एक प्रक्रिया" अक्सर अंगूठे का एक अच्छा नियम है, यह एक कठिन और तेज़ नियम नहीं है। कंटेनरों को यथासंभव स्वच्छ और मॉड्यूलर रखने के लिए अपने सर्वोत्तम निर्णय का उपयोग करें

कोई "सिल्वर बुलेट नियम" नहीं है जो सब कुछ पर लागू होता है, यह हमेशा कंटेनर के भीतर जटिलता और कंटेनरों की खुद को ऑर्केस्ट्रेट करने वाली जटिलता के बीच संतुलन होता है।


3
मूल विचार वास्तव में "प्रत्येक कंटेनर में केवल एक ही चिंता होनी चाहिए", और "यह जरूरी नहीं कि यह सच है कि प्रति कंटेनर केवल एक ऑपरेटिंग सिस्टम प्रक्रिया होनी चाहिए"। docs.docker.com/engine/userguide/eng-image/…
user2640621

मैं मानता हूं कि यह विचार पर प्रहार करने के लिए एक शॉर्टकट है, नगनेक्स एक एकल अखंड प्रक्रिया नहीं है और न ही php-fpm है, लेकिन मेरे जवाब में चिंता की प्रक्रिया को प्रतिस्थापित करता है और यह अभी भी ठीक है nginx रूटिंग करता है, php-fnx व्याख्या करता है
Tensibai

3
उत्तर आमतौर पर प्रति कंटेनर एक सेवा एक पोर्ट है, वास्तव में एक प्रक्रिया नहीं है। दूसरी ओर, यदि आपके पास एक कंटेनर में कई चलने वाली प्रक्रियाएं हैं, तो आपको कुछ init प्रक्रिया, सेवा प्रबंधन, पुनरारंभ, स्वतंत्र लॉगिंग, स्वतंत्र पैकेज निर्भरता पर विचार करने की आवश्यकता है, यह थोड़ा अधिक जटिल हो जाता है। और कभी-कभी 1: 1 मैपिंग स्केलिंग करते समय 1: n मैपिंग में बदल जाता है।
जिरी क्लौडा

@ जेरी डेविल्स एडवोकेट का किरदार निभा रहे हैं: इसलिए पोस्टर्स डीबी का इस्तेमाल करने वाले रेल ऐप के सामने एक अपाचे उसी कंटेनर में जाना चाहिए? बाहरी दृष्टि से यह केवल एक सेवा है।
तेनिबाई

1
@JiriKlouda उत्तर में संशोधन किया गया, मुझे आशा है कि टिप्पणियों में उठाए गए सभी बिंदुओं को बताने के लिए यह पर्याप्त विस्तृत है।
तेंसीबाई

4

वहाँ कोई सार्थक लाभ है कि दो कंटेनरों का प्रबंधन करने के लिए outweighs है। जब तक आपके पास प्रक्रियाओं के बीच 1: 1 संबंध है और वे एक ही उद्देश्य की सेवा करते हैं, उन्हें एक ही कंटेनर में रखें।


क्या आप एक ही कंटेनर पर विभिन्न छवियों का मतलब है?
13

उसी कंटेनर में आप नगीनक्स और पीएचपी-एफपीएम कैसे शुरू करेंगे? कृपया एक उदाहरण जोड़ें।
030

1
@ 030 यहां एक उदाहरण है
कार्लोस

2
@carlos देव उद्देश्यों के लिए बहुत ही मान्य है, मैं इस तरह की चीजों को उत्पादन उपयोग के लिए अवरुद्ध करूँगा (एक कंटेनर के भीतर चल रहा पर्यवेक्षक आसानी से एक फुटगन में बदल सकता है)
Tensibai

मैं उस जवाब से असहमत हूं, इस वजह से एक अपाचे सर्वर को मॉड सुरक्षा के साथ एक टॉककॉट से बात करते हुए एक पोस्टग्रैक्स्ल सर्वर से बात करते हुए केवल एक ऐप को एक कंटेनर में फिट करना चाहिए।
१ .:

4

दरअसल, यहां एक गायब बिंदु क्षैतिज मापनीयता है। बहुत पहले जेमी अलक्विज़ा के एक लेख से यह पता चला है:

http://archive.is/pDzz0

संक्षेप में, आप उच्च प्रदर्शन तक पहुंचने के लिए अपने php-fpm को क्षैतिज रूप से मापते हैं। Nginx + php-fpm को एक साथ स्केल करने से आपको कोई लाभ नहीं होता है। मैं आपको कुछ तनाव परीक्षण करने के लिए प्रोत्साहित करता हूं (जैसे त्सुंग, गैटलिंग, आदि। कृपया कृपया अपाचे एब न करें, यह एक बहुत पुराना खिलौना है) अपने आप को सत्यापित करने के लिए कि लेख ने क्या कहा। मेरे पास व्यक्तिगत रूप से कई वास्तविक दुनिया के अनुभव हैं जो यह साबित करते हैं कि लेख सामान्य रूप से सच है।

लेकिन नंगे धातु मशीनों / वीएम के लिए दो कमियां (शायद कुबेरनेट के लिए नहीं) हैं:

  1. Nginx को कॉन्फ़िगर करने के लिए गतिशील रूप से php-fpm कंटेनर परिवर्तनों की खोज कैसे करें? यह आसान हिस्सा है।
  2. स्केलिंग के बाद हम समान वॉल्यूम / फ़ाइल सिस्टम कैसे साझा करते हैं? Nginx और php-fpm कंटेनरों को स्थिरता तक पहुंचने के लिए एक ही सामग्री को पढ़ना चाहिए। यह आपको काम करने के लिए कम से कम पहेली भाग (और सबसे मजेदार हिस्सा) छोड़ देता है।

EDITED: अब यह साल 2019 का लगभग आधा है। पुराने मॉडल, एक ही पॉड में php-fpm + nginx का अलग-अलग उपयोग है। यदि आप सर्विस मेश से परिचित हैं, तो नगीनक्स (या जिसे नगनेमेश कहते हैं) पूर्व-पश्चिम बाउंड ट्रैफिक को संभालने के लिए एक साइडकार के रूप में कार्य करता है। पूर्व-पश्चिम बाध्य यातायात ज्यादातर सेवाओं, या अन्य फैंसी कार्यात्मकताओं के बीच प्रमाणित करने के लिए उपयोग किया जाता है, जबकि शुद्ध php-fpm ऐसा नहीं कर सकता था।


-1

लाभ यह है: आप बैक-एंड में कई php-fpm कंटेनर चला सकते हैं, हम इसे PHP क्लस्टर कहते हैं, बंदरगाहों की संख्या के माध्यम से। उदाहरण पोर्ट 9000, 9001, 9002 .. इत्यादि

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.