如何在基于alpine的docker容器上安装多个openjdk版本

Ank*_*ney 4 java slave jenkins docker

我希望在一个高山容器上并排安装jdk7和jdk8.我想只在设置了env变量时才选择jdk7.

我一直链FROM openjdk:7-alpineFROM openjdk:8-alpine,但无论它们的相对顺序的,后者将覆盖前者.所以,我只剩下一个装置,如图所示'/usr/lib/jvm'.

为什么我需要这个:

我需要这个设置为Jenkins的从属容器.现在,jenkins remoting jar现在仅在jdk8上运行.所以,我需要它.另外,由于我为一个需要jdk7作为默认jdk的项目产生这个容器,我也需要它.

我的Dockerfile: https ://github.com/ankurshashcode/docker-slave/blob/alpine/Dockerfile

sta*_*cks 8

您应该保持简单并使用一个基本图像.
使用openjdk7作为基本映像,安装openjdk8作为一个包.这将覆盖openjdk7作为默认JDK,同时将其保留在图像中.

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

   # Other setup...
Run Code Online (Sandbox Code Playgroud)

校验

$> 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
Run Code Online (Sandbox Code Playgroud)


yam*_*enk 6

您可以使用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
Run Code Online (Sandbox Code Playgroud)

现在您将拥有两个 java 安装和 jdk7 安装 /usr/lib/jvm/java-1.7-openjdk