我正在创建一个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 install -y $package --disablerepo=updates