如何在基于Alpine的Docker容器上安装多个OpenJDK版本

7
我希望在一个alpine容器中同时安装jdk7和jdk8。如果设置了环境变量,我想只选择jdk7。
我已经链接了FROM openjdk:7-alpineFROM openjdk:8-alpine,但是无论它们的相对顺序如何,后者都会覆盖前者。因此,在'/usr/lib/jvm'中只剩下1个安装。
为什么我需要这个:
我需要这个设置作为Jenkins的从容器。现在,jenkins远程jar只在jdk8上运行。所以我需要它。此外,由于我为需要jdk7作为默认jdk的项目生成此容器,因此我也需要它。
我的Dockerfile:https://github.com/ankurshashcode/docker-slave/blob/alpine/Dockerfile
2个回答

12

您应该保持简单,使用一个基础镜像。
使用 openjdk7 作为基础镜像,并将 openjdk8 安装为一个软件包。 这将覆盖 openjdk7 成为默认的 JDK,并保留在镜像中。

   # Example Dockerfile
   FROM openjdk:7-alpine
   RUN apk add --no-cache openjdk8

   # Other setup...

验证

$> java -version
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (IcedTea 3.4.0) (Alpine 8.131.11-r2)
OpenJDK 64-Bit Server VM (build 25.131-b11, mixed mode)

$> ls /usr/lib/jvm/
default-jvm       java-1.7-openjdk  java-1.8-openjdk

10
你可以使用Docker多阶段构建来实现。基本上,你需要将一个镜像中的Java安装复制到另一个镜像中。以下是dockerfile的示例代码:
FROM openjdk:7-alpine as java7

FROM openjdk:8-alpine
COPY --from=java7 /usr/lib/jvm/java-1.7-openjdk /usr/lib/jvm/java-1.7-openjdk

现在,您将同时拥有两个Java安装程序,其中jdk7安装程序位于/usr/lib/jvm/java-1.7-openjdk下。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接