Je crée un dockerfile qui exécute une application personnalisée liée à une version spécifique de Java.
J'utilise une image de base centos7 parce que c'est ce à quoi faisait référence un article et parce que je dois utiliser quelque chose, c'est donc aussi bon que n'importe quel autre. Honnêtement, je me fiche de l'espace utilisateur que j'utilise. Le point de cette image est le logiciel hébergé, la distribution Linux elle-même n'est qu'un moyen de parvenir à une fin - surtout, le JDK ne sera pas utilisé par d'autres applications ou utilisateurs.
Comme indiqué, mon application est liée à la version spécifique de Java que j'utilise - toute mise à jour de la version Java nécessitera un test de régression complet du logiciel avec cette version spécifique avant sa sortie.
L'article que je suivais a commencé avec les pièces d'installation JDK de dockerfile pertinentes qui ressemblent à ceci:
FROM centos:centos7
RUN yum makecache \
&& yum update -y \
&& yum install -y \
java-1.8.0-openjdk-devel \
&& yum clean all
Ce n'est pas assez spécifique, chaque fois que les images sont construites, il obtiendra une version aléatoire de Java, ce qui n'est pas ce que je veux, j'ai besoin d'une version spécifique de Java.
J'ai changé le fichier docker pour qu'il ressemble à ceci:
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
Et l'image de docker se développait bien. C'était en décembre.
Cette semaine, j'ai dû apporter une petite modification à une autre partie du logiciel et reconstruire une nouvelle version de l'image, mais la construction de l'image échoue maintenant.
La construction échoue maintenant parce que cette version spécifique du package java n'est plus disponible (du moins, je pense que c'est ce qu'elle me dit):
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
Comment puis-je reconstruire mon dockerfile pour pouvoir toujours utiliser une version spécifique de Java (dans cet exemple, je veux que la version de java soit la version 1.8.0 mise à jour 65)?
Une réponse négative est très bien - si les divers mécanismes de conditionnement Linux en général ne veulent pas que les gens utilisent leurs référentiels comme ça, c'est OK - je peux toujours empaqueter ma propre version du JDK sous forme de fichier zip et décompresser cela quelque part à l'intérieur du environnement dans le cadre de la construction de l'image, mais c'est un tas de tracas que je préférerais ne pas avoir à faire.
Comment les autres font-ils cela? Existe-t-il une autre façon d'installer le JDK afin que je puisse avoir une version récente de la distribution du système d'exploitation avec les dernières mises à jour (telles que définies par l'image de base dans la clause FROM et la mise à jour yum) mais installer une version spécifique du JDK?
Existe-t-il une version Linux plus adaptée à ce type d'exigence (je ne suis pas connecté à CentOS, la distribution Linux utilisateur n'est pas particulièrement importante pour moi)?
yum install -y $package --disablerepo=updates
Réponses:
Il semble qu'il voit le package que vous souhaitez, mais pour une raison quelconque, l'installation s'effectue à partir du référentiel de mises à jour.
Vous pouvez désactiver le référentiel de mises à jour dans votre commande yum;
la source