Computer >> कंप्यूटर >  >> सॉफ्टवेयर >> आभासी मशीन

डॉकर और पर्यवेक्षक ट्यूटोरियल

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

अब, हमारी पहली सेवाओं, SSH और Apache का परीक्षण करते समय हमें जिन समस्याओं का सामना करना पड़ा, उनमें से एक इन सेवाओं का नियंत्रण था। हमारे पास कंटेनरों के अंदर init स्क्रिप्ट या सिस्टमड उपलब्ध नहीं था, और स्पष्ट रूप से, हम उन्हें नहीं चाहते थे। लेकिन हम चाहते हैं कि किसी तरह का तंत्र शुरू हो, बंद हो और हमारी सेवाएं क्या नहीं। पर्यवेक्षक का परिचय, इसलिए यह ट्यूटोरियल। कृपया मेरे पीछे आइए।

संक्षेप में पर्यवेक्षक

पर्यवेक्षक एक प्रक्रिया नियंत्रण प्रणाली है, जिसे प्रक्रियाओं की निगरानी और नियंत्रण के लिए डिज़ाइन किया गया है। यह init को बदलने का लक्ष्य नहीं रखता है, इसके बजाय यह प्रक्रियाओं को अपने स्वयं के ढांचे के भीतर समाहित करता है, और बूट समय पर उन्हें शुरू कर सकता है, जैसे हम चाहते हैं। इस बिंदु पर सॉफ़्टवेयर के बारे में अधिक गहराई में जाने का कोई कारण नहीं है।

पर्यवेक्षक सेटअप

मूल रूप से, पर्यवेक्षक एक अजगर मॉड्यूल है। इसे easy_install का उपयोग करके स्थापित किया जा सकता है, जो सेटप्टूल का एक हिस्सा है, जो स्वयं पायथन डिस्टुटिल्स पैकेज का एक विस्तार है। हां, इस बिंदु पर यह काफी जटिल हो जाता है। सौभाग्य से, अधिकांश लिनक्स वितरण ईजी_इनस्टॉल के साथ शिप होते हैं, जिसमें CentOS भी शामिल है, जो कि दिन के लिए हमारा परीक्षण मंच है।

आरंभ करने के लिए, हमें एक कंटेनर के अंदर पर्यवेक्षक स्थापित करने की आवश्यकता होगी। फिर, हम छवि को कमिट करेंगे और इसे अपने बिल्ड के लिए आधार रेखा के रूप में उपयोग करेंगे, जिसमें उपरोक्त SSH और Apache जैसी सेवाएँ शामिल होंगी। यदि आप अपने होस्ट पर पर्यवेक्षक स्थापित करने का प्रयास करते हैं, तो आपको बिना किसी समस्या के सफल होना चाहिए:

easy_install पर्यवेक्षक
पर्यवेक्षक की तलाश की जा रही है
पढ़ना https://pypi.python.org/simple/supervisor/
सर्वोत्तम मिलान:पर्यवेक्षक 3.1.3
डाउनलोड कर रहा है https://pypi.python.org/packages/source/s/supervisor/
पर्यवेक्षक-3.1.3.tar.gz#md5=aad263c4fbc070de63dd354864d5e552
प्रसंस्करण पर्यवेक्षक-3.1.3.tar.gz
लेखन /tmp/easy_install-vbOcMG/supervisor-3.1.3/setup.cfg
रनिंग सुपरवाइज़र-3.1.3/setup.py -q bdist_egg --dist-dir /tmp/easy_install-vbOcMG/supervisor-3.1.3/egg-dist-tmp-i96mIs
चेतावनी:निर्देशिका 'दस्तावेज़/बिल्ड' के अंतर्गत '*' से मेल खाने वाली कोई पूर्व-शामिल फ़ाइलें नहीं मिलीं
easy-install.pth फ़ाइल में पर्यवेक्षक 3.1.3 जोड़ना
/usr/bin में Echo_supervisord_conf स्क्रिप्ट इंस्टॉल कर रहा है
/usr/bin में pidproxy स्क्रिप्ट इंस्टॉल कर रहा है
/usr/bin में पर्यवेक्षकctl स्क्रिप्ट स्थापित कर रहा है
पर्यवेक्षक स्क्रिप्ट को/usr/bin पर स्थापित करना

स्थापित

/usr/lib/python2.7/site-packages/supervisor-3.1.3-py2.7.egg
पर्यवेक्षक के लिए प्रसंस्करण निर्भरता
मेल्ड3>=0.6.5 के लिए खोजा जा रहा है
पढ़ना https://pypi.python.org/simple/meld3/
सर्वश्रेष्ठ मैच:मेल्ड3 1.0.2
डाउनलोड कर रहा है https://pypi.python.org/packages/source/m/meld3/
meld3-1.0.2.tar.gz#md5=3ccc78cd79cffd63a751ad7684c02c91
प्रसंस्करण meld3-1.0.2.tar.gz
लेखन /tmp/easy_install-wnhLVS/meld3-1.0.2/setup.cfg
रनिंग meld3-1.0.2/setup.py -q bdist_egg --dist-dir /tmp/easy_install-wnhLVS/meld3-1.0.2/egg-dist-tmp-Lp88cX
zip_safe ध्वज सेट नहीं है; संग्रह सामग्री का विश्लेषण...
easy-install.pth फ़ाइल में meld3 1.0.2 जोड़ना

स्थापित /usr/lib/python2.7/site-packages/meld3-1.0.2-py2.7.egg
पर्यवेक्षक

के लिए संसाधन निर्भरता समाप्त

एक कंटेनर के अंदर, आपको एक त्रुटि मिलेगी, क्योंकि कंटेनर में जोड़ा गया पायथन ढांचा पूरा नहीं हुआ है, और कुछ मॉड्यूल गायब हैं।

# easy_install पर्यवेक्षक
ट्रेसबैक (सबसे हालिया कॉल अंतिम):
फ़ाइल "/usr/bin/easy_install", लाइन 5, <मॉड्यूल> में
pkg_resources से load_entry_point आयात करें
आयात त्रुटि:pkg_resources नाम का कोई मॉड्यूल नहीं

इसका मतलब है कि हमें मैन्युअल रूप से easy_install सेटअप करना होगा:

wget https://bitbucket.org/pypa/setuptools/raw/ ->
-> बूटस्ट्रैप/ez_setup.py -O - | अजगर

पर्यवेक्षक विन्यास

अगला चरण कंटेनर के लिए कॉन्फ़िगरेशन बनाना है। हम फ़ाइल को होस्ट पर बना सकते हैं, और फिर हम अपने Dockerfile में COPY निर्देश का उपयोग करके निर्माण प्रक्रिया के दौरान इसे अपनी छवि में कॉपी कर लेंगे।

कॉपी ./supervisord.conf /etc/supervisord.conf

कॉन्फ़िगरेशन कुछ इस तरह होगा:

[पर्यवेक्षक]
नोडेमोन =सच

[कार्यक्रम:एसएसएचडी]
कमांड =/usr/sbin/sshd -D

[कार्यक्रम:httpd]
कमांड =/ बिन / बैश -c "निष्पादन / usr / sbin / httpd -DFOREGROUND"

यहाँ क्या हो रहआ हैं? प्रत्येक स्क्वायर ब्रैकेट जोड़ी एक सेक्शन को परिभाषित करती है। पर्यवेक्षक के लिए ही, हम परिभाषित करते हैं कि इसे स्वयं को निरूपित करने के बजाय अग्रभूमि में शुरू करना चाहिए, जिसका अर्थ होगा एक पृष्ठभूमि सेवा बनना।

Sshd नाम के प्रोग्राम के लिए, हम संबंधित कमांड को निष्पादित करते हैं, अनिवार्य रूप से पृष्ठभूमि में SSHD चल रहा है। Httpd नाम के प्रोग्राम के लिए, हम सर्वर को अग्रभूमि में, एक अलग शेल में शुरू करते हैं। कई अन्य विकल्प उपलब्ध हैं, लेकिन फिलहाल, पर्यवेक्षक के साथ काम करने के लिए यह न्यूनतम आवश्यकता है।

कंटेनर चलाना और समस्या निवारण

जब हम अपनी इमेज बना लेते हैं और उसे चला लेते हैं, तो सुपरवाइज़र को अपनी प्रक्रिया शुरू करनी चाहिए। लेकिन पहले, आइए कुछ सामान्य त्रुटियों से निपटें। एक जो आप देख सकते हैं वह है:

डॉकर रन-टी-पी 22-पी 80 छवि-3:नवीनतम
/usr/lib/python2.7/site-packages/supervisor-3.1.3-py2.7.egg/
पर्यवेक्षक/options.py:296:उपयोगकर्ता चेतावनी:पर्यवेक्षक रूट के रूप में चल रहा है और यह डिफ़ॉल्ट स्थानों में इसकी कॉन्फ़िगरेशन फ़ाइल खोज रहा है (इसकी वर्तमान कार्यशील निर्देशिका सहित); आप शायद बेहतर सुरक्षा के लिए कॉन्फ़िगरेशन फ़ाइल के लिए एक पूर्ण पथ निर्दिष्ट करते हुए "-c" तर्क निर्दिष्ट करना चाहते हैं।
'पर्यवेक्षक जड़ के रूप में चल रहा है और यह खोज रहा है'
त्रुटि:डिफ़ॉल्ट पथों पर कोई कॉन्फ़िगरेशन फ़ाइल नहीं मिली (/usr/etc/supervisord.conf, /usr/supervisord.conf,supervisord.conf, etc/supervisord.conf, /etc/supervisord.conf); किसी भिन्न पथ पर कॉन्फ़िगरेशन फ़ाइल निर्दिष्ट करने के लिए -c विकल्प का उपयोग करें
मदद के लिए, /usr/bin/supervisord -h

का प्रयोग करें

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

# डॉकर रन-टी-पी 22-पी 80 इमेज-3:latest
/usr/lib/python2.7/site-packages/supervisor-3.1.3-py2.7.egg/
पर्यवेक्षक/options.py:296:उपयोगकर्ता चेतावनी:पर्यवेक्षक रूट के रूप में चल रहा है और यह डिफ़ॉल्ट स्थानों में इसकी कॉन्फ़िगरेशन फ़ाइल खोज रहा है (इसकी वर्तमान कार्यशील निर्देशिका सहित); आप शायद बेहतर सुरक्षा के लिए कॉन्फ़िगरेशन फ़ाइल के लिए एक पूर्ण पथ निर्दिष्ट करते हुए "-c" तर्क निर्दिष्ट करना चाहते हैं।
'पर्यवेक्षक जड़ के रूप में चल रहा है और यह खोज रहा है'
372 CRIT पर्यवेक्षक रूट के रूप में चल रहा है (कॉन्फ़िगरेशन फ़ाइल में कोई उपयोगकर्ता नहीं)
375 INFO पर्यवेक्षक ने पीआईडी ​​​​1 से शुरुआत की
378 जानकारी उत्पन्न हुई:'httpd' pid 9 के साथ
381 जानकारी उत्पन्न हुई:पीआईडी ​​​​10 के साथ 'एसएसएचडी'
602 जानकारी बाहर निकल गई:httpd (निकास स्थिति 1; अपेक्षित नहीं)
606 जानकारी उत्पन्न हुई:'httpd' pid 11 के साथ
606 INFO सफलता:sshd ने रनिंग स्थिति में प्रवेश किया, प्रक्रिया 1 सेकंड (स्टार्टसेक) से अधिक तक रुकी रही
671 जानकारी बाहर निकल गई:httpd (निकास स्थिति 1; अपेक्षित नहीं)
676 जानकारी उत्पन्न हुई:'httpd' pid 12 के साथ
742 सूचना बाहर निकल गई:httpd (निकास स्थिति 1; अपेक्षित नहीं)
749 जानकारी उत्पन्न हुई:'httpd' pid 13 के साथ
825 जानकारी बाहर निकल गई:httpd (निकास स्थिति 1; अपेक्षित नहीं)
826 सूचना छोड़ दी:httpd ने FATAL स्थिति में प्रवेश किया, बहुत से लोग बहुत जल्दी पुनर्प्रयास शुरू करते हैं

छोड़ दिया:httpd ने FATAL स्थिति में प्रवेश किया, बहुत से लोग बहुत जल्दी पुनर्प्रयास शुरू करते हैं

हमारे पास यहां क्या है अपाचे थ्रेड्स बाहर निकल रहे हैं, पर्यवेक्षक को उन्हें फिर से शुरू करने के लिए मजबूर कर रहे हैं, और अंत में हार मान रहे हैं, जो हमें एक घातक स्थिति में ले जाता है। हमारा कंटेनर इस समय काफी बेकार है।

यहां, संकल्प पर्यवेक्षक d.conf फ़ाइल को संपादित करने और httpd प्रोग्राम अनुभाग में अतिरिक्त निर्देश पेश करने के लिए है, जो प्रक्रिया को और अधिक शानदार तरीके से संभालेगा।

[कार्यक्रम:httpd]
स्टार्टसेक =0
ऑटोरेस्टार्ट =झूठा
कमांड =/ बिन / बैश -c "निष्पादन / usr / sbin / httpd -DFOREGROUND"

हमने startsecs =0 और autorestart =false जोड़ा। पहला निर्देश हमें बताता है:

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

दूसरे का मतलब है कि पर्यवेक्षक अपाचे थ्रेड रीस्टार्ट को हैंडल नहीं करेगा, और इन्हें वेब सर्वर द्वारा ही हैंडल किया जाएगा, क्योंकि यह आने वाले HTTP रिक्वेस्ट को हैंडल करता है।

असत्य, अप्रत्याशित या सत्य में से एक हो सकता है। यदि गलत है, तो प्रक्रिया कभी भी स्वत:प्रारंभ नहीं होगी। यदि अनपेक्षित है, तो प्रक्रिया तब फिर से शुरू हो जाएगी जब प्रोग्राम एक निकास कोड से बाहर निकलता है जो इस प्रक्रिया कॉन्फ़िगरेशन से जुड़े निकास कोडों में से एक नहीं है (निकास कोड देखें)। यदि सही है, तो बाहर निकलने पर प्रक्रिया बिना किसी शर्त के फिर से शुरू हो जाएगी, इसके बाहर निकलने के कोड की परवाह किए बिना।

अब, हम कंटेनर को फिर से चलाने की कोशिश कर सकते हैं। याद रखें /run/httpd समस्या जो हमें मूल गाइड में मिली थी? /run निर्देशिका के बिना, आपको निम्नलिखित संदेश दिखाई देंगे:

डॉकर रन-टी-पी 22-पी 80 छवि-3:नवीनतम
/usr/lib/python2.7/site-packages/supervisor-3.1.3-py2.7.egg/
पर्यवेक्षक/options.py:296:उपयोगकर्ता चेतावनी:पर्यवेक्षक रूट के रूप में चल रहा है और यह डिफ़ॉल्ट स्थानों में इसकी कॉन्फ़िगरेशन फ़ाइल खोज रहा है (इसकी वर्तमान कार्यशील निर्देशिका सहित); आप शायद बेहतर सुरक्षा के लिए कॉन्फ़िगरेशन फ़ाइल के लिए एक पूर्ण पथ निर्दिष्ट करते हुए "-c" तर्क निर्दिष्ट करना चाहते हैं।
'पर्यवेक्षक जड़ के रूप में चल रहा है और यह खोज रहा है'
913 CRIT पर्यवेक्षक रूट के रूप में चल रहा है (कॉन्फ़िगरेशन फ़ाइल में कोई उपयोगकर्ता नहीं)
916 INFO पर्यवेक्षक ने पीआईडी ​​​​1 के साथ शुरुआत की
919 सूचना उत्पन्न हुई:'httpd' pid 8 के साथ
921 जानकारी उत्पन्न हुई:पीआईडी ​​​​9 के साथ 'एसएसएचडी'
079 जानकारी की सफलता:httpd ने रनिंग स्थिति में प्रवेश किया, प्रक्रिया 0 सेकंड से अधिक समय तक रुकी रही (स्टार्टसेक)
105 जानकारी बाहर निकल गई:httpd (निकास स्थिति 0; अपेक्षित)
120 जानकारी अज्ञात पिड 10 काटा
122 INFO सफलता:sshd ने रनिंग स्थिति में प्रवेश किया, प्रक्रिया> 1 सेकंड (स्टार्टसेक)

के लिए रुकी है

इस बिंदु पर, आपको कंटेनर से कनेक्ट (बाश शेल संलग्न या निष्पादित) करना होगा, लॉग की जांच करनी होगी, और यह समझने की कोशिश करनी होगी कि सेवा अपेक्षा के अनुरूप क्यों नहीं चल रही है।

सफल परीक्षण

और फिर, एक बार जब हम अंत में सब कुछ सुलझा लेते हैं:

निष्कर्ष

यह काफी नीरस ट्यूटोरियल है। लेकिन यह हमारे शस्त्रागार में एक और उपयोगी उपकरण पेश करता है, जिसका उपयोग अब हम सिस्टमड जैसे जटिल, महंगे ढांचे को स्थापित किए बिना, मजबूत और सुरुचिपूर्ण तरीके से कंटेनरों के अंदर सेवाओं को नियंत्रित करने के लिए कर सकते हैं। यह डॉकर के बारे में कुछ और भी सिखाता है कि कैसे काम करें और समस्याओं का निवारण करें और ऐसे ही।

पर्यवेक्षक सख्ती से जरूरी नहीं है, क्योंकि हम इसके बिना अपनी एसएसडीडी और httpd प्रक्रियाओं को चलाने में कामयाब रहे, लेकिन कुछ लोग इस विधि को पसंद कर सकते हैं, खासकर अगर उन्हें अपनी सेवाओं को अक्सर शुरू और पुनरारंभ करना पड़ता है। किसी भी तरह से, उपयोगिता से परिचित होने से डॉकर तंत्र में समझ और विश्वास पैदा करने में मदद मिलती है। मुझे आशा है कि आपको यह मार्गदर्शिका उपयोगी लगी होगी, और कृपया अपने अनुरोध भेजें कि हमें आगे क्या खोजना चाहिए।

प्रोत्साहित करना।

  1. वर्चुअलबॉक्स और NAT नेटवर्क कॉन्फ़िगरेशन ट्यूटोरियल

    कई दिन पहले, मैं एक दिलचस्प समस्या स्लैश रोड़ा मारा। खैर, अधिक प्रकार की एक परिचालन चुनौती जिसने वर्चुअलबॉक्स के लिए मेरी पसंद को मजबूत किया। अर्थात्, मैं कई वर्चुअल मशीनों के साथ एक छोटा निजी नेटवर्क स्थापित करना चाहता था। एक मशीन एक सर्वर होगी, और अन्य ग्राहक एजेंट सॉफ्टवेयर चलाने वाले और सर्वर को

  1. KVM में संग्रहण कैसे प्रबंधित करें - ट्यूटोरियल

    ठीक है, कुछ दिन पहले, मैंने आपको कर्नेल-आधारित वर्चुअल मशीन (KVM) तकनीक से परिचित कराया, एक मुफ़्त और ओपन-सोर्स वर्चुअलाइज़ेशन समाधान जिसे आप VirtualBox और VMware उत्पादों के बजाय उपयोग करने पर विचार कर सकते हैं - या शायद उनके साथ। किसी भी तरह से, हमने बुनियादी प्रबंधन में दबोच लिया, लेकिन हमने अलग-

  1. वर्चुअलबॉक्स में डिस्क क्लोन कैसे करें - ट्यूटोरियल

    यदि आप व्यवसाय या आनंद के लिए वर्चुअलाइजेशन का उपयोग कर रहे हैं, तो हो सकता है कि आपको वर्चुअलबॉक्स मिल गया हो, एक बहुत ही शक्तिशाली, अत्यधिक बहुमुखी मुफ्त समाधान जो डेस्कटॉप उपयोगकर्ताओं को ऑपरेटिंग सिस्टम को तैनात करने की बात आने पर अत्यधिक लचीलेपन की अनुमति देता है, किसी भी तरह से। और यदि आप शौ