डॉकर-मशीन मेमोरी आवंटन

हमारे पास एक काफी जटिल रेल ऐप है जो एक ही भौतिक होस्ट पर तैनात होने वाला है । होस्ट में 8 कोर और 128 जीबी रैम है ।

ऐप को 4 प्रकार के कंटेनरों के साथ डॉकराइज्ड किया गया है

  • रेल इंक. वेब सर्वर
  • Postgres DB
  • Redis डीबी
  • कार्यकर्ता कंटेनर (Resque)

यह उम्मीद की जाती है कि डॉकर-मशीन के भीतर अधिक कंटेनरों को लाकर रेल और कार्यकर्ता कंटेनरों को बढ़ाया जाएगा ।

विकास के माहौल में, मेमोरी को पूरे डॉकर-मशीन को आवंटित किया जाता है:

docker-machine create -d virtualbox --virtualbox-memory 8192 default

क्या यह नियंत्रित करना संभव है कि व्यक्तिगत कंटेनर कितनी मेमोरी तक सीमित हैं?

उदाहरण के लिए पोस्टग्रेज में 16 जीबी आवंटित करें, लेकिन रेल कंटेनर को 4 जीबी तक सीमित करें । डॉकर-मशीन चलाने वाले सर्वर होस्ट को किस प्रकार की न्यूनतम मेमोरी आवंटित की जानी चाहिए, और क्या यह भी संभव है?

संपादित करें

संबंधित प्रश्न:

डॉकर मेमोरी प्रबंधन को कैसे संभालें?

डॉकर + अपाचे, मेमोरी उपयोग कैसे काम करता है?

संपादित करें 2

यह जवाब https://serverfault.com/a/645888/210752 इंगित करता है कि कंटेनर आवश्यकतानुसार मेमोरी आवंटित करेंगे । यह विकास के माहौल में मेरा अनुभव नहीं रहा है (डिफ़ॉल्ट रूप से डॉकर-मशीन को 2 जीबी आवंटित किया गया था) ।

जैसा कि आपके 2 वें संपादन में प्रश्न के उत्तर में उल्लेख किया गया है, कंटेनर वीएम की तरह नहीं हैं जिसमें आप आमतौर पर उनके लिए मेमोरी आरक्षित नहीं करते हैं जैसा कि आप वर्चुअल मशीनों के साथ करेंगे । क्योंकि वे सभी एक ही ओएस पर चलते हैं, यह विभिन्न प्रक्रियाओं के लिए आवश्यकतानुसार मेमोरी भेज सकता है, जैसे कि वे एक कंटेनर में नहीं चल रहे थे । यह कहना है, कंटेनरों की परवाह किए बिना, सभी प्रक्रियाओं के लिए मेमोरी पूल की जाती है ।

डॉकर-मशीन के साथ उपरोक्त उदाहरण में आपने जो सेट किया था वह 'वर्चुअल' होस्ट का कुल मेमोरी पूल था । आपके उत्पादन के मामले में, यह पूरे 128 जीबी होगा (जब तक कि आप इसे सेगमेंट करने के लिए डॉकर-मशीन या वीएमएस का उपयोग करने की योजना नहीं बनाते हैं) ।

हालांकि, कंटेनर भी कर्नेल का उपयोग करने का एक शानदार तरीका है cgroups (नियंत्रण समूह) सुविधाएँ, जो आपको संपूर्ण कंटेनर सिस्टम के लिए संसाधन प्रबंधन को कॉन्फ़िगर करने देती हैं । यह आपको कंटेनर में 'आरक्षित' मेमोरी नहीं देता है, बल्कि इसके बजाय आप अपनी सभी कंटेनर मेमोरी में ऊपरी सीमाएं सेट कर सकते हैं, इसलिए कोई भी मेमोरी नहीं खाएगा जिसका उपयोग दूसरों के लिए किया जा सकता है (उदाहरण के लिए रिसाव या बग की स्थिति में)) ।

डॉकर के साथ, उपयोग किए गए कंटेनर बैकएंड के आधार पर, आप बुनियादी मेमोरी सीमाएं निम्नानुसार सेट कर सकते हैं:

  • डॉकर के डिफ़ॉल्ट लिबकंटेनर को चलाते समय, कंटेनरों को चलाकर - एम या - स्मृति विकल्प
  • लिगेसी एलएक्ससी प्रदाता चलाते समय, एलएक्ससी विकल्प के साथ कंटेनर चलाकर lxc.cgroup.cpuset.स्मृति=का उपयोग कर राशि --lxc-conf

आप डॉकर में सीजीयूपीएस उपयोग के बारे में अधिक जानकारी यहां पा सकते हैं:https://www.cloudsigma.com/manage-docker-resources-with-cgroups/

लेख में यह भी शामिल है की स्लाइड करने के लिए एक परिचय cgroups functionalities.

अर्दोच उच्च खैर, मैं अपने करीबी वोट को वापस नहीं ले सकता, या आपके प्रश्न का उत्तर नहीं दे सकता, इसलिए । … इसके बारे में क्षमा करें । उम्मीद है कि कोई और कर सकता है ।

@HopelessN00b कोई समस्या नहीं है । . मुझे लगता है कि सवाल शुरू में इतना अच्छा नहीं था । मैंने बुनियादी ढांचे के साथ बहुत काम किया है लेकिन डॉकर मेरे लिए नया है । मैंने एक इनाम रखा है । … आपका दिन शुभ हो!