N'y a-t-il pas d'Oracle JDK pour docker?

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

lorsque l'image docker sera exécutée, le message suivant s'affiche:

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

Lorsque Oracle JDK est déployé, la taille de l'image docker est plus que doublée!

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

Discussion

Lorsque "Existe-t-il aucun Oracle JDK pour docker" est googlé, seuls certains liens vers l'image docker contenant docker sont renvoyés. Lorsque Oracle JDK est déployé dans l'image de docker, la taille est plus que doublée. Je veux garder les images du docker aussi petites que possible, mais le JDK Oracle semble être plus grand que l'image elle-même!

Question

N'y a-t-il pas d'Oracle JDK pour docker?

030
la source
@peter n'hésitez pas à sauter dans les discussions si vous voulez en discuter :)
Tensibai

Réponses:

20

Non, car vous ne pouvez pas distribuer Oracle JDK ou JRE, la licence en vigueur ne permet pas la distribution . Lorsqu'il est distribué par un tiers (intégré à votre application), toute responsabilité en cas de non-fonctionnement incombe à cette partie. C'est pourquoi vous ne trouverez pas Oracle JDK / JRE sur aucun des registres Docker publics, ni dans aucun référentiel de packages Linux d'ailleurs.

Vous pouvez créer votre propre image et installer Oracle JDK ou JRE à l'aide du package webupd8team / java pour Ubuntu / Debian.

Et si vous utilisez Alpine Linux, ce billet de blog explique quelles dépendances sont nécessaires et fournit des liens vers StackOverflow pour obtenir des instructions d'installation.

Mise à jour : Oracle a maintenant une image Docker officielle sur le Docker Store . https://blogs.oracle.com/developers/official-docker-image-for-oracle-java-and-the-openjdk-roadmap-for-containers

Lien vers l' image Java Oracle de Docker Store - https://store.docker.com/images/oracle-serverjre-8

Evgeny
la source
Je ne compterais pas sur sa disponibilité pendant longtemps. Comme je l'ai écrit, la licence d'Oracle ne permet pas de la distribuer publiquement - seul Oracle peut légalement distribuer son JDK ou JRE. Donc, fondamentalement, ce référentiel est illégal et disparaîtra très probablement.
Evgeny
Ce que vous pouvez faire, c'est utiliser leurs Dockerfiles sur GitHub pour obtenir votre propre image Docker avec Java. Par exemple github.com/anapsix/docker-alpine-java/blob/master/8/121b13/jdk/…
Evgeny
Et une fois que l'image docker est créée, je suis autorisé à la stocker dans notre registre de docker privé?
030
1
Oui. La licence interdit de distribuer publiquement le JDK / JRE sous forme binaire.
Evgeny
8

Comme docker n'est pas un système d'exploitation, il n'y a pas de JDK pour docker.

Si je comprends bien votre question, c'est qu'un JDK complet est trop volumineux pour vos souhaits, dans ce cas, vous pouvez essayer de passer uniquement au JRE et inclure uniquement les bibliothèques nécessaires.

JDK est l'acronyme de Java Development Kit, JRE est celui de Java Runtime Engine. Par «paresse» en raison de la complexité de répertorier toutes les dépendances nécessaires, personne ne se limite aux bibliothèques nécessaires, mais c'est la voie à suivre si vous souhaitez réduire la taille installée au strict minimum.

Une manière plus utilisable pourrait être de supprimer certaines des choses installées qui prennent beaucoup de place:

/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

Il y a deux * src.zip qui peuvent être supprimés, ils ne seront pas utiles, et comme vous pouvez le voir, le répertoire lib fait la moitié de la taille et vous y trouverez un tas de choses dont vous n'avez pas vraiment besoin:

/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

Vous pouvez sans problème supprimer missoncontrol sur un serveur, je suppose que vous pouvez également vous débarrasser de visualvm, vous devrez vérifier si vous avez besoin de quelque chose dans ce répertoire lib, mais je ne peux pas le dire sans connaître votre application ..

Une chose que vous devez faire dans votre dockerfile lors de l'installation d'Oracle JDK est de supprimer le .tar.gzfichier téléchargé qui a à peu près la même taille que le répertoire résultant car les .jarfichiers sont déjà compressés, le tar.gz est juste là pour les "empaqueter".

Vous devez faire tout cela dans la même RUNcommande, en enchaînant avec &&pour éviter d'ajouter des couches où vous ne supprimerez pas la taille en supprimant les fichiers de la couche précédente.

Tensibai
la source
3

Docker ne fournit aucune implémentation Oracle JDK officielle. Docker avait l'habitude de prendre en charge sa propre bibliothèque Java sur hub.docker.com, mais ils l'ont déconseillée en faveur de l'implémentation d'OpenJDK car elle était "spécifique à OpenJDK depuis son introduction". Leur raisonnement:

Comme toutes les principales distributions Linux en amont ne veulent pas redistribuer Oracle Java dans leurs propres canaux de distribution, nous avons choisi de les suivre. Voir les références ci-dessous sur la façon dont chaque distribution ne distribue pas Oracle Java.

Donc, si vous souhaitez garder votre image Docker aussi petite que possible, envisagez d'utiliser OpenJDK à la place. Il existe un référentiel officiel OpenJDK Dockerfile ou vous pouvez simplement l'utiliser docker pull openjdk. Le Dockerfile de base "facile à exécuter" pour OpenJDK 7 est le suivant (extrait du site Web répertorié dans la phrase précédente):

FROM openjdk:7
COPY . /usr/src/myapp
WORKDIR /usr/src/myapp
RUN javac Main.java
CMD ["java", "Main"]
Peter G
la source
1
Il n'y a pas d'Oracle JDK officiel? Cela semble quelque peu incorrect, ou du moins mal formulé.
Evgeny
1
@Evgeny Je suis d'accord, je suppose que l'intention est de dire: "Pas d'image Docker officielle incluant Oracle JDK d'Oracle", peut-être juste un "docker" manquant entre JDK et l'implémentation ...
Tensibai
Oups, oui, je voulais vraiment rendre ce Docker spécifique. J'ai corrigé ma réponse.
Peter G