Paketlerin belirli sürümlerini belirten bir Linux ortamı nasıl oluştururum?


9

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


Misiniz -versionlock yum Docker ile kullanılabilen tarafından?
Aaron Copley

1
@AaronCopley Ben öyle düşünmüyorum. versionlock, güncellemeyi bir sonraki çalıştırışınızda sürümün burada kaldığından emin olmaya odaklanmış gibi görünüyor - ancak aslında depo yeni bir sürüme geçtikten sonra ilk yükleme komutunun başarısız olmamasından endişe duyuyorum. Bu belirli ortamda bir daha yum güncellemesi yapmayı planlamıyorum. Ortam yeni güncellemelere ihtiyaç duyduğunda, yeni bir docker görüntüsü oluşturulacaktır (ve bu görüntünün JDK'nın şu anda kullanmakta olduğu sürümün aynısını kullanmasını istiyorum).
2'de Shorn

1
Üzgünüm, sanırım yanlış anladım. İstediğiniz sürümün temelde olduğunu ve herhangi bir nedenle güncellemelerden yüklendiğini görebilirsiniz . Deneyinyum install -y $package --disablerepo=updates
Aaron Copley

1
@AaronCopley Evet, işe yarıyor gibi görünüyor - teşekkürler! Eğer cevap verirsen başarılı olarak işaretlerim. Yoksa daha sonra kendim ekleyeceğim.
16:13, Shorn

Yanıtlar:


2

İstediğiniz paketi görüyor gibi görünüyor, ancak herhangi bir nedenle güncellemeler deposundan yükleniyor.

Güncelleme havuzunu yum komutunuzda devre dışı bırakabilirsiniz;

yum install -y $package --disablerepo=updates
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.