Como eu construo um ambiente Linux que especifica versões específicas de pacotes?

9

Estou criando um dockerfile que executa um aplicativo personalizado vinculado a uma versão específica do Java.

Eu estou usando uma imagem de base do centos7 porque é com isso que eu estava me referindo a um artigo e porque eu tenho que usar algo, então isso é tão bom quanto qualquer outro. Eu sinceramente não me importo com o que eu estou usando. O ponto desta imagem é o software que está sendo hospedado, a distribuição do Linux em si é apenas um meio para um fim - importante, o JDK não será usado por outros aplicativos ou usuários.

Como dito, meu aplicativo está vinculado à versão específica do Java que estou usando - qualquer atualização na 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 JDK dockerfile, assim:

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, toda vez que as imagens são compiladas, elas recebem uma versão aleatória do Java, que não é o que eu quero, eu preciso de uma versão específica do Java.

Eu alterei o arquivo do 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 crescendo bem. Isso foi em dezembro.

Esta 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 compilaçã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 dockerfile para que eu possa 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 como este, está tudo bem - eu posso sempre empacotar minha própria versão do JDK como um arquivo zip e em algum lugar dentro do ambiente como parte da construção da imagem, mas isso é um monte de problemas que prefiro 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 de base na cláusula FROM e pela atualização do yum), mas instalar uma versão específica do JDK? / p>

Existe uma versão do Linux mais adequada para esse tipo de requisito? (Eu não estou comprometida com o CentOS, a distribuição do Linux para o usuário não é particularmente importante para mim)?

    
por Shorn 18.02.2016 / 01:26

1 resposta

2

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;

yum install -y $package --disablerepo=updates
    
por 18.02.2016 / 07:23