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

Modified on: Tue, 10 Sep 2019 07:00:02 +0800

我正在创建一个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? / p>

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

作者:Shorn

最佳答案

看起来它看到了你想要的包,但无论出于何种原因从更新存储库安装。

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

yum install -y $package --disablerepo=updates

相关问答

添加新评论