Java'nın belirli bir sürümüne bağlı özel bir uygulama çalıştıran bir dockerfile oluşturuyorum.
Centos7 temel imajını kullanıyorum çünkü bahsettiğim bir makale kullanıyordum ve bir şey kullanmam gerektiğinden, bu kadar iyi. Dürüst olmak gerekirse, hangi kullanıcıyı kullandığım umurumda değil. Bu görüntünün amacı, barındırılan yazılımdır, Linux dağıtımının kendisi sadece bir amaçtır - önemli olarak, JDK diğer uygulamalar veya kullanıcılar tarafından kullanılmayacaktır.
Belirtildiği gibi, uygulamam kullandığım Java'nın belirli sürümüne bağlı - Java sürümündeki herhangi bir güncelleme, yayınlanmadan önce söz konusu sürümle yazılımın tam regresyon testini gerektirecektir.
Takip ettiğim makale aşağıdaki gibi ilgili dockerfile JDK kurulum parçaları ile başladı:
FROM centos:centos7
RUN yum makecache \
&& yum update -y \
&& yum install -y \
java-1.8.0-openjdk-devel \
&& yum clean all
Bu yeterince spesifik değil, görüntüler oluşturulduğu zaman Java'nın rastgele bir sürümünü alacak, istediğim şey bu değil, Java'nın belirli bir sürümüne ihtiyacım var.
Docker dosyasını şu şekilde görünecek şekilde değiştirdim:
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
Ve liman işçisinin imajı iyi gidiyordu. Aralık ayıydı.
Bu hafta, yazılımın farklı bir bölümünde küçük bir değişiklik yapmam ve görüntünün yeni bir sürümünü yeniden oluşturmam gerekiyordu, ancak görüntü oluşturma artık başarısız oluyor.
Java paketinin belirli bir sürümü artık mevcut olmadığından derleme başarısız oluyor (en azından bana söylediği şey budur):
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'ımı her zaman Java'nın belirli bir sürümünü kullanabilmem için nasıl yeniden oluşturabilirim (bu örnekte, java sürümünün 1.8.0 güncelleştirme 65 olmasını istiyorum)?
Olumsuz bir cevap iyidir - eğer çeşitli Linux paketleme mekanizmaları genel olarak insanların depolarını bu şekilde kullanmasını istemiyorsa, sorun değil - JDK'nın kendi versiyonumu her zaman bir zip dosyası olarak paketleyebilir ve Görüntü oluşturmanın bir parçası olarak, ancak bu yapmamayı tercih ettiğim bir grup güçlük.
Diğer insanlar bunu nasıl yapıyor? En son güncelleştirmelerle (FROM yan tümcesinde ve yum güncellemesinde temel görüntü tarafından tanımlandığı gibi) işletim sistemi dağıtımının yeni bir sürümüne sahip olabilmem için JDK'yı yüklemenin farklı bir yolu var mı?
Bu tür bir gereksinime daha uygun bir Linux sürümü var mı (CentOS'a bağlı değilim, kullanıcı alanı Linux dağıtımı benim için özellikle önemli değil)?
yum install -y $package --disablerepo=updates