如何构建指定软件包特定版本的Linux环境?


9

我正在创建一个dockerfile,该文件运行与Java的特定版本绑定的自定义应用程序。

我使用的是centos7基本图像,因为那是我所指的文章所使用的,并且因为我必须使用某些东西,所以它与任何东西一样好。老实说,我不在乎我使用的是哪个用户区。此映像的重点是托管的软件,Linux发行版本身只是达到目的的一种方法-重要的是,其他应用程序或用户不会使用JDK。

如前所述,我的应用程序与我使用的Java特定版本相关联-Java版本的任何更新都需要对该特定版本的软件进行全面的回归测试,然后才能发布。

我关注的文章从相关的dockerfile JDK安装部件开始,如下所示:

FROM centos:centos7
RUN yum makecache \
    && yum update -y \
    && yum install -y \
    java-1.8.0-openjdk-devel \
    && yum clean all

这还不够具体,每当构建映像时,它将获得Java的随机版本,这不是我想要的,我需要特定版本的Java。

我将docker文件更改为如下所示:

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

码头工人的形象还不错。那是十二月。

本周,我需要对软件的其他部分进行少量更改,然后重新构建映像的新版本,但是映像构建现在失败。

现在构建失败了,因为该Java包的特定版本不再可用(至少,我认为这就是告诉我的意思):

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

如何重建我的dockerfile,以便始终可以使用特定版本的Java(在此示例中,我希望Java的版本为1.8.0更新65)?

否定答案很好-如果各种Linux打包机制通常都不希望人们使用这样的存储库,那就可以了-我总是可以将自己的JDK版本打包为zip文件,然后将其解压缩到环境作为映像构建的一部分,但这是一堆麻烦,我不想这样做。

其他人如何做到这一点?是否有其他安装JDK的方式,以便我可以拥有最新版本的OS发行版的最新版本(由FROM子句中的基本映像和yum更新定义),但可以安装特定版本的JDK?

是否有更适合这种需求的Linux版本(我不习惯CentOS,用户级Linux发行版对我来说并不特别重要)?


荫versionlock通过使用与码头工人?
亚伦·科普利

1
@AaronCopley我不这么认为。versionlock似乎专注于确保版本保持在下次运行更新时的位置-但是我实际上担心,一旦存储库移至新版本,初始安装命令就不会失败。我不打算在该特定环境上再次运行yum更新。当环境需要新的更新时,将构建一个新的docker映像(我希望该映像使用与现在使用的JDK完全相同的版本)。
Shorn

1
对不起,我想我误会了。您可以看到您所请求的版本位于基本版本中,并且无论出于何种原因都在通过更新进行安装。尝试yum install -y $package --disablerepo=updates
亚伦·科普利

1
@AaronCopley是的,似乎可行-谢谢!如果您给出答案,我会标记为成功。否则我稍后再添加。
Shorn

Answers:


2

看起来好像看到了您想要的软件包,但是无论出于什么原因都从更新存储库进行安装。

您可以在yum命令中禁用更新存储库;

yum install -y $package --disablerepo=updates
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.