Sto creando un file docker che esegue un'applicazione personalizzata collegata a una versione specifica di Java.
Sto usando un'immagine di base di centos7 perché è quello che un articolo a cui mi riferivo stava usando e perché devo usare qualcosa, quindi è buono come qualsiasi altro. Onestamente non mi interessa quale userland sto usando. Il punto di questa immagine è il software ospitato, la distribuzione Linux stessa è solo un mezzo per raggiungere un obiettivo - cosa importante, il JDK non verrà utilizzato da altre applicazioni o utenti.
Come detto, la mia applicazione è legata alla versione specifica di Java che sto utilizzando: qualsiasi aggiornamento alla versione Java richiederà un test di regressione completo del software con quella versione specifica prima che venga rilasciato.
L'articolo che stavo seguendo è iniziato con le relative parti di installazione JDK Dockerfile che appaiono così:
FROM centos:centos7
RUN yum makecache \
&& yum update -y \
&& yum install -y \
java-1.8.0-openjdk-devel \
&& yum clean all
Non è abbastanza specifico, ogni volta che le immagini vengono create otterrà una versione casuale di Java, che non è quello che voglio, ho bisogno di una versione specifica di Java.
Ho modificato il file docker in questo modo:
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
E l'immagine della finestra mobile stava andando bene. Era a dicembre.
Questa settimana, ho dovuto apportare una piccola modifica a una parte diversa del software e ricostruire una nuova versione dell'immagine, ma la creazione dell'immagine ora non riesce.
La compilazione non riesce ora perché quella versione specifica del pacchetto java non è più disponibile (almeno, penso che sia quello che mi sta dicendo):
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
Come posso ricostruire il mio file docker in modo da poter sempre utilizzare una versione specifica di Java (in questo esempio, voglio che la versione di java sia l'aggiornamento 1.8.0 65 65)?
Una risposta negativa va bene - se i vari meccanismi di impacchettamento di Linux in generale non vogliono che le persone usino i loro repository in questo modo, va bene - Posso sempre impacchettare la mia versione di JDK come file zip e decomprimerlo da qualche parte all'interno del ambiente come parte della creazione dell'immagine, ma è una seccatura che preferirei non dover fare.
Come lo fanno gli altri? Esiste un modo diverso di installare JDK in modo da poter disporre di una versione recente della distribuzione del sistema operativo con gli ultimi aggiornamenti (come definito dall'immagine di base nella clausola FROM e l'aggiornamento yum) ma installare una versione specifica di JDK?
Esiste una versione Linux più adatta a questo tipo di requisiti (non sono legata a CentOS, la distribuzione Linux di userland non è particolarmente importante per me)?
yum install -y $package --disablerepo=updates