क्या डिबेट पैकेज का उपयोग करने की कोई कमियां हैं जैसे कि यह एक एप्लिकेशन को तैनात करने के लिए एक कंटेनर था?


15

मेरी टीम वर्तमान में यह तय करने की कोशिश कर रही है कि क्या हमें अपने Nodejs ऐप को एक डॉक के रूप में कंटेनर में चलाने के बजाय एक डिबेट पैकेज के रूप में तैनात करना चाहिए।

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

ऐसा लगता है कि "मूल कंटेनरों के रूप में प्रति-पैकेज" छोटी सेवाओं के लिए बहुत मायने रखता है जहां पोर्ट संघर्षों की कोई चिंता नहीं है और जहां सभी निर्भरताएं एक आभासी वातावरण में बनाए रखी जाती हैं।

हालाँकि, मेरी आंत यह बता रही है कि यदि डेब्यू पैकेज अच्छे होते हैं, तो यह अधिक सामान्य होगा और डॉकटर को अधिक भाषा विशिष्ट समाधान के रूप में विज्ञापित किया जाएगा। क्या डेकोर जैसे पूर्ण सिस्टम का उपयोग करने के बजाय, हमारी सेवाओं को तैनात करने के लिए डेब पैकेज जैसी किसी चीज़ का उपयोग करने की कोई कमियां हैं?


1
वे परस्पर अनन्य नहीं हैं, आप अपने डॉक कंटेनर में अपना डिबेट पैकेज तैनात कर सकते हैं। हो सकता है कि आप माइक्रोसोर्सेज बनाम वर्चुअल मशीन के बारे में पूछ रहे हों?
क्रिस

हम्म, नहीं यह विशेष रूप से डॉक कंटेनर के बजाय एक डिब-पैकेज का उपयोग करने के बारे में है। मैं प्रश्न में ब्लॉग से अधिक जानकारी जोड़ूंगा।
avi

3
"हमने महसूस किया कि कर्नेल को केवल शिप कोड में तेजी से अपग्रेड करना एक ओवरकिल समाधान था।" यह सिर्फ मेरे लिए गलत लगता है। शिपिंग कोड की तुलना में अधिक महत्वपूर्ण क्या हो सकता है?
असफ लवी

जवाबों:


16

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

एक संभावित उत्तर यह होगा कि, यदि आप अपने आवेदन के लिए डेबियन पैकेज लिखने के इच्छुक हैं, तो आप अपने आवेदन को तैनात करने के लिए डॉकर का उपयोग भी कर सकते हैं । यह एक कॉन्फ़िगरेशन स्क्रिप्ट के साथ प्राप्त किया जा सकता है apt_setup.shजो कि जैसा दिखेगा

apt-key add - <<EOF
-----BEGIN PGP PUBLIC KEY BLOCK-----
<YOUR RELEASE OFFICER PGP KEY GOES HERE>
EOF

cat >> /etc/apt/sources.list <<EOF
deb https://my.organisation.org/repo debian-jessie main
apt-get update -y
apt-get upgrade -y
EOF

और Dockerfileकी तर्ज पर

ADD apt_setup.sh /root
RUN sh -ex /root/apt_setup.sh && rm /root/apt_setup.sh
RUN apt-get install -y my-node-js-package

(आपकी विशिष्ट स्थिति में, नोड्स सोर्स रिपॉजिटरी और एप्टर -ट्रांसपोर्ट-https जैसे कुछ हेल्पर पैकेज को apt_setup.shजोड़ना अधिक जटिल होगा ।)

इसलिए वास्तव में एक साथ डेबियन पैकेज और डॉकर का उपयोग करना संभव है ...

मेरा पेट […] मुझे बता रहा है कि अगर डेब्यू पैकेज अच्छे थे, तो यह अधिक सामान्य होगा

यह एक सही अड़चन है जो हमें खुद से पूछने के लिए प्रेरित करती है कि डॉकर एक तदर्थ पैकेजिंग प्रणाली के रूप में लोकप्रिय क्यों साबित होता है, जबकि यह एक होने का इरादा नहीं है। (ऊपर देखो।)

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

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

  • डॉकर के पास एक “बिल्ट-इन” (भुगतान करने वाली) सेवा है जो इसके उत्पादन की मेजबानी के लिए, डॉकर हब

अब एक पैकेज प्रणाली के रूप में डोकर छवियों पर डेबियन पैकेजों की ताकत क्या है? स्थापना पर निर्भरता पर तंग नियंत्रण। (अपग्रेड और डाउनग्रेड होने की संभावना भी मौजूद है लेकिन इसका कोई व्यावहारिक महत्व नहीं है अगर हम पैटर्न को लागू कर रहे हैं ।) इससे होता है।

निष्कर्ष

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


6

हां, कमियां हैं।

-Deb पैकेज के साथ आप एक ही होस्ट पर एक ही एप्लिकेशन के दो संस्करण नहीं कर पाएंगे। आपको वितरण उपलब्ध पैकेजों पर निर्भर रहना होगा, यदि आपका ऐप उदाहरण के लिए नोडज पर निर्भर है, तो या तो आप वितरण संस्करण के साथ फंस जाएंगे या आपको अपना खुद का इंस्टॉल करना होगा।

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

डॉक करने का मुख्य लक्ष्य प्रत्येक एप्लिकेशन को होस्टिंग सिस्टम और अन्य अनुप्रयोगों को एक ही होस्ट से अलग करना है। इस अलगाव को करने के दो कारण हैं: 1. मेजबान से अधिक लेने या किसी अन्य एप्लिकेशन को प्रभावित करने में सक्षम होने के लिए ऐप के समझौते से बचने के लिए 2. एप्लिकेशन को उसकी सटीक निर्भरता देने के लिए और सिस्टम अपडेट या किसी अन्य एप्लिकेशन द्वारा प्रभावित होने से बचाने के लिए। निर्भरता।


उह, किसी ने वितरण के रूबी, नोड, अजगर आदि का उपयोग करने का सुझाव नहीं दिया, आप उन लोगों के पैकेज बनाते हैं और उन्हें / ऑप्ट में डालते हैं। आपके पैकेज इन पर निर्भर करेंगे। आप डिबेट पैकेज के साथ अपने ऐप के कई संस्करण स्थापित कर सकते हैं, डेबियन में ही कई उदाहरण हैं। वास्तव में, यह कई संस्करणों को प्रबंधित करने का सबसे अच्छा तरीका है। यह जवाब पूरी तरह से गलत है।
अंजीर

1
@figtrap ओके में आधिकारिक लोचो रेपो का उपयोग करने और इलास्टिक्स खोज वी। 2.3 और वी। 5.6 समवर्ती रूप से स्थापित करने का प्रयास करें। यदि आप वर्णन कर रहे हैं तो दो अलग-अलग पैकेज स्थापित कर रहे हैं और यदि आप उचित हैं। निर्माण निर्भरता के साथ-साथ रखरखाव की अवधि में यह एक बुरा सपना है जब आपको स्टैक में कहीं गहरे में दो अलग-अलग libc संस्करणों की आवश्यकता होती है।
तेंसिबाई

5

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

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

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

जिन डेवलपर्स ने पैकेज बनाए और उत्परिवर्तन में जटिलता और जटिलता को नहीं समझा, परिणामस्वरूप उन्हें काफी कठिनाइयों का सामना करना पड़ा।

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

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


अब तक मुझे लग रहा है कि यह "मेरी मशीन पर काम करता है" की जगह "मेरी मशीन पर काम करता है", लेकिन डॉकिंग में विचित्र रूप से व्यवहार करता है।
मैट मोरन

1

डॉकर की छवि पैकेजिंग टुकड़े के बारे में विशेष रूप से बात करते हुए, कंटेनर रनटाइम में कुछ मामूली बिट्स नहीं हैं। सबसे बड़ी बात यह है कि एक डॉकटर की छवि चेरोट की तरह अधिक होती है, जिसका अर्थ है कि आपको साझा सिस्टम स्थिति के आधार पर गलती से रोका जा सकता है क्योंकि उपयोग में आने वाली प्रत्येक फ़ाइल को स्पष्ट रूप से छवि में शामिल किया जाना चाहिए, जबकि सिस्टम पैकेज आपके द्वारा डायनेमिक लिंक नहीं ले सकता उम्मीद है या अन्यथा अन्य संकुल के साथ अधिक intertwined हो। यह आपके ज्ञान के बिना जटिल सी निर्भरता के साथ आ सकता है, उदाहरण के लिए ओपनएसएसएल। इसके अतिरिक्त डीबेक के स्टोरेज सिस्टम में साझा किए गए बिट्स के साथ डिब-डुप्लिकेट बिट्स का उपयोग न करें। कुछ के लिए यह एक अच्छी बात हो सकती है, बेहतर I / O प्रदर्शन और कम चलती टुकड़े, लेकिन दूसरों के लिए यह एक समस्या हो सकती है।

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