Non esiste Oracle JDK per la finestra mobile?


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

quando verrà eseguita l'immagine docker, verrà visualizzato il seguente messaggio:

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

Quando Oracle JDK viene distribuito, la dimensione dell'immagine della finestra mobile è più che raddoppiata!

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

Discussione

Quando "Non c'è Oracle JDK per la finestra mobile" viene cercato su Google, vengono restituiti solo alcuni collegamenti all'immagine della finestra mobile che contengono la finestra mobile. Quando Oracle JDK è distribuito nell'immagine docker la dimensione è più che raddoppiata. Voglio mantenere le immagini della finestra mobile le più piccole possibili, ma Oracle JDK sembra essere più grande dell'immagine stessa!

Domanda

Non esiste Oracle JDK per la finestra mobile?


@peter sentiti libero di saltare nei tetti se vuoi discuterne :)
Tensibai,

Risposte:


20

No. Poiché non è possibile distribuire Oracle JDK o JRE, la licenza in effetti non consente la distribuzione . Se distribuito da una terza parte (integrata con la tua app), tutta la responsabilità per il mancato funzionamento è a carico di quella parte. Questo è il motivo per cui non troverete Oracle JDK / JRE in nessuno dei registri Docker pubblici o in nessun repository di pacchetti Linux per quella materia.

È possibile creare la propria immagine e installare Oracle JDK o JRE usando il pacchetto webupd8team / java per Ubuntu / Debian.

E se stai usando Alpine Linux questo post sul blog spiega quali dipendenze sono necessarie e collega a StackOverflow per le istruzioni di installazione.

Aggiornamento : Oracle ha ora un'immagine Docker ufficiale sul Docker Store . https://blogs.oracle.com/developers/official-docker-image-for-oracle-java-and-the-openjdk-roadmap-for-containers

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



Non farei affidamento sul fatto che sia disponibile a lungo. Come ho scritto, la licenza di Oracle non consente di distribuirla pubblicamente - solo Oracle può legittimamente distribuire il proprio JDK o JRE. Quindi, in sostanza, questo repository è illegale e molto probabilmente scomparirà.
Evgeny

Quello che puoi fare è usare i loro Dockerfilesu GitHub per ottenere la tua immagine Docker con Java. Ad esempio github.com/anapsix/docker-alpine-java/blob/master/8/121b13/jdk/…
Evgeny

E una volta creata l'immagine della finestra mobile, posso memorizzarla nel nostro registro della finestra mobile privata?
030

1
Sì. La licenza proibisce di distribuire pubblicamente JDK / JRE in forma binaria.
Evgeny

8

Dato che la docker non è un sistema operativo, no non c'è JDK per la docker.

Quando capisco la tua domanda, è che un JDK completo è troppo grande per i tuoi desideri, in questo caso potresti provare a passare solo al JRE e includere solo le librerie necessarie.

JDK è l'acronimo di Java Development Kit, JRE è quello per Java Runtime Engine. Per "pigrizia" a causa della complessità di elencare ogni dipendenza necessaria, nessuno si limita alle sole librerie necessarie, ma è la strada da percorrere se si desidera ridurre le dimensioni installate al minimo indispensabile.

Un modo più utilizzabile potrebbe essere quello di rimuovere alcune delle cose installate che occupano molto spazio:

/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

Ci sono due * src.zip che possono essere rimossi, non saranno utili, e come puoi vedere la directory lib ha la metà delle dimensioni e al suo interno hai un sacco di cose che non ti servono davvero:

/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

Puoi senza problemi rimuovere missoncontrol su un server, suppongo che anche tu possa sbarazzarti di visualvm, dovrai controllare se hai bisogno di qualcosa in questa directory lib, ma non posso dirlo senza conoscere la tua app.

Una cosa che dovresti fare nel tuo dockerfile durante l'installazione di Oracle JDK è rimuovere il .tar.gzfile scaricato che ha all'incirca le stesse dimensioni della directory risultante poiché i .jarfile sono già compressi, tar.gz è lì solo per "impacchettarli".

Devi fare tutto questo con lo stesso RUNcomando, concatenandoti &&per evitare di aggiungere livelli in cui non rimuoverai le dimensioni rimuovendo i file dal livello precedente.


3

Non esiste un'implementazione ufficiale Oracle JDK fornita da Docker. Docker era solito supportare la propria libreria Java su hub.docker.com, ma la deprecava a favore dell'attuale implementazione OpenJDK poiché era "specifica di OpenJDK sin dalla sua prima introduzione". Il loro ragionamento:

Poiché tutte le principali distribuzioni Linux upstream non sono disposte a ridistribuire Oracle Java nei propri canali di distribuzione, abbiamo scelto di seguirle. Vedere i riferimenti di seguito su come ogni distribuzione non distribuisce Oracle Java.

Quindi, se vuoi mantenere la tua immagine Docker il più piccola possibile, considera invece l'utilizzo di OpenJDK. C'è un repository Dockerfile OpenJDK ufficiale o puoi semplicemente usarlo docker pull openjdk. Il Dockerfile di base "facile da eseguire" per OpenJDK 7 è il seguente (tratto dal sito Web elencato nella frase precedente):

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

1
Non esiste un Oracle JDK ufficiale? Sembra in qualche modo errato, o almeno espresso in modo errato.
Evgeny

1
@Evgeny Sono d'accordo, presumo che l'intento sia quello di dire: "Nessuna immagine docker ufficiale tra cui Oracle JDK di Oracle", forse solo un "docker" mancante tra JDK e implementazione ...
Tensibai

Oops, sì, intendevo rendere specifico quel Docker. Ho corretto la mia risposta.
Peter G
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.