मैं एक डॉकफाइल बना रहा हूं जो एक कस्टम एप्लिकेशन चलाता है जो जावा के एक विशिष्ट संस्करण से जुड़ा हुआ है।
मैं एक सेंटोस 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 install -y $package --disablerepo=updates