मैं लिनक्स वातावरण कैसे बनाऊं जो विशिष्ट संस्करणों के पैकेज को निर्दिष्ट करता है?


9

मैं एक डॉकफाइल बना रहा हूं जो एक कस्टम एप्लिकेशन चलाता है जो जावा के एक विशिष्ट संस्करण से जुड़ा हुआ है।

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

जैसा कि कहा गया है, मेरा आवेदन जावा के विशिष्ट संस्करण से जुड़ा हुआ है जिसका मैं उपयोग कर रहा हूं - जावा संस्करण के किसी भी अद्यतन को रिलीज़ होने से पहले उस विशिष्ट संस्करण के साथ सॉफ्टवेयर के पूर्ण प्रतिगमन परीक्षण की आवश्यकता होगी।

लेख मैं निम्नलिखित संबंधित dockerfile JDK स्थापित भागों के साथ इस तरह शुरू कर रहा था:

FROM centos:centos7
RUN yum makecache \
    && yum update -y \
    && yum install -y \
    java-1.8.0-openjdk-devel \
    && yum clean all

यह पर्याप्त विशिष्ट नहीं है, जब भी छवियां बनती हैं तो इसे जावा का एक यादृच्छिक संस्करण मिलेगा, जो कि मैं नहीं चाहता, मुझे जावा के एक विशिष्ट संस्करण की आवश्यकता है।

मैंने इस तरह दिखने के लिए डॉकटर फ़ाइल को बदल दिया:

FROM centos:centos7
RUN yum makecache \
    && yum update -y \
    && yum install -y \
    java-1.8.0-openjdk-devel-1.8.0.65-3.b17.el7 \
    && yum clean all

और कर्ता की छवि ठीक बन रही थी। वह दिसंबर में था।

इस हफ्ते, मुझे सॉफ्टवेयर के एक अलग हिस्से में एक छोटा सा बदलाव करने और छवि के एक नए संस्करण के पुनर्निर्माण की आवश्यकता थी, लेकिन छवि का निर्माण विफल हो गया।

बिल्ड अब विफल हो गया है क्योंकि जावा पैकेज का वह विशिष्ट संस्करण अब उपलब्ध नहीं है (कम से कम, मुझे लगता है कि यह मुझे बता रहा है):

Error: Package: 1:java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64 (base)
Requires: java-1.8.0-openjdk-headless = 1:1.8.0.65-3.b17.el7
Available: 1:java-1.8.0-openjdk-headless-1.8.0.65-3.b17.el7.x86_64 (base)
java-1.8.0-openjdk-headless = 1:1.8.0.65-3.b17.el7
Installing: 1:java-1.8.0-openjdk-headless-1.8.0.71-2.b15.el7_2.x86_64 (updates)
java-1.8.0-openjdk-headless = 1:1.8.0.71-2.b15.el7_2

मैं अपने डॉकफाइल को फिर से कैसे बना सकता हूं ताकि मैं हमेशा जावा के एक विशिष्ट संस्करण का उपयोग कर सकूं (इस उदाहरण में, मैं चाहता हूं कि जावा का संस्करण 1.8.0 अपडेट 65 हो)?

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

अन्य लोग ऐसा कैसे करते हैं? क्या JDK को स्थापित करने का एक अलग तरीका है ताकि मेरे पास नवीनतम अपडेट के साथ OS वितरण का एक हालिया संस्करण हो (जैसा कि FROM क्लॉज और यम अपडेट में आधार छवि द्वारा परिभाषित किया गया है) लेकिन JDK का एक विशिष्ट संस्करण स्थापित करें?

क्या इस तरह की आवश्यकता के लिए लिनक्स संस्करण अधिक उपयुक्त है (मैं CentOS के लिए वचनबद्ध नहीं हूं, उपयोगकर्तालैंड लिनक्स वितरण मेरे लिए विशेष रूप से महत्वपूर्ण नहीं है)?


डॉक के साथ प्रयोग करने योग्य द्वारा yum-versionlock होगा ?
हारून कोपले

1
@AaronCopley मुझे ऐसा नहीं लगता। वर्जनलॉक यह सुनिश्चित करने पर केंद्रित है कि संस्करण अगली बार जब आप अपडेट चलाते हैं तो यह रहता है - लेकिन मैं वास्तव में प्रारंभिक इंस्टॉलेशन कमांड बनाने के बारे में चिंतित हूं कि एक बार रिपॉजिटरी एक नए संस्करण पर ले जाने के बाद असफल नहीं होगी। मैं उस विशेष वातावरण पर कभी चलने वाले यम अद्यतन पर कभी योजना नहीं बनाता। जब पर्यावरण को नए अपडेट की आवश्यकता होती है, तो एक नई डॉकटर छवि बनाई जाएगी (और मैं चाहता हूं कि जेडडीके के बिल्कुल उसी संस्करण का उपयोग किया जाए क्योंकि यह अब उपयोग कर रहा है)।
छीना हुआ

1
क्षमा करें, मुझे लगता है कि मुझे गलत समझा गया। आप देख सकते हैं कि आप जिस संस्करण का अनुरोध कर रहे हैं, वह आधार में है और जो भी कारण हो, उसे अपडेट से इंस्टॉल कर रहा है । कोशिश करेंyum install -y $package --disablerepo=updates
हारून कोपले

1
@AaronCopley हां, यह काम करने लगता है - धन्यवाद! यदि आप इसका उत्तर देते हैं तो मैं इसे सफल बनाऊंगा। या मैं इसे बाद में खुद जोड़ूंगा।
छीना हुआ

जवाबों:


2

ऐसा लगता है कि यह आपके इच्छित पैकेज को देखता है, लेकिन अपडेट रिपॉजिटरी से जो भी कारण स्थापित हो रहा है।

आप अपने yum कमांड में अपडेट रिपॉजिटरी को निष्क्रिय कर सकते हैं;

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