Sho*_*orn 9 linux java centos yum docker
我正在创建一个运行与特定 Java 版本相关联的自定义应用程序的 dockerfile。
我正在使用 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
Run Code Online (Sandbox Code Playgroud)
这还不够具体,任何时候构建图像都会得到一个随机版本的 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
Run Code Online (Sandbox Code Playgroud)
并且 docker 镜像构建良好。那是在十二月。
本周,我需要对软件的不同部分进行小的更改并重新构建映像的新版本,但映像构建现在失败了。
构建现在失败,因为该特定版本的 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
Run Code Online (Sandbox Code Playgroud)
如何重建我的 dockerfile 以便我始终可以使用特定版本的 Java(在此示例中,我希望 Java 版本为 1.8.0 update 65)?
否定的答案是好的——如果各种 Linux 打包机制一般不希望人们像这样使用他们的存储库,那没关系——我总是可以将我自己的 JDK 版本打包为一个 zip 文件,然后将它解压到环境作为图像构建的一部分,但这是一堆我不想做的麻烦事。
其他人如何做到这一点?是否有不同的安装 JDK 的方法,以便我可以拥有带有最新更新的最新版本的 OS 发行版(由 FROM 子句中的基本映像和 yum 更新定义)但安装特定版本的 JDK?
有没有更适合这种需求的 Linux 版本(我不喜欢 CentOS,userland Linux 发行版对我来说不是特别重要)?
看起来它看到了您想要的包,但无论出于何种原因,都是从更新存储库安装的。
您可以在 yum 命令中禁用更新存储库;
yum install -y $package --disablerepo=updates
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
460 次 |
| 最近记录: |