2016-07-30 5 views
5

मैं अपने सभी पर्ल अनुप्रयोगों को चलाने में सक्षम होने के लिए एक डॉकर छवि बनाने पर काम कर रहा हूं। अनुप्रयोगों को सैकड़ों सीपीएएन मॉड्यूल स्थापित करने की आवश्यकता है। डॉकर छवि के पूर्ण निर्माण को पूरा होने में लगभग एक घंटे लगते हैं।डॉकर छवियों को बनाए रखते समय मैं पर्ल मॉड्यूल अपडेट को कैसे संभालना चाहिए?

प्रारंभिक छवि करने के बाद, मुझे यकीन नहीं है कि चालू अद्यतनों को कैसे प्रबंधित किया जाए।

  1. हम Git में एक भी Dockerfile रख सकता है, और फिर आवश्यक के रूप में इस संशोधित करने, और नए धक्का dockerhub अप करने के लिए बनाता है। हालांकि यदि निर्माण करने वाले व्यक्ति में सभी मध्यवर्ती छवियां नहीं हैं, तो एक एकल सीपीएएन मॉड्यूल जोड़ना बेहद कठिन प्रक्रिया हो सकता है, और यह पता चलने में एक घंटे लग सकता है कि नया मॉड्यूल सही तरीके से इंस्टॉल हो रहा है या नहीं। इसके अलावा यह हर सीपीएएन मॉड्यूल को फिर से डाउनलोड करेगा, जो थोड़ा जोखिम भरा लगता है, क्योंकि नए मॉड्यूल में ब्रेकिंग बदलाव हो सकता है।

  2. वैकल्पिक रूप से, बिल्ड करने वाला व्यक्ति नवीनतम डॉकर-हब छवि खींच सकता है, और उसके बाद सीपीएन मॉड्यूल को इंटरैक्टिव रूप से स्थापित कर सकता है, बिल्ड को प्रतिबद्ध कर सकता है और नई छवि को डॉकरहब पर धक्का दे सकता है। हालांकि तब हमारे पास केवल डॉकरबब छवियां हैं, लेकिन डॉकरफाइल मास्टर नहीं हैं।

  3. या दूसरा विकल्प प्रत्येक नए निर्माण के लिए डॉकरफ़ाइल बनाना होगा, जो पिछले डॉकरबब छवि का संदर्भ देता है। हालांकि यह अत्यधिक जटिल लगता है।

विकल्प 1) गलत लगता है। मुझे पूरा यकीन है कि हम एक अतिरिक्त मॉड्यूल स्थापित करने के लिए बस ओएस से पूरी छवि को पुनर्निर्माण नहीं करना चाहते हैं। हालांकि डॉकरफाइल के बिना छवियों पर निर्भर होने पर जोखिम भरा लगता है।

+0

विकल्प 3 या किसी भिन्न रूप सबसे "डोकर उपयुक्त" समाधान प्रतीत होता है के बारे में भी बहुत कुछ पता है। यदि आप एक संगठित टैगिंग रणनीति का पालन करते हैं, तो उपयोगकर्ता नवीनतम संस्करण में "अपग्रेड" करने वाले पिछले छवि परतों का उपयोग करने में सक्षम होंगे और केवल सबसे हाल ही में निर्माण करने की आवश्यकता होगी। यदि आपको कभी भी पूर्ण पुन: निर्माण की आवश्यकता हो तो पूर्ण निर्माण करने से बचने के लिए आप एक अलग नाम के साथ "आधार" संस्करण बनाना चाह सकते हैं। – ldg

उत्तर

1

आप अपने डॉकर छवि पर अपने अंतर्निहित ओएस के लिए मानक मॉड्यूल इंस्टॉलर का उपयोग कर सकते हैं।

उदाहरण के लिए, अगर इसके RedHat तो यम का उपयोग करें और केवल का उपयोग CPAN जब वे उपलब्ध नहीं

FROM centos:centos7 
    RUN yum -y install cpanm gcc perl perl-App-cpanminus perl-Config-Tiny && yum clean all 
    RUN cpanm install Some::Module; rm -fr root/.cpanm; exit 0 

here से लिया और संशोधित

मैं एक आधार छवि है की कोशिश करेंगे जो कर रहे हैं वास्तविक अनुप्रयोगों

मैं चीजों को अंतःक्रियात्मक रूप से करने से बचाना चाहूंगा (उदाहरण के लिए स्क्रिप्ट एक डॉकरफाइल) क्योंकि जब आप अपस्ट्रीम निर्भरता बदलते हैं तो बिल्ड को दोहराने में सक्षम होना चाहते हैं, जो आपके लिए डॉकर हब करता है।


संपादित आप उपयोग कर अपने खुद पैकेज में पर्ल मॉड्यूल में बदल सकते हैं dh-make-perl

आप अपनी खुद की उबंटू रेपो या Artifactory

इन का भुक्त समाधान reprepro का उपयोग करते हुए इन लोड कर सकते हैं तो स्थापित किया जा सकता जब आप अपने रेपो को डॉकरफ़ाइल के भीतर से स्रोत के रूप में उपयोग करते हैं तो apt-get का उपयोग करना।

जब मैं एक ऐसी ही बात की कोशिश की है इससे पहले कि कुछ समस्याएं हैं

  • आपके एप्लिकेशन मॉड्यूल के नवीनतम संस्करण के साथ काम नहीं करते
  • वहाँ कहीं अधिक निर्भरता आपकी अपेक्षा से
  • कुछ इस प्रकार हैं मॉड्यूल अभ्यस्त पैकेज

लाभ कर रहे हैं

  • आप एप्लिकेशन सर्वर बंद निर्माण उपकरण (जीसीसी, आदि) रखने
  • आप अपने निर्भरता
+0

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

+0

दुर्भाग्यवश ऐसे कुछ मॉड्यूल हैं जिनकी हमें आवश्यकता है जो आधिकारिक ओएस पैकेज में नहीं दिखते हैं। – user1751825

+0

मैंने देखा है कि एक और विकल्प स्थानीय :: lib की तरह कुछ उपयोग कर रहा है, और उसके बाद एक ही ओएस और perl चलाने वाले निर्माण उदाहरण पर सभी आवश्यक मॉड्यूल स्थापित कर रहा है, और फिर मैन्युअल रूप से पैकेजिंग और पूरे lib फ़ोल्डर को तैनात कर रहा है। क्या यह मॉड्यूल से व्यक्तिगत पैकेज बनाने पर कोई लाभ प्रदान करेगा? – user1751825

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