我正在创建一个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发行版对我来说不是特别重要)?
解决方法
看起来它看起来像你想要的包,但无论出于何种原因从更新存储库安装.
您可以在yum命令中禁用更新存储库;
yum install -y $package --disablerepo=updates