Não há Oracle JDK para docker?

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

Quando a imagem do Docker for executada, a seguinte mensagem é mostrada:

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

Quando o Oracle JDK é implantado, o tamanho da imagem do docker é mais que o dobro!

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

Discussão

Quando "Não existe Oracle JDK para docker" é pesquisado, apenas alguns links para a imagem do docker que contêm o docker são retornados. Quando o Oracle JDK é implantado na imagem do docker, o tamanho é mais que o dobro. Desejo manter as imagens do docker tão pequenas quanto possível, mas o Oracle JDK parece ser maior que a própria imagem!

Questão

Não há Oracle JDK para docker?

030
fonte
@ Peter fique à vontade para saltar chatops se você quiser discutir o assunto :)
Tensibai

Respostas:

20

Não. Como você não pode distribuir o Oracle JDK ou JRE, a licença em vigor não permite a distribuição . Quando distribuído por terceiros (incorporado ao seu aplicativo), toda a responsabilidade por ele não funcionar é dessa parte. É por isso que você não encontrará o Oracle JDK / JRE em nenhum registro público do Docker ou em nenhum repositório de pacotes Linux.

Você pode criar sua própria imagem e instalar o Oracle JDK ou JRE usando o pacote webupd8team / java para Ubuntu / Debian.

E se você estiver usando o Alpine Linux, esta postagem no blog explica quais dependências são necessárias e links para o StackOverflow para obter instruções de instalação.

Atualização : a Oracle tem uma imagem oficial do Docker na Docker Store agora. https://blogs.oracle.com/developers/official-docker-image-for-oracle-java-and-the-openjdk-roadmap-for-containers

Link para a imagem Java Java da Docker Store - https://store.docker.com/images/oracle-serverjre-8

Evgeny
fonte
Eu não confiaria que estivesse disponível por muito tempo. Como escrevi, a licença da Oracle não permite distribuí-la publicamente - somente a Oracle pode distribuir legalmente seu JDK ou JRE. Então, basicamente, este repositório é ilegal e provavelmente desaparecerá.
Evgeny
O que você pode fazer é usar os Dockerfiles no GitHub para obter sua própria imagem do Docker com Java. Por exemplo, github.com/anapsix/docker-alpine-java/blob/master/8/121b13/jdk/…
Evgeny
E uma vez criada a imagem do docker, posso armazená-lo em nosso registro do docker privado?
030
11
Sim. A licença proíbe a distribuição pública do JDK / JRE em formato binário.
Evgeny
8

Como o docker não é um sistema operacional, não há JDK para docker.

Pelo que entendi sua pergunta, é que um JDK completo é muito grande para seus desejos; nesse caso, você pode tentar mudar apenas para o JRE e incluir apenas as bibliotecas necessárias.

JDK é o acrônimo de Java Development Kit, JRE é o para Java Runtime Engine. Por "preguiça", devido à complexidade de listar todas as dependências necessárias, ninguém reduz apenas as bibliotecas necessárias, mas esse é o caminho a seguir se você deseja reduzir o tamanho instalado para o mínimo estrito.

Uma maneira mais utilizável pode ser retirar algumas das coisas instaladas que estão ocupando muito espaço:

/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

Há dois * src.zip que podem ser removidos, eles não serão úteis e, como você pode ver, o diretório lib tem metade do tamanho e nele existem várias coisas que você realmente não precisa:

/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

Você pode, sem problemas, remover o missoncontrol em um servidor, presumo que você também possa se livrar do visualvm, você terá que verificar se precisa de algo neste diretório lib, mas não posso saber sem conhecer seu aplicativo ..

Uma coisa que você deve fazer no seu dockerfile ao instalar o oracle jdk é remover o .tar.gzarquivo baixado, que é aproximadamente do mesmo tamanho do diretório resultante dos .jararquivos já compactados, o tar.gz está lá apenas para "empacotá-los".

Você precisa fazer tudo isso no mesmo RUNcomando, encadeando &&para evitar adicionar camadas nas quais você não removerá o tamanho removendo arquivos da camada anterior.

Tensibai
fonte
3

Não há implementação oficial do Oracle JDK fornecida pelo Docker. O Docker costumava dar suporte à sua própria biblioteca Java no hub.docker.com, mas a substituiu em favor da implementação real do OpenJDK, pois era "específico do OpenJDK desde que foi introduzido pela primeira vez". O raciocínio deles:

Como todas as principais distribuições upstream do Linux não estão dispostas a redistribuir o Oracle Java em seus próprios canais de distribuição, optamos por segui-las. Veja as referências abaixo sobre como cada distribuição não distribui o Oracle Java.

Portanto, se você deseja manter a imagem do Docker o menor possível, considere usar o OpenJDK. Existe um repositório oficial do OpenJDK Dockerfile ou você pode simplesmente usá-lo docker pull openjdk. O Dockerfile básico "fácil de executar" para o OpenJDK 7 é o seguinte (retirado do site listado na frase anterior):

FROM openjdk:7
COPY . /usr/src/myapp
WORKDIR /usr/src/myapp
RUN javac Main.java
CMD ["java", "Main"]
Peter G
fonte
11
Não existe um Oracle JDK oficial? Isso parece um tanto incorreto, ou pelo menos formulado incorretamente.
Evgeny
11
@Evgeny eu concordo, eu assumo a intenção é dizer: "Nenhuma imagem janela de encaixe oficial, incluindo o Oracle JDK da Oracle", talvez apenas um "estivador" perdido entre JDK e implementação ...
Tensibai
Opa, sim, eu quis fazer esse Docker específico. Eu corrigi minha resposta.
Peter G