Openjdk 11でAlpine Dockerイメージを構築しようとしています。これを行うには、Alpineコンテナーを開始します。
docker run -it Alpine:3.9 /bin/sh
そして、以下を実行します:
export Java_HOME=/opt/openjdk-11
export PATH=$Java_HOME/bin:$PATH
export Java_VERSION=11.0.2
export Java_URL=https://download.Java.net/Java/GA/jdk11/9/GPL/openjdk-11.0.2_linux-x64_bin.tar.gz
export Java_SHA256=99be79935354f5c0df1ad293620ea36d13f48ec3ea870c838f20c504c9668b57
set -eux; \
\
wget -O /openjdk.tgz "$Java_URL"; \
echo "$Java_SHA256 */openjdk.tgz" | sha256sum -c -; \
mkdir -p "$Java_HOME"; \
tar --extract --file /openjdk.tgz --directory "$Java_HOME" --strip-components 1; \
rm /openjdk.tgz;
その後、いくつかの点が正しいように見えます。
/ # ls -lah $Java_HOME/bin/Java
+ ls -lah /opt/openjdk-11/bin/Java
-rwxr-xr-x 1 668 668 8.5K Jan 18 05:20 /opt/openjdk-11/bin/Java
/ # echo $PATH
+ echo /opt/openjdk-11/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
/opt/openjdk-11/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
/ # which Java
+ which Java
/opt/openjdk-11/bin/Java
しかし、Java
自体を実行すると、次のようになります。
/ # Java -version
+ Java -version
/bin/sh: Java: not found
そして、私はコンテナから追い出されます。何か不足していますか?
Java: not found
が表示されるのは、ダイナミックリンクの失敗が原因であると考えられます。これはldd Java
を使用して確認できます。
アルパインLinuxは、GNUのCライブラリである glibc を使用している他のほとんどのLinuxとは対照的に、libc(標準Cライブラリ)の実装に musl-libc を使用しています。結果として、Alpine以外のディストリビューションで構築された標準のLinuxソフトウェアは、通常、glibcにリンクされ、glibc互換性レイヤーをインストールしないと、Alpineで実行できません。したがって、特にOpenJDK 11 Alpineビルドが必要になります。
ただし、残念ながらそのようなビルドは現在利用できません。 OpenJDK 11ページ の状態:
以前このページで利用できたAlpine Linuxビルドは、JDK 11 GAから削除されました。 GAビルドと見なされるほど十分にテストされていないため、本番環境に対応していません。
代替案は次のとおりです。
Alpineコンテナーに適切なglibcをインストールします。これはかなり簡単な手順で、アルパイン上でLinuxソフトウェアを実行できます。ただし、「ネイティブアルパイン」を実行することはもうありません。インストール手順はこちら 投稿 .
OpenJDKベンダーからの非公式OpenJDK 11 Alpineのインストール。具体的には、Zulu OpenJDKは非常に優れた代替手段であり、完全にテストおよび検証されたビルドを提供します。これらのビルドは無料でオープンソースでもあります。
詳細については、このStackOverflowの投稿をご覧ください。
Java 11ベースのDockerイメージが大きすぎるのはなぜですか?(openjdk:11-jre-slim)
更新:
2019年2月6日の時点で、openjdk11
パッケージがAlpineリポジトリで利用可能です! Edge/community
リポジトリから次のように取得できます。
apk --no-cache add openjdk11 --repository=http://dl-cdn.alpinelinux.org/Alpine/Edge/community