Bagaimana cara membangun lingkungan Linux yang menentukan versi paket tertentu?


9

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)?


Apakah yum-versionlock dapat digunakan dengan Docker?
Aaron Copley

1
@AaronCopley kurasa tidak. versilock tampaknya difokuskan untuk memastikan versi tetap di tempat itu saat berikutnya Anda menjalankan pembaruan - tapi saya sebenarnya khawatir membuat perintah instalasi awal tidak gagal setelah repositori pindah ke versi baru. Saya tidak berencana untuk menjalankan pembaruan yum pada lingkungan khusus itu lagi. Ketika lingkungan membutuhkan pembaruan baru, gambar buruh pelabuhan baru akan dibangun (dan saya ingin gambar itu menggunakan versi JDK yang sama persis seperti yang digunakan sekarang).
Shorn

1
Maaf, saya pikir saya salah paham. Anda dapat melihat versi yang Anda minta ada di basis dan itu menginstal dari pembaruan untuk alasan apa pun. Cobayum install -y $package --disablerepo=updates
Aaron Copley

1
@AaronCopley Yap, itu sepertinya berhasil - terima kasih! Jika Anda menjawabnya, saya akan menandainya dengan sukses. Atau saya akan menambahkannya sendiri nanti.
Shorn

Jawaban:


2

Sepertinya melihat paket yang Anda inginkan, tetapi untuk alasan apa pun menginstal dari repositori pembaruan.

Anda dapat menonaktifkan repositori pembaruan dalam perintah yum Anda;

yum install -y $package --disablerepo=updates
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.