डॉकटर संस्करण 3 में मेमोरी और सीपीयू सीमा कैसे निर्दिष्ट करें


111

मैं संस्करण 3 में निर्दिष्ट सेवाओं के लिए सीपीयू और मेमोरी निर्दिष्ट करने में असमर्थ हूं।

संस्करण 2 के साथ यह सेवाओं के तहत "मेम_लिमिट" और "cpu_shares" मापदंडों के साथ ठीक काम करता है। लेकिन यह संस्करण 3 का उपयोग करते समय विफल रहता है, उन्हें परिनियोजित अनुभाग के तहत रखना तब तक योग्य नहीं लगता जब तक कि मैं झुंड मोड का उपयोग नहीं कर रहा हूं।

क्या कोई मदद कर सकता है?

version: "3"
services:
  node:
    build:
     context: .
      dockerfile: ./docker-build/Dockerfile.node
    restart: always
    environment:
      - VIRTUAL_HOST=localhost
    volumes:
      - logs:/app/out/
    expose:
      - 8083
    command: ["npm","start"]
    cap_drop:
      - NET_ADMIN
      - SYS_ADMIN

जवाबों:


91

मुझे पता है कि विषय थोड़ा पुराना है और बासी लगता है, लेकिन वैसे भी मैं इन विकल्पों का उपयोग करने में सक्षम था:

    deploy:
      resources:
        limits:
          cpus: '0.001'
          memory: 50M

docker- रचना के 3.7 संस्करण का उपयोग करते समय

मेरे मामले में क्या मदद मिली, इस आदेश का उपयोग कर रहा था:

docker-compose --compatibility up

--compatibility ध्वज का अर्थ है (प्रलेखन से लिया गया):

यदि सेट किया गया है, तो कंपोज़ v3 फ़ाइलों में तैनात कुंजियों को उनके गैर-झुंड के समकक्ष में बदलने का प्रयास करेगा

यह बहुत अच्छा लगता है, कि मुझे v2 पर वापस अपने डॉकटर-कम्पोज़ फाइल को वापस नहीं लाना है।


4
यह दिलचस्प है कि इस विकल्प में एक नोट है : "रूपांतरण एक" सर्वोत्तम प्रयास "प्रयास है और इसे उत्पादन परिनियोजन के लिए निर्भर नहीं किया जाना चाहिए।"
बारतोलो-ओटिट

3
यह खराब डिज़ाइन किए गए प्रोग्राम, डॉकटर-कंपोज़ के लिए एक बहुत अच्छा फ़िक्स है।
डॉकटर

1
कंटेनर रैम / सीपीयू> डॉकर विंडोज / मैक के लिए उपलब्ध होने पर आपके संसाधन की कमी प्रभावी नहीं होगी। इसे बदलने के लिए मैक / विंडोज वरीयताओं-> संसाधनों के लिए डॉकर पर जाएं और तदनुसार समायोजित करें।
8bitme

58
deploy:
  resources:
    limits:
      cpus: '0.001'
      memory: 50M
    reservations:
      cpus: '0.0001'
      memory: 20M

अधिक: https://docs.docker.com/compose/compose-file/#resources

आप विशिष्ट मामले में:

version: "3"
services:
  node:
    image: USER/Your-Pre-Built-Image
    environment:
      - VIRTUAL_HOST=localhost
    volumes:
      - logs:/app/out/
    command: ["npm","start"]
    cap_drop:
      - NET_ADMIN
      - SYS_ADMIN
    deploy:
      resources:
        limits:
          cpus: '0.001'
          memory: 50M
        reservations:
          cpus: '0.0001'
          memory: 20M

volumes:
  - logs

networks:
  default:
    driver: overlay

ध्यान दें:

  • एक्सपोज़ आवश्यक नहीं है, यह आपके स्टैक नेटवर्क पर प्रति डिफ़ॉल्ट उजागर होगा।
  • छवियों को पूर्व-निर्मित किया जाना है। V3 के भीतर निर्माण संभव नहीं है
  • "रिस्टार्ट" भी पदावनत है। आप विफलता-प्रक्रिया के साथ परिनियोजन के तहत पुनरारंभ का उपयोग कर सकते हैं
  • आप स्वसंपूर्ण एक नोड "झुंड" का उपयोग कर सकते हैं, v3 सबसे अधिक सुधार (यदि सभी नहीं) झुंड के लिए हैं

यह भी नोट करें: झुंड मोड में नेटवर्क पुल नहीं करते हैं। यदि आप केवल आंतरिक रूप से कनेक्ट करना चाहते हैं, तो आपको नेटवर्क से जुड़ना होगा। आप 1) किसी अन्य कंपोज़ फ़ाइल के भीतर एक बाहरी नेटवर्क को निर्दिष्ट कर सकते हैं, या --attachable पैरामीटर (docker network create -d overlay My-Network --attachable) के साथ नेटवर्क बनाना होगा अन्यथा आपको इस तरह से पोर्ट प्रकाशित करना होगा:

ports:
  - 80:80

6
1. मैं संस्करण 3 का उपयोग करके छवियां बनाने में सक्षम हूं। <br/> 2. ऐसा लगता है कि v3 के लिए दृष्टिकोण v2 से पूरी तरह से अलग है, अपग्रेड की तरह नहीं। <br/> 3. डिप्लोम केवल स्विम मोड में काम करता प्रतीत होता है। मुझे चेतावनी मिल रही है - <br/> "चेतावनी: कुछ सेवाएं (नोड) 'परिनियोजित' कुंजी का उपयोग करती हैं, जिसे नजरअंदाज कर दिया जाएगा। कंपोज़ docker stack deployतैनाती को
स्वीकार

23
@ viveky4d4v कंपोज़ फॉर्मेट v3 doc स्टेट्स के रूप में, deployअगर आपने स्वार्म का उपयोग नहीं किया है तो इसे अनदेखा कर दिया जाता है। जब तक आप झुंड का उपयोग नहीं कर रहे हैं तब तक v3 प्रारूप का उपयोग करने का कोई कारण नहीं है।
दान लोव

2
यदि एक नई तैनाती शुरू करते हैं, तो मैं v3 के साथ शुरू करूंगा। भले ही मैं सिर्फ एक मेजबान है। इसलिए आपको बाद में स्केल करने की पॉसिबिलिटी मिली और यह उतनी ही मात्रा में समय की आवश्यकता होगी, जब एक बार आपको कॉन्सेप्ट समझ में आ जाएगा।
बर्डिनॉक्स

1
हाय @Connor, जब मैंने उत्तर दिया तो मैंने जो भी किया, वह एक टूटी हुई कड़ी को सही कर रहा था। आपकी तरह, मैं यहाँ "केवल आंतरिक रूप से" का मतलब निकालने में असमर्थ हूँ।
जे टेलर

3
@Berndinox क्या आपको पता है कि docs.docker.com/v17.12/config/containers/resource_constraints/…memory-swap पर बताए गए विकल्प को कैसे सेट किया जाए ? मैं इसे docker-compose.yml( docs.docker.com/v17.12/compose/compose-file/#resources ) में सेट करने का एक उदाहरण नहीं देखता । बहुत बहुत धन्यवाद।
रयान

49

डॉकर कम्पोज़ इसका समर्थन नहीं करता हैdeploy कुंजी। जब आप अपने संस्करण 3 YAML फ़ाइल का उपयोग डोकर स्टैक में करते हैं तो इसका सम्मान किया जाता है।

जब deployआप docker-compose.ymlफ़ाइल में कुंजी जोड़ते हैं और तब चलाते हैं तो यह संदेश मुद्रित होता हैdocker-compose up -d

चेतावनी: कुछ सेवाएँ (डेटाबेस) 'परिनियोजित' कुंजी का उपयोग करती हैं, जिसे अनदेखा किया जाएगा। रचना 'परिनियोजन' कॉन्फ़िगरेशन का समर्थन नहीं करती है - docker stack deployएक झुंड में तैनात करने के लिए उपयोग करें।

प्रलेखन ( https://docs.docker.com/compose/compose-file/#deploy ) कहता है:

सेवाओं की तैनाती और चलाने से संबंधित कॉन्फ़िगरेशन निर्दिष्ट करें। यह तभी प्रभावी होता है जब डॉक स्टैक की तैनाती के साथ झुंड को तैनात किया जाता है, और डॉकटर-कंपोज़ अप और डॉक-कंपोज़ रन को अनदेखा किया जाता है।


2
विशेष रूप से डॉक्स कहते हैं कि यदि आप ऐसा करना चाहते हैं, तो v2 का उपयोग करें या झुंड में तैनात करें।
ic_fl2
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.