アルパインコンテナにjdk7とjdk8を並べてインストールしたい。環境変数が設定されている場合にのみjdk7を選択したいと思います。
FROM openjdk:7-Alpine
とFROM openjdk:8-Alpine
をチェーンしましたが、相対的な順序に関係なく、後者が前者を上書きします。したがって、'/usr/lib/jvm'
に示されているように、インストールは1つだけです。
なぜこれが必要なのか:
Jenkinsのスレーブコンテナにはこの設定が必要です。現在、jenkins remotingjarはjdk8でのみ実行されます。だから、私はそれが必要です。さらに、デフォルトのjdkとしてjdk7を必要とするプロジェクト用にこのコンテナーを生成しているので、それも必要です。
私のDockerfile:https://github.com/ankurshashcode/docker-slave/blob/Alpine/Dockerfile
シンプルに保ち、1つのベースイメージを使用する必要があります。
使用する 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
Docker multistage 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
これで、両方のJavaインストールがあり、jdk7インストールは/usr/lib/jvm/Java-1.7-openjdk
の下にあります。