2014-06-24 16 views
34

की डिस्क डिस्क आकार और बैंडविड्थ सीमित करें मेरे पास उबंटू 14.04 पर चलने वाली एक भौतिक मेजबान मशीन है। इसमें 100 जी डिस्क और 100 एम नेटवर्क बैंडविड्थ है। मैंने डॉकर स्थापित किया और 10 कंटेनर लॉन्च किए। मैं प्रत्येक कंटेनर को अधिकतम 10 जी डिस्क और 10 एम नेटवर्क बैंडविड्थ तक सीमित करना चाहता हूं।एक डॉकर कंटेनर

हालांकि आधिकारिक दस्तावेज और इंटरनेट पर खोज करने के बाद, मुझे अभी भी निर्दिष्ट आकार डिस्क और नेटवर्क बैंडविड्थ को एक कंटेनर में आवंटित करने का कोई तरीका नहीं मिल रहा है।

मुझे लगता है कि यह सीधे डॉकर में संभव नहीं हो सकता है, शायद हमें डॉकर को बाईपास करने की आवश्यकता है। क्या इसका मतलब है कि हमें कुछ "अंतर्निहित", जैसे कि एलएक्ससी या सीग्रुप का उपयोग करना चाहिए? क्या कोई कुछ सुझाव दे सकता है?


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

@Mbarthelemy, आपके सुझाव के काम करने के लिए लगता है, लेकिन मैं अभी भी डिस्क के बारे में कुछ सवाल हैं:

1) यह (जैसे 20G, 30G आदि जैसे अन्य आकार आवंटित करने के लिए संभव है) प्रत्येक कंटेनर के लिए? आपने कहा कि यह डॉकर में हार्डकोड किया गया है, इसलिए यह असंभव प्रतीत होता है।

2) मैं नीचे आदेश का उपयोग डोकर डेमॉन और कंटेनर शुरू करने के लिए:

Filesystem     Size Used Avail Use% Mounted on 
/dev/mapper/docker-longid 9.8G 276M 9.0G 3%/
/dev/mapper/Chris--vg-root 27G 5.5G 20G 22% /etc/hosts 

से:

docker -d -s devicemapper 
docker run -i -t training/webapp /bin/bash 

तो मैं डिस्क उपयोग देखने पर df -h उपयोग करें, यह निम्न उत्पादन देता है उपर्युक्त मुझे लगता है कि अधिकतम डिस्क एक कंटेनर उपयोग कर सकती है जो अभी भी 10 जी से बड़ी है, आपको क्या लगता है?

उत्तर

24

मुझे नहीं लगता कि यह अभी डॉकर डिफ़ॉल्ट सेटिंग्स का उपयोग कर संभव है। मैं यही कोशिश करता हूं।

  • डिस्क उपयोग के बारे में: आप डॉकर को AUFS के बजाय डिवाइसमैपर स्टोरेज बैकएंड का उपयोग करने के लिए कह सकते हैं। इस तरह प्रत्येक कंटेनर एक ब्लॉक डिवाइस (डेवीमैपर डीएम-पतली लक्ष्य) पर 10 जीबी तक सीमित होगा (यह एक डॉकर डिफ़ॉल्ट है, सौभाग्य से यह आपकी आवश्यकता से मेल खाता है!)।

    this link के अनुसार, ऐसा लगता है कि डॉकर के नवीनतम संस्करण अब उन्नत स्टोरेज बैकएंड विकल्प स्वीकार करते हैं। devicemapper बैकएंड का उपयोग करके, अब आप --storage-opt dm.basesize=20G (जिसे किसी भी नए बनाए गए कंटेनर पर लागू किया जाएगा) का उपयोग कर डिफ़ॉल्ट कंटेनर रूटफ़ेस आकार विकल्प बदल सकते हैं।

    स्टोरेज बैकएंड बदलने के लिए: --storage-driver=devicemapper डॉकर विकल्प का उपयोग करें। ध्यान दें कि परिवर्तन के बाद अब आपके पिछले कंटेनर डॉकर द्वारा नहीं देखे जाएंगे।

  • नेटवर्क बैंडविड्थ के बारे में: आप डॉकर को हुड के तहत एलएक्ससी का उपयोग करने के लिए कह सकते हैं: -e lxc विकल्प का उपयोग करें।

    उसके बाद, उन्हें एक यातायात वर्ग में डाल के लिए एक कस्टम LXC निर्देश के साथ अपने कंटेनर बना:

    docker run --lxc-conf="lxc.cgroup.net_cls.classid = 0x00100001" your/image /bin/stuff

    कैसे इस वर्ग के लिए बैंडविड्थ सीमा लागू करने के लिए के बारे में official documentation की जाँच करें। मैंने कभी यह कोशिश नहीं की है (मेरा सेटअप नेटवर्किंग के लिए कस्टम ओपनविस्विच ब्रिज और वीएलएएन का उपयोग करता है, इसलिए बैंडविड्थ सीमा अलग है और कुछ हद तक आसान है), लेकिन मुझे लगता है कि आपको एक अलग वर्ग बनाना और कॉन्फ़िगर करना होगा।

नोट: --storage-driver=devicemapper और -e lxc विकल्प, डोकर डेमॉन लिए कर रहे हैं नहीं डोकर ग्राहक के लिए उपयोग करते समय docker run ....... चल रहा है।

+0

mbarthelemy, मैं डिस्क के बारे में अपने प्रश्न को पूरक करता हूं, क्या आप देखने में मदद कर सकते हैं? –

+0

आपकी रूट एफएस वॉल्यूम पहला है ('9.8 जी | 276 एम | 9.0 जी | 3% | /')। आकार, जैसा कि अपेक्षित है, 10 जीबी है। दूसरी रेखा एक बांध-माउंट है। – mbarthelemy

+0

आपका सुझाव डिस्क आकार को सीमित करने का एक अच्छा तरीका है। लेकिन मुझे लगता है कि इसे लागू करने के लिए एक और तरीका है। मैं कंटेनर में निर्दिष्ट समूह में एक और उपयोगकर्ता जोड़ने का फैसला करता हूं, फिर मैं उस समूह के डिस्क आकार को लिनक्स में "कोटा" का उपयोग कर सीमित करता हूं। बैंडविड्थ के बारे में, यह मेरे लिए बहुत जटिल है, मैं अभी भी कोशिश कर रहा हूं, शायद आपसे पूछूंगा कुछ बाद में –

0

1) क्या प्रत्येक कंटेनर में अन्य आकार (जैसे 20 जी, 30 जी आदि) आवंटित करना संभव है? आपने कहा कि यह डॉकर में हार्डकोड किया गया है, इसलिए यह असंभव प्रतीत होता है।

जवाब देने के लिए इस सवाल का Resizing Docker containers with the Device Mapper plugin

3

को देखें नई विज्ञप्ति संस्करण --device-पढ़ने के लिए bps है और --device-लिखने bps।

आप डोकर का उपयोग कर सकते रन --device-पढ़ने के लिए bps =/dev/sda: 10MB

अधिक यहाँ जानकारी: https://blog.docker.com/2016/02/docker-1-10/

+1

यह ध्यान दिया जाना चाहिए कि यह केवल ब्लॉक उपकरणों के लिए है। इंटरफेस यातायात जोड़ा नहीं गया है। [4763] (https://github.com/docker/docker/issues/4763) अभी भी खुला है – Matt

1

आप कंटेनर आप के लिए टीसी उपयोग कर सकते हैं तक पहुँच है उनके भीतर बैंडविड्थ नियंत्रण।

उदाहरण के लिए: अपने प्रवेश बिंदु लिपि में आप जोड़ सकते हैं: tc qdisc add dev eth0 root tbf rate 240kbit burst 300kbit latency 50ms

240kbps के एक बैंडविड्थ, फट 300kbps और 50 एमएस विलंबता है। यदि आप कंटेनरों को रूट के रूप में नहीं चला रहे हैं तो आपको --cap-add = NET_ADMIN को docker run कमांड पास करने की भी आवश्यकता है।

संबंधित मुद्दे