ฉันกำลังสร้าง dockerfile ที่รันแอ็พพลิเคชันแบบกำหนดเองที่เชื่อมโยงกับ Java เวอร์ชันที่เจาะจง
ฉันใช้อิมเมจพื้นฐาน centos7 เพราะนั่นคือสิ่งที่บทความที่ฉันอ้างถึงใช้และเพราะฉันต้องใช้บางสิ่งบางอย่างดังนั้นมันก็ดีเหมือนกัน ฉันไม่สนใจสิ่งที่ผู้ใช้กำลังใช้งานอยู่ จุดสำคัญของภาพนี้คือซอฟต์แวร์ที่โฮสต์อยู่การกระจายตัวของ Linux เป็นเพียงวิธีการสิ้นสุด - ที่สำคัญ JDK จะไม่ถูกใช้โดยแอปพลิเคชันหรือผู้ใช้อื่น
แอปพลิเคชันของฉันเชื่อมโยงกับ Java เวอร์ชันเฉพาะที่ฉันกำลังใช้ - การอัปเดตเป็น Java เวอร์ชันใด ๆ จะต้องมีการทดสอบการถดถอยแบบเต็มของซอฟต์แวร์กับเวอร์ชันเฉพาะก่อนที่จะเผยแพร่
บทความที่ฉันตามมาเริ่มต้นด้วยส่วนที่เกี่ยวข้องกับการติดตั้ง JDK ติดตั้งที่มีลักษณะเช่นนี้:
FROM centos:centos7
RUN yum makecache \
&& yum update -y \
&& yum install -y \
java-1.8.0-openjdk-devel \
&& yum clean all
นั่นไม่เจาะจงพอทุกครั้งที่มีการสร้างอิมเมจมันจะได้รับ Java เวอร์ชันสุ่มซึ่งไม่ใช่สิ่งที่ฉันต้องการฉันต้องการ Java เวอร์ชันที่เจาะจง
ฉันเปลี่ยนไฟล์นักเทียบท่าเป็นแบบนี้:
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
และภาพนักเทียบท่าก็สร้างได้ดี นั่นคือในเดือนธันวาคม
ในสัปดาห์นี้ฉันต้องทำการเปลี่ยนแปลงเล็กน้อยกับส่วนอื่นของซอฟต์แวร์และสร้างรูปภาพเวอร์ชันใหม่ แต่การสร้างรูปภาพล้มเหลวในขณะนี้
การสร้างล้มเหลวในขณะนี้เนื่องจากแพ็คเกจ Java รุ่นที่ระบุไม่สามารถใช้งานได้อีกต่อไป (อย่างน้อยฉันคิดว่านั่นคือสิ่งที่บอกฉัน):
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
ฉันจะสร้าง dockerfile ของฉันใหม่เพื่อให้ฉันสามารถใช้ Java เวอร์ชันที่ระบุได้เสมอ (ในตัวอย่างนี้ฉันต้องการให้เวอร์ชันของ Java เป็น 1.8.0 update 65)
คำตอบเชิงลบนั้นใช้ได้ถ้ากลไกบรรจุภัณฑ์ Linux โดยทั่วไปไม่ต้องการให้ผู้คนใช้ที่เก็บของพวกเขาเช่นนี้มันก็โอเค - ฉันสามารถจัดแพคเกจ JDK เวอร์ชันของฉันเองเป็นไฟล์ซิปและแยกไฟล์ที่อยู่ภายใน สภาพแวดล้อมที่เป็นส่วนหนึ่งของการสร้างภาพ แต่นั่นเป็นเรื่องยุ่งยากที่ฉันไม่ต้องการทำ
คนอื่นทำเช่นนี้ได้อย่างไร มีวิธีอื่นในการติดตั้ง JDK เพื่อให้ฉันสามารถมีรุ่นล่าสุดของการกระจายระบบปฏิบัติการด้วยการปรับปรุงล่าสุด (ตามที่กำหนดโดยอิมเมจพื้นฐานในส่วนคำสั่ง FROM และการปรับปรุง yum) แต่ติดตั้ง JDK รุ่นที่ระบุหรือไม่
มีรุ่น Linux ที่เหมาะกับความต้องการประเภทนี้มากกว่าหรือไม่ (ฉันไม่ได้เป็น CentOS, การกระจาย Linux ของ userland นั้นไม่สำคัญสำหรับฉัน)
yum install -y $package --disablerepo=updates