Estoy creando un dockerfile que ejecuta una aplicación personalizada que está vinculada a una versión específica de Java.
Estoy usando una imagen base centos7 porque eso es lo que estaba usando un artículo al que me refería y porque tengo que usar algo, así que es tan bueno como cualquier otro. Sinceramente, no me importa qué país de usuario estoy usando. El objetivo de esta imagen es el software alojado, la distribución de Linux en sí misma es solo un medio para un fin; lo que es más importante, el JDK no será utilizado por otras aplicaciones o usuarios.
Como se indicó, mi aplicación está vinculada a la versión específica de Java que estoy usando; cualquier actualización de la versión de Java requerirá una prueba de regresión completa del software con esa versión específica antes de su lanzamiento.
El artículo que estaba siguiendo comenzó con las partes de instalación JDK de dockerfile relevantes que se ven así:
FROM centos:centos7
RUN yum makecache \
&& yum update -y \
&& yum install -y \
java-1.8.0-openjdk-devel \
&& yum clean all
Eso no es lo suficientemente específico, cada vez que se construyen las imágenes obtendrá una versión aleatoria de Java, que no es lo que quiero, necesito una versión específica de Java.
Cambié el archivo acoplable para que se vea así:
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
Y la imagen de la ventana acoplable se estaba construyendo bien. Eso fue en diciembre.
Esta semana, necesitaba hacer un pequeño cambio en una parte diferente del software y reconstruir una nueva versión de la imagen, pero la construcción de la imagen ahora falla.
La compilación falla ahora porque esa versión específica del paquete java ya no está disponible (al menos, creo que eso es lo que me dice):
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
¿Cómo puedo reconstruir mi dockerfile para que siempre pueda usar una versión específica de Java (en este ejemplo, quiero que la versión de Java sea 1.8.0 actualización 65)?
Una respuesta negativa está bien: si los diversos mecanismos de empaquetado de Linux en general no quieren que las personas usen sus repositorios de esta manera, está bien, siempre puedo empaquetar mi propia versión del JDK como un archivo zip y simplemente descomprimirlo en algún lugar dentro del entorno como parte de la creación de la imagen, pero eso es una molestia que preferiría no tener que hacer.
¿Cómo hacen esto otras personas? ¿Hay una forma diferente de instalar el JDK para que pueda tener una versión reciente de la distribución del sistema operativo con las últimas actualizaciones (según lo definido por la imagen base en la cláusula FROM y la actualización de yum) pero instalar una versión específica del JDK?
¿Existe una versión de Linux más adecuada para este tipo de requisitos (no estoy casado con CentOS, la distribución de Linux del usuario no es particularmente importante para mí)?
yum install -y $package --disablerepo=updates
Respuestas:
Parece que ve el paquete que desea, pero por cualquier razón se está instalando desde el repositorio de actualizaciones.
Puede deshabilitar el repositorio de actualizaciones en su comando yum;
fuente