我如何构build一个指定软件包特定版本的Linux环境?

我正在创build一个dockerfile来运行一个绑定到特定版本的Java的自定义应用程序。

我正在使用一个centos7的基础图像,因为这是我所指的文章正在使用,因为我必须使用一些东西,所以这是一样好。 我真的不在乎我使用的用户区。 这个映像的意义在于所托pipe的软件,Linux发行版本身只是一个手段而已 – 重要的是,JDK不会被其他应用程序或用户使用。

如上所述,我的应用程序与我正在使用的特定版本的Java相关 – 任何对Java版本的更新都需要在特定版本发布之前对软件进行完整的回归testing。

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

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

这不够具体,任何时候的图像构build将得到一个随机版本的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 

docker形象正在build设中。 那是十二月。

本周,我需要对软件的不同部分进行小改动,重新构build新版本的图像,但现在图像构build失败。

现在构build失败了,因为那个特定版本的java包已经不可用了(至less我认为这就是它告诉我的):

 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 

我怎样才能重build我的dockerfile,以便我总是可以使用特定版本的Java(在这个例子中,我想Java的版本是1.8.0更新65)?

否定的答案是好的 – 如果各种Linux打包机制通常不希望人们使用他们的存储库,那就可以了 – 我总是可以将我自己的JDK版本打包成一个zip文件,只需将其解压到环境作为图像构build的一部分,但这是我不愿意做的一大堆麻烦。

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

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

它看起来像看到你想要的包,但无论出于什么原因从更新库安装。

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

 yum install -y $package --disablerepo=updates