Saya membuat dockerfile yang menjalankan aplikasi khusus yang terkait dengan versi Java tertentu.
Saya menggunakan gambar dasar centos7 karena itulah yang saya maksud dengan artikel yang saya gunakan dan karena saya harus menggunakan sesuatu, jadi itu sama baiknya dengan yang lainnya. Jujur saya tidak peduli apa yang saya gunakan userland. Inti dari gambar ini adalah perangkat lunak yang dihosting, distribusi Linux itu sendiri hanyalah sarana untuk mencapai tujuan - yang penting, JDK tidak akan digunakan oleh aplikasi atau pengguna lain.
Seperti yang dinyatakan, aplikasi saya terikat ke versi Java tertentu yang saya gunakan - setiap pembaruan ke versi Java akan memerlukan uji regresi penuh dari perangkat lunak dengan versi spesifik sebelum dirilis.
Artikel yang saya ikuti dimulai dengan JDK dockerfile menginstal bagian yang terlihat seperti ini:
FROM centos:centos7
RUN yum makecache \
&& yum update -y \
&& yum install -y \
java-1.8.0-openjdk-devel \
&& yum clean all
Itu tidak cukup spesifik, setiap kali gambar dibangun itu akan mendapatkan versi acak Jawa, yang bukan yang saya inginkan, saya perlu versi Jawa tertentu.
Saya mengubah file buruh pelabuhan menjadi seperti ini:
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
Dan gambar buruh pelabuhan sedang membangun dengan baik. Itu pada bulan Desember.
Minggu ini, saya perlu membuat perubahan kecil ke bagian yang berbeda dari perangkat lunak dan membangun kembali versi baru dari gambar, tetapi membangun gambar sekarang gagal.
Build gagal sekarang karena versi spesifik dari paket java tidak lagi tersedia (setidaknya, saya pikir itulah yang dikatakannya kepada saya):
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
Bagaimana saya bisa membangun kembali dockerfile saya sehingga saya selalu dapat menggunakan versi Java tertentu (dalam contoh ini, saya ingin versi java menjadi 1.8.0 pembaruan 65)?
Sebuah jawaban negatif baik-baik saja - jika berbagai mekanisme pengemasan Linux secara umum tidak ingin orang menggunakan repositori mereka seperti ini, itu OK - saya selalu dapat mengemas versi JDK saya sendiri sebagai file zip dan hanya membongkar yang ada di suatu tempat di dalam lingkungan sebagai bagian dari membangun gambar, tapi itu banyak kerumitan yang saya lebih suka tidak harus lakukan.
Bagaimana orang lain melakukan ini? Apakah ada cara berbeda untuk menginstal JDK sehingga saya dapat memiliki versi terbaru dari distribusi OS dengan pembaruan terbaru (seperti yang didefinisikan oleh gambar dasar dalam klausa FROM dan pembaruan yum) tetapi menginstal versi spesifik dari JDK?
Apakah ada versi Linux yang lebih cocok dengan persyaratan seperti ini (saya tidak terikat dengan CentOS, distribusi Linux pengguna lahan tidak terlalu penting bagi saya)?
yum install -y $package --disablerepo=updates