Czy nie ma Oracle JDK dla dokera?

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

po uruchomieniu obrazu dokera wyświetlany jest następujący komunikat:

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

Po wdrożeniu Oracle JDK rozmiar obrazu dokera jest ponad dwukrotnie większy!

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

Dyskusja

Gdy „Czy nie ma Oracle JDK dla okna dokowanego”, są wyszukiwane tylko niektóre łącza do obrazu dokera, które zawierają okno dokowane. Po wdrożeniu Oracle JDK na obrazie dokera rozmiar jest ponad dwukrotnie większy. Chcę, aby obrazy dokerów były jak najmniejsze, ale Oracle JDK wydaje się większy niż sam obraz!

Pytanie

Czy nie ma Oracle JDK dla dokera?

030
źródło
@peter zachęcamy do skakania na czatach, jeśli chcesz o tym porozmawiać :)
Tensibai

Odpowiedzi:

20

Nie. Ponieważ nie można rozpowszechniać Oracle JDK ani JRE, obowiązująca licencja nie zezwala na dystrybucję . W przypadku dystrybucji przez stronę trzecią (osadzoną w Twojej aplikacji) cała odpowiedzialność za to, że nie działa, spoczywa na tej stronie. Dlatego nie znajdziesz Oracle JDK / JRE w żadnym publicznym rejestrze Docker ani w żadnym repozytorium pakietów Linuksa.

Możesz stworzyć swój własny obraz i zainstalować Oracle JDK lub JRE za pomocą pakietu webupd8team / java dla Ubuntu / Debian.

A jeśli korzystasz z Alpine Linux, ten post na blogu wyjaśnia, które zależności są wymagane, oraz linki do StackOverflow w celu uzyskania instrukcji instalacji.

Aktualizacja : Oracle ma teraz oficjalny obraz Docker w Docker Store . https://blogs.oracle.com/developers/official-docker-image-for-oracle-java-and-the-openjdk-roadmap-for-containers

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

Evgeny
źródło
Nie polegałbym na tym, że będzie dostępny długo. Jak napisałem, licencja Oracle nie pozwala na publiczne rozpowszechnianie - tylko Oracle może legalnie rozpowszechniać swoje JDK lub JRE. Zasadniczo to repozytorium jest nielegalne i najprawdopodobniej zniknie.
Evgeny,
Co można zrobić, to użyć ich Dockerfiles na GitHub uzyskać własne Docker obraz z Java. Na przykład github.com/anapsix/docker-alpine-java/blob/master/8/121b13/jdk/…
Evgeny
A kiedy obraz dokera zostanie utworzony, czy mogę przechowywać go w naszym prywatnym rejestrze dokera?
030
1
Tak. Licencja zabrania publicznego rozpowszechniania JDK / JRE w formie binarnej.
Evgeny,
8

Ponieważ okno dokowane nie jest systemem operacyjnym, nie ma JDK dla okna dokowanego.

Jak rozumiem twoje pytanie, to dlatego, że pełny pakiet JDK jest za duży dla twoich życzeń, w takim przypadku możesz spróbować przełączyć się tylko na JRE i zawierać tylko niezbędne biblioteki.

JDK to skrót od Java Development Kit, JRE to Java Runtime Engine. Dzięki „lenistwu” ze względu na złożoność listy wszystkich potrzebnych zależności nikt nie sprowadza się tylko do niezbędnych bibliotek, ale taka jest droga, jeśli chcesz zmniejszyć zainstalowany rozmiar do ścisłego minimum.

Bardziej użytecznym sposobem może być usunięcie niektórych zainstalowanych rzeczy, które zajmują dużo miejsca:

/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

Istnieją dwa pliki * src.zip, które można usunąć, nie będą one przydatne, a jak widać, katalog lib jest o połowę mniejszy i zawiera wiele rzeczy, których tak naprawdę nie potrzebujesz:

/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

Możesz bez problemu usunąć missoncontrol na serwerze, zakładam, że możesz pozbyć się visualvm, musisz sprawdzić, czy potrzebujesz czegoś w tym katalogu lib, ale nie mogę powiedzieć bez znajomości twojej aplikacji ..

Jedną rzeczą, którą powinieneś zrobić w swoim pliku docker podczas instalacji oracle jdk, jest usunięcie pobranego .tar.gzpliku, który jest mniej więcej tego samego rozmiaru co katalog wynikowy, ponieważ .jarpliki są już skompresowane, tar.gz jest po prostu, aby je „spakować”.

Musisz to wszystko zrobić w tym samym RUNpoleceniu, łącząc łańcuchy, &&aby uniknąć dodawania warstw, w których nie usuniesz rozmiaru przez usunięcie plików z poprzedniej warstwy.

Tensibai
źródło
3

Docker nie ma oficjalnej implementacji Oracle JDK. Docker obsługiwał własną bibliotekę Java na hub.docker.com, ale wycofał ją na korzyść rzeczywistej implementacji OpenJDK, ponieważ była ona „specyficzna dla OpenJDK od momentu jej pierwszego wprowadzenia”. Ich uzasadnienie:

Ponieważ wszystkie główne dystrybucje Linuksa na wcześniejszym etapie nie chcą redystrybuować Oracle Java we własnych kanałach dystrybucji, postanowiliśmy je śledzić. Zobacz odnośniki poniżej, w jaki sposób każda dystrybucja nie dystrybuuje Oracle Java.

Jeśli więc chcesz, aby obraz Dockera był jak najmniejszy, rozważ użycie OpenJDK. Istnieje oficjalne repozytorium Dockerfile OpenJDK lub możesz po prostu użyć docker pull openjdk. Podstawowy „łatwy w uruchomieniu” plik Docker dla OpenJDK 7 jest następujący (pochodzi ze strony internetowej wymienionej w poprzednim zdaniu):

FROM openjdk:7
COPY . /usr/src/myapp
WORKDIR /usr/src/myapp
RUN javac Main.java
CMD ["java", "Main"]
Peter G.
źródło
1
Nie ma oficjalnego Oracle JDK? To wydaje się nieco niepoprawne lub przynajmniej niepoprawnie sformułowane.
Evgeny,
1
@Evgeny Zgadzam się, zakładam, że intencją jest powiedzieć: „Brak oficjalnego obrazu dokera, w tym Oracle JDK z Oracle”, może po prostu brak „dokera” między JDK a implementacją ...
Tensibai
Ups, tak, chciałem sprecyzować ten Docker. Poprawiłem swoją odpowiedź.
Peter G