web-dev-qa-db-ja.com

AlpineベースのDockerコンテナに複数のopenjdkバージョンをインストールする方法

アルパインコンテナにjdk7とjdk8を並べてインストールしたい。環境変数が設定されている場合にのみjdk7を選択したいと思います。

FROM openjdk:7-AlpineFROM openjdk:8-Alpineをチェーンしましたが、相対的な順序に関係なく、後者が前者を上書きします。したがって、'/usr/lib/jvm'に示されているように、インストールは1つだけです。

なぜこれが必要なのか:

Jenkinsのスレーブコンテナにはこの設定が必要です。現在、jenkins remotingjarはjdk8でのみ実行されます。だから、私はそれが必要です。さらに、デフォルトのjdkとしてjdk7を必要とするプロジェクト用にこのコンテナーを生成しているので、それも必要です。

私のDockerfile:https://github.com/ankurshashcode/docker-slave/blob/Alpine/Dockerfile

4
Ankur Sawhney

シンプルに保ち、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
8
stacksonstacks

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の下にあります。

4
yamenk