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

目的:在高山容器上安装jdk7jdk8 ,而通过envvariables只jdk7

问题:以任何顺序添加FROM openjdk:7-alpine和FROM openjdk:8-alpine确保最后一个覆盖前者。 所以,我只剩下1个安装,如'/usr/lib/jvm'

为什么我需要这个:我需要这个设置为Jenkins的奴隶容器。 现在,jenkins remoting jar只能在jdk8上运行。 所以,我需要它。 另外,因为我产生了一个需要jdk7作为默认jdk的项目的容器,我也需要这个。

我正在使用的DOCKERFILE: https //github.com/ankurshashcode/docker-slave/blob/alpine/Dockerfile

您可以使用Docker多阶段构build来实现。 你基本上将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 

现在,您将拥有安装了jdk7的Java安装,位于/usr/lib/jvm/java-1.7-openjdk

你应该保持简单,使用一个基本的图像。
使用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