Нет ли Oracle JDK для докера?

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

когда будет запущен образ докера, появится следующее сообщение:

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

Когда Oracle JDK развернут, размер образа докера более чем удвоился!

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

обсуждение

Когда «Google Oracle JDK для докера» не отображается, возвращаются только некоторые ссылки на образ докера, содержащие докер. Когда Oracle JDK развернут в образе докера, размер увеличивается более чем вдвое. Я хочу, чтобы образы докеров были как можно меньше, но Oracle JDK кажется больше, чем само изображение!

Вопрос

Нет ли Oracle JDK для докера?

030
источник
@peter не стесняйтесь прыгать в чате, если вы хотите это обсудить :)
Tensibai

Ответы:

20

Нет. Поскольку вы не можете распространять Oracle JDK или JRE, действующая лицензия не позволяет распространять . При распространении третьей стороной (встроенной в ваше приложение) вся ответственность за то, что оно не работает, лежит на этой стороне. Вот почему вы не найдете Oracle JDK / JRE ни в одном из общедоступных реестров Docker или в каких-либо репозиториях пакетов Linux.

Вы можете создать свой собственный образ и установить Oracle JDK или JRE, используя пакет webupd8team / java для Ubuntu / Debian.

И если вы используете Alpine Linux, этот пост в блоге объясняет, какие зависимости требуются, и ссылки на StackOverflow для инструкций по установке.

Обновление : Oracle теперь имеет официальный образ Docker в Docker Store . https://blogs.oracle.com/developers/official-docker-image-for-oracle-java-and-the-openjdk-roadmap-for-containers

Ссылка на Docker Store Oracle Java Image - https://store.docker.com/images/oracle-serverjre-8

Евгений
источник
Я бы не стал полагаться на то, что он будет доступен долго. Как я писал, лицензия от Oracle не позволяет публично распространять ее - только Oracle может легально распространять свои JDK или JRE. В общем, этот репозиторий является незаконным и, скорее всего, исчезнет.
Евгений
Что вы можете сделать, это использовать их Dockerfileна GitHub, чтобы получить свой собственный образ Docker с Java. Например, github.com/anapsix/docker-alpine-java/blob/master/8/121b13/jdk/…
Евгений,
И как только образ докера создан, мне разрешено хранить его в нашем личном реестре докеров?
030
1
Да. Лицензия запрещает публичное распространение JDK / JRE в двоичной форме.
Евгений
8

Поскольку Docker не является операционной системой, нет JDK для Docker.

Насколько я понимаю, ваш вопрос заключается в том, что полный JDK слишком велик для ваших пожеланий, в этом случае вы можете попробовать переключиться только на JRE и включить только необходимые библиотеки.

JDK - это аббревиатура Java Development Kit, JRE - это Java Runtime Engine. Из-за «ленивости» из-за сложности перечисления всех необходимых зависимостей никто не ограничивается только необходимыми библиотеками, но это путь, если вы хотите уменьшить установленный размер до строгого минимума.

Более удобным способом было бы удалить некоторые из установленных вещей, которые занимают много места:

/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

Есть два * src.zip, которые можно удалить, они не будут полезны, и, как вы можете видеть, каталог lib в два раза меньше, и внутри него есть куча вещей, которые вам на самом деле не нужны:

/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

Вы можете без проблем удалить missoncontrol на сервере, я полагаю, вы также можете избавиться от visualvm, вам придется проверить, нужно ли вам что-то в этом каталоге lib, но я не могу сказать, не зная вашего приложения.

Одна вещь, которую вы должны сделать в вашем dockerfile при установке oracle jdk, - это удалить загруженный .tar.gzфайл, размер которого примерно равен размеру результирующего каталога, так как .jarфайлы уже сжаты, tar.gz просто «упаковывает» их.

Вы должны сделать все это в одной RUNкоманде, &&чтобы избежать добавления слоев, размер которых не будет удален путем удаления файлов из предыдущего слоя.

Tensibai
источник
3

Официальной реализации Oracle JDK от Docker не существует. Docker ранее поддерживал свою собственную библиотеку Java на hub.docker.com, но они отказались от нее в пользу фактической реализации OpenJDK, поскольку она была «специфична для OpenJDK с момента ее первого появления». Их рассуждения:

Поскольку все основные дистрибутивы Linux не хотят распространять Oracle Java в своих собственных каналах распространения, мы решили следовать им. См. Ссылки ниже о том, как каждый дистрибутив не распространяет Oracle Java.

Поэтому, если вы хотите, чтобы ваш образ Docker был как можно меньше, рассмотрите возможность использования OpenJDK. Есть официальный репозиторий OpenJDK Dockerfile, или вы можете просто использовать docker pull openjdk. Основной простой в использовании Dockerfile для OpenJDK 7 выглядит следующим образом (взято с сайта, указанного в предыдущем предложении):

FROM openjdk:7
COPY . /usr/src/myapp
WORKDIR /usr/src/myapp
RUN javac Main.java
CMD ["java", "Main"]
Питер Г
источник
1
Нет официального Oracle JDK? Это кажется несколько неправильным или, по крайней мере, неправильно сформулированным.
Евгений
1
@ Евгений Я согласен, я предполагаю, что намерение состоит в том, чтобы сказать: «Нет официального образа докера, включая Oracle JDK от Oracle», может быть, просто отсутствует «докер» между JDK и реализацией ...
Tensibai
Ой, да, я хотел сделать этот Docker конкретным. Я исправил свой ответ.
Питер Г