Estou criando um arquivo docker que executa um aplicativo personalizado vinculado a uma versão específica do Java.
Estou usando uma imagem base do centos7 porque é a esse artigo que eu estava me referindo e porque tenho que usar alguma coisa, então é tão bom quanto qualquer outro. Sinceramente, não me importo com o que eu estou usando. O ponto desta imagem é o software que está sendo hospedado, a própria distribuição Linux é apenas um meio para atingir um fim - o importante é que o JDK não será usado por outros aplicativos ou usuários.
Conforme declarado, meu aplicativo está vinculado à versão específica do Java que estou usando - qualquer atualização para a versão Java exigirá um teste de regressão completo do software com essa versão específica antes de ser lançado.
O artigo que eu estava seguindo começou com as peças de instalação relevantes do dockerfile JDK, parecidas com esta:
FROM centos:centos7
RUN yum makecache \
&& yum update -y \
&& yum install -y \
java-1.8.0-openjdk-devel \
&& yum clean all
Isso não é específico o suficiente, sempre que as imagens são construídas, ela obtém uma versão aleatória do Java, que não é o que eu quero, preciso de uma versão específica do Java.
Mudei o arquivo docker para ficar assim:
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 a imagem do docker estava se desenvolvendo bem. Isso foi em dezembro.
Nesta semana, precisei fazer uma pequena alteração em uma parte diferente do software e reconstruir uma nova versão da imagem, mas a criação da imagem agora falha.
A construção falha agora porque essa versão específica do pacote java não está mais disponível (pelo menos, acho que é isso que está me dizendo):
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
Como posso reconstruir meu arquivo docker para poder sempre usar uma versão específica do Java (neste exemplo, quero que a versão do java seja 1.8.0, atualização 65)?
Uma resposta negativa é boa - se os vários mecanismos de empacotamento do Linux em geral não querem que as pessoas usem seus repositórios assim, tudo bem - eu sempre posso empacotar minha própria versão do JDK como um arquivo zip e descompactar em algum lugar dentro do diretório ambiente como parte da construção da imagem, mas é um monte de problemas que eu preferiria não ter que fazer.
Como as outras pessoas fazem isso? Existe uma maneira diferente de instalar o JDK para que eu possa ter uma versão recente da distribuição do SO com as atualizações mais recentes (conforme definido pela imagem base na cláusula FROM e na atualização yum), mas instalar uma versão específica do JDK?
Existe uma versão do Linux mais adequada para esse tipo de requisito (não estou casada com o CentOS, a distribuição Linux do usuário não é particularmente importante para mim)?
yum install -y $package --disablerepo=updates
Respostas:
Parece que ele vê o pacote que você deseja, mas, por qualquer motivo, está instalando a partir do repositório de atualizações.
Você pode desativar o repositório de atualizações no seu comando yum;
fonte