Gibt es kein Oracle JDK für Docker?

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

Wenn das Docker-Image ausgeführt wird, wird die folgende Meldung angezeigt:

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

Bei der Bereitstellung von Oracle JDK wird die Docker-Image-Größe mehr als verdoppelt!

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

Diskussion

Wenn "Gibt es kein Oracle JDK für Docker" gegoogelt wird, werden nur einige Links zum Docker-Image zurückgegeben, die Docker enthalten. Wenn Oracle JDK im Docker-Image bereitgestellt wird, wird die Größe mehr als verdoppelt. Ich möchte die Docker-Images so klein wie möglich halten, aber das Oracle JDK scheint größer zu sein als das Image selbst!

Frage

Gibt es kein Oracle JDK für Docker?

030
quelle
@ Peter fühlen sich frei, in Chatops zu springen, wenn Sie es diskutieren möchten :)
Tensibai

Antworten:

20

Nein. Da Sie Oracle JDK oder JRE nicht vertreiben können, lässt die Lizenz die Verteilung nicht zu . Bei der Verteilung durch Dritte (in Ihre App eingebettet) liegt die Haftung dafür, dass sie nicht funktioniert, bei dieser Partei. Aus diesem Grund finden Sie Oracle JDK / JRE in keiner der öffentlichen Docker-Registrierungen oder in einem Linux-Paket-Repository.

Sie können Ihr eigenes Image erstellen und Oracle JDK oder JRE mithilfe des webupd8team / java- Pakets für Ubuntu / Debian installieren .

Wenn Sie Alpine Linux verwenden, werden in diesem Blogbeitrag die erforderlichen Abhängigkeiten erläutert und Installationsanweisungen zu StackOverflow bereitgestellt .

Update : Oracle hat jetzt ein offizielles Docker-Image im Docker Store . https://blogs.oracle.com/developers/official-docker-image-for-oracle-java-and-the-openjdk-roadmap-for-containers

Link zum Docker Store Oracle Java Image - https://store.docker.com/images/oracle-serverjre-8

Evgeny
quelle
Ich würde mich nicht darauf verlassen, dass es lange verfügbar ist. Wie ich schrieb, erlaubt die Lizenz von Oracle keine öffentliche Verbreitung - nur Oracle kann sein JDK oder JRE legal verbreiten. Dieses Repository ist also grundsätzlich illegal und wird höchstwahrscheinlich verschwinden.
Evgeny
Sie können ihre Dockerfiles auf GitHub verwenden, um ein eigenes Docker-Image mit Java zu erstellen. Zum Beispiel github.com/anapsix/docker-alpine-java/blob/master/8/121b13/jdk/…
Evgeny
Und wenn das Docker-Image erstellt ist, darf ich es in unserer privaten Docker-Registrierung speichern?
030
1
Ja. Die Lizenz verbietet die öffentliche Verbreitung des JDK / JRE in binärer Form.
Evgeny
8

Da docker kein Betriebssystem ist, gibt es kein JDK für docker.

Soweit ich Ihre Frage verstehe, ist ein vollständiges JDK zu groß für Ihre Wünsche. In diesem Fall können Sie versuchen, nur auf das JRE zu wechseln und nur die erforderlichen Bibliotheken einzuschließen.

JDK ist die Abkürzung für Java Development Kit, JRE ist die Abkürzung für Java Runtime Engine. Durch "Faulheit" aufgrund der Komplexität, jede benötigte Abhängigkeit aufzulisten, streift sich niemand nur zu den benötigten Bibliotheken, aber das ist der richtige Weg, wenn Sie die installierte Größe auf ein striktes Minimum reduzieren möchten.

Ein besserer Weg könnte darin bestehen, einige der installierten Dinge zu entfernen, die viel Platz beanspruchen:

/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

Es gibt zwei * src.zip, die entfernt werden können, aber nicht von Nutzen sind. Wie Sie sehen, ist das lib-Verzeichnis halb so groß und enthält eine Reihe von Dingen, die Sie nicht wirklich benötigen:

/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

Sie können missoncontrol problemlos auf einem Server entfernen. Ich gehe davon aus, dass Sie visualvm auch entfernen können. Sie müssen prüfen, ob Sie etwas in diesem lib-Verzeichnis benötigen, aber ich kann es nicht sagen, ohne Ihre App zu kennen.

Eine Sache, die Sie während der Installation von Oracle JDK in Ihrer Docker- .tar.gzDatei tun sollten, ist, die heruntergeladene Datei zu entfernen, die ungefähr dieselbe Größe wie das resultierende Verzeichnis hat, da die .jarDateien bereits komprimiert sind.

Sie müssen all dies im selben RUNBefehl ausführen und mit verketten &&, um zu vermeiden, dass Ebenen hinzugefügt werden, bei denen Sie die Größe nicht entfernen, indem Sie Dateien von der vorherigen Ebene entfernen.

Tensibai
quelle
3

Es gibt keine offizielle Oracle JDK-Implementierung, die von Docker bereitgestellt wird. Docker unterstützte früher ihre eigene Java-Bibliothek auf hub.docker.com, sie verwarf sie jedoch zugunsten der tatsächlichen OpenJDK-Implementierung, da sie seit ihrer Einführung "OpenJDK-spezifisch" war. Ihre Argumentation:

Da alle wichtigen vorgelagerten Linux-Distributionen nicht bereit sind, Oracle Java in ihren eigenen Distributionskanälen weiterzugeben, haben wir uns entschieden, diesen zu folgen. Informationen dazu, wie jede Distribution Oracle Java nicht verteilt, finden Sie in den nachstehenden Referenzen.

Wenn Sie also Ihr Docker-Image so klein wie möglich halten möchten, sollten Sie stattdessen OpenJDK verwenden. Es gibt ein offizielles OpenJDK Dockerfile-Repository, oder Sie können es einfach verwenden docker pull openjdk. Das grundlegende Dockerfile "easy to run" für OpenJDK 7 sieht wie folgt aus (entnommen aus der im vorherigen Satz aufgelisteten Website):

FROM openjdk:7
COPY . /usr/src/myapp
WORKDIR /usr/src/myapp
RUN javac Main.java
CMD ["java", "Main"]
Peter G
quelle
1
Es gibt kein offizielles Oracle JDK? Das scheint etwas falsch oder zumindest falsch formuliert zu sein.
Evgeny
1
@Evgeny Ich stimme zu, ich gehe davon aus, dass die Absicht ist zu sagen: "Kein offizielles Docker-Image einschließlich Oracle JDK von Oracle", vielleicht fehlt nur ein "Docker" zwischen JDK und Implementierung ...
Tensibai
Hoppla, ja, ich wollte diesen Docker spezifisch machen. Ich habe meine Antwort korrigiert.
Peter G