¿No hay Oracle JDK para Docker?

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

cuando se ejecutará la imagen de la ventana acoplable, se mostrará el siguiente mensaje:

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

Cuando se implementa Oracle JDK, ¡el tamaño de la imagen del acoplador se duplica con creces!

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

Discusión

Cuando "¿No hay Oracle JDK para Docker" se busca en Google, solo se devuelven algunos enlaces a la imagen de Docker que contienen Docker. Cuando Oracle JDK se implementa en la imagen del acoplador, el tamaño se duplica con creces. Quiero mantener las imágenes de la ventana acoplable lo más pequeñas posible, ¡pero el Oracle JDK parece ser más grande que la imagen misma!

Pregunta

¿No hay Oracle JDK para Docker?

030
fuente
@peter siéntete libre de saltar en las mesas si quieres discutirlo :)
Tensibai

Respuestas:

20

No. Debido a que no puede distribuir Oracle JDK o JRE, la licencia en efecto no permite la distribución . Cuando es distribuido por un tercero (incrustado con su aplicación), toda la responsabilidad por no funcionar es de esa parte. Es por eso que no encontrará Oracle JDK / JRE en ninguno de los registros públicos de Docker ni en ningún repositorio de paquetes de Linux.

Puede crear su propia imagen e instalar Oracle JDK o JRE utilizando el paquete webupd8team / java para Ubuntu / Debian.

Y si está utilizando Alpine Linux, esta publicación de blog explica qué dependencias son necesarias y vincula a StackOverflow para obtener instrucciones de instalación.

Actualización : Oracle tiene una imagen oficial de Docker en Docker Store ahora. https://blogs.oracle.com/developers/official-docker-image-for-oracle-java-and-the-openjdk-roadmap-for-containers

Enlace a la imagen de Oracle Java de Docker Store : https://store.docker.com/images/oracle-serverjre-8

Evgeny
fuente
No confiaría en que esté disponible por mucho tiempo. Como escribí, la licencia de Oracle no permite distribuirla públicamente, solo Oracle puede distribuir legalmente su JDK o JRE. Básicamente, este repositorio es ilegal y probablemente desaparecerá.
Evgeny
Lo que puede hacer es usar sus Dockerfiles en GitHub para obtener su propia imagen de Docker con Java. Por ejemplo github.com/anapsix/docker-alpine-java/blob/master/8/121b13/jdk/…
Evgeny
Y una vez que se crea la imagen del acoplador, ¿puedo almacenarla en nuestro registro de acoplador privado?
030
1
Si. La licencia prohíbe distribuir públicamente JDK / JRE en forma binaria.
Evgeny
8

Como Docker no es un sistema operativo, no, no hay JDK para Docker.

Según entiendo su pregunta, es que un JDK completo es demasiado grande para sus deseos, en este caso, puede intentar cambiar solo al JRE e incluir solo las bibliotecas necesarias.

JDK es el acrónimo de Java Development Kit, JRE es el de Java Runtime Engine. Por "pereza" debido a la complejidad de enumerar todas las dependencias necesarias, nadie se limita a las bibliotecas necesarias, pero ese es el camino a seguir si desea reducir el tamaño instalado al mínimo estricto.

Una forma más útil podría ser quitar algunas de las cosas instaladas que están ocupando mucho espacio:

/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

Hay dos * src.zip que se pueden eliminar, no serán de utilidad, y como puede ver, el directorio lib tiene la mitad del tamaño y dentro tiene un montón de cosas que realmente no necesita:

/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

Sin problemas, puede eliminar missoncontrol en un servidor, supongo que también puede deshacerse de visualvm, tendrá que verificar si necesita algo en este directorio lib, pero no puedo decirlo sin conocer su aplicación.

Una cosa que debe hacer en su dockerfile mientras instala oracle jdk es eliminar el .tar.gzarchivo descargado que tiene aproximadamente el mismo tamaño que el directorio resultante ya que los .jararchivos ya están comprimidos, el tar.gz está ahí para "empaquetarlos".

Tiene que hacer todo esto en el mismo RUNcomando, encadenando &&para evitar agregar capas donde no eliminará el tamaño al eliminar los archivos de la capa anterior.

Tensibai
fuente
3

No hay una implementación oficial de Oracle JDK proporcionada por Docker. Docker solía soportar su propia biblioteca Java en hub.docker.com, pero la desaprobaron a favor de la implementación real de OpenJDK ya que era "específica de OpenJDK desde que se introdujo por primera vez". Su razonamiento:

Como todas las principales distribuciones de Linux ascendentes no están dispuestas a redistribuir Oracle Java en sus propios canales de distribución, hemos optado por seguirlas. Consulte las referencias a continuación sobre cómo cada distribución no distribuye Oracle Java.

Entonces, si desea mantener su imagen de Docker lo más pequeña posible, considere usar OpenJDK en su lugar. Hay un repositorio oficial de OpenJDK Dockerfile o simplemente puede usarlo docker pull openjdk. El Dockerfile básico "fácil de ejecutar" para OpenJDK 7 es el siguiente (tomado del sitio web mencionado en la oración anterior):

FROM openjdk:7
COPY . /usr/src/myapp
WORKDIR /usr/src/myapp
RUN javac Main.java
CMD ["java", "Main"]
Peter G
fuente
1
¿No hay un Oracle JDK oficial? Eso parece algo incorrecto, o al menos redactado incorrectamente.
Evgeny
1
@Evgeny Estoy de acuerdo, supongo que la intención es decir: "No hay una imagen oficial de docker que incluya Oracle JDK de Oracle", tal vez solo falta un "docker" entre JDK y la implementación ...
Tensibai
Vaya, sí, quise decir que Docker sea específico. He corregido mi respuesta.
Peter G