docker用のOracle JDKはありませんか?


15
REPOSITORY          TAG       IMAGE ID       CREATED             SIZE
an-image            1         X              26 seconds ago      279 MB

Dockerイメージが実行されると、次のメッセージが表示されます。

No java installations was detected.
Please go to http://www.java.com/getjava/ and download

Oracle JDKをデプロイすると、Dockerイメージのサイズが2倍以上になります!

REPOSITORY          TAG       IMAGE ID       CREATED             SIZE
an-image            2         X              26 seconds ago      666 MB

討論

「Docker用のOracle JDKはありません」がグーグル検索された場合、dockerを含むDockerイメージへのリンクのみが返されます。Oracle JDKをdockerイメージにデプロイすると、サイズは2倍以上になります。Dockerイメージを可能な限り小さくしたいのですが、Oracle JDKはイメージ自体よりも大きいようです!

質問

docker用のOracle JDKはありませんか?


@peterは、あなたがそれについて議論したいなら、チャットで自由に飛び込んでください :)
天柴井

回答:


20

いいえ。OracleJDKまたはJREを配布できないため、有効なライセンスでは配布できません。サードパーティ(アプリに埋め込まれている)によって配布された場合、機能しないという責任はすべてそのパーティにあります。これが、パブリックDockerレジストリ、またはその点でLinuxパッケージリポジトリにOracle JDK / JREが見つからない理由です。

独自のイメージを作成し、Ubuntu / Debianのwebupd8team / javaパッケージを使用してOracle JDKまたはJREをインストールできます。

また、Alpine Linuxを使用している場合、このブログ投稿では、必要な依存関係について説明し、インストール手順についてはStackOverflowへのリンクを掲載しています。

更新:オラクルは現在、Dockerストアに公式のDockerイメージを持っています。https://blogs.oracle.com/developers/official-docker-image-for-oracle-java-and-the-openjdk-roadmap-for-containers

Docker Store Oracle Java Image へのリンク-https ://store.docker.com/images/oracle-serverjre-8



私はそれが長い間利用可能であることに依存しません。私が書いたように、オラクルからのライセンスは公にそれを配布することを許可していません-オラクルのみが合法的にJDKまたはJREを配布できます。したがって、基本的に、このリポジトリは違法であり、ほとんどの場合消失します。
エフゲニー

あなたが何をすることができません、自分の使用しているDockerfileJavaを使用し、独自のドッカーの画像を取得するためのGitHub上で秒。たとえば、github.com / anapsix / docker
Evgeny

そして、Dockerイメージが作成されたら、私たちのプライベートDockerレジストリに保存できますか?
030

1
はい。このライセンスは、JDK / JREをバイナリ形式で公開することを禁止しています。
エフゲニー

8

dockerはオペレーティングシステムではないため、docker用のJDKはありません。

あなたの質問を理解しているように、完全なJDKはあなたの希望には大きすぎるということです。この場合、あなたはJREだけに切り替えて、必要なライブラリのみを含めることを試みるかもしれません。

JDKはJava Development Kitの頭字語であり、JREはJava Runtime Engineの頭字語です。必要なすべての依存関係をリストする複雑さによる「遅延」によって、誰も必要なライブラリだけを削除することはありませんが、インストールされたサイズを厳密に最小限に抑えたい場合はこれが最適です。

より使いやすい方法は、多くのスペースを取っているインストール済みのものを取り除くことです。

/usr/lib/jvm/jdk1.8.0_101$ du -hs *
776K    bin
4.0K    COPYRIGHT
5.7M    db
208K    include
4.9M    javafx-src.zip
187M    jre
133M    lib
4.0K    LICENSE
2.0M    man
4.0K    README.html
4.0K    release
21M     src.zip
108K    THIRDPARTYLICENSEREADME-JAVAFX.txt
176K    THIRDPARTYLICENSEREADME.txt

削除できる* src.zipが2つありますが、それらは使用できません。また、libディレクトリは半分のサイズであり、その中に必要のないものがたくさんあります。

/usr/lib/jvm/jdk1.8.0_101$ du -hs lib/*
120K    lib/amd64
1.2M    lib/ant-javafx.jar
18M     lib/ct.sym
160K    lib/dt.jar
20K     lib/ir.idl
36K     lib/javafx-mx.jar
400K    lib/jconsole.jar
12K     lib/jexec
60M     lib/missioncontrol
4.0K    lib/orb.idl
8.0K    lib/packager.jar
2.4M    lib/sa-jdi.jar
18M     lib/tools.jar
34M     lib/visualvm

サーバー上のmissoncontrolを問題なく削除できます.visualvmも取り除くことができると仮定しています。このlibディレクトリに何かが必要かどうかを確認する必要がありますが、アプリを知らずに伝えることはできません。

oracle jdkのインストール中にdockerfileで行うべきことの1つは.tar.gz.jarファイルがすでに圧縮されているため、結果のディレクトリとほぼ同じサイズのダウンロードファイルを削除することです。tar.gzはそれらを「パッケージ化」するためにあります

このすべてを同じRUNコマンド&&で実行し、前のレイヤーからファイルを削除してサイズを削除しないレイヤーを追加しないように連鎖する必要があります。


3

Dockerが提供する公式のOracle JDK実装はありません。Dockerは以前はhub.docker.comで独自のJavaライブラリをサポートしていましたが、「最初に導入されて以来のOpenJDK固有」だったため、実際のOpenJDK実装を支持して非推奨になりました。彼らの推論:

主要なアップストリームLinuxディストリビューションはすべて、独自のディストリビューションチャネルでOracle Javaを再配布することを望まないため、それらに従うことを選択しました。各ディストリビューションがOracle Javaを配布しない方法については、以下の参照を参照してください。

したがって、Dockerイメージを可能な限り小さくしたい場合は、代わりにOpenJDKの使用を検討してください。公式のOpenJDK Dockerfileリポジトリがあるか、単に使用できますdocker pull openjdk。OpenJDK 7の基本的な「実行しやすい」Dockerfileは次のとおりです(前の文にリストされているWebサイトから取得)。

FROM openjdk:7
COPY . /usr/src/myapp
WORKDIR /usr/src/myapp
RUN javac Main.java
CMD ["java", "Main"]

1
公式のOracle JDKはありませんか?それはやや不正確であるか、少なくとも不正確に表現されているようです。
エフゲニー

1
@Evgeny私は同意する、私は意図が「OracleのOracle JDKを含む公式のdockerイメージはない」、JDKと実装の間に欠けている「ドッカー」だけかもしれないと
思い

おっと、はい、そのDockerを特定にするつもりでした。答えを修正しました。
ピーターG
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.