Немає 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 для докера?


@peter не соромтесь стрибати в чатах, якщо ви хочете обговорити це :)
Тенсібай

Відповіді:


20

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

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

І якщо ви використовуєте Alpine Linux, у цьому дописі в блозі пояснюються, які залежності потрібні, та посилання на StackOverflow для інструкцій із встановлення.

Оновлення : Oracle має офіційне зображення Docker у магазині Docker зараз. 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. Таким чином, це сховище є незаконним і, швидше за все, зникне.
Євгеній

Що ви можете зробити, це використовувати їх Dockerfiles на 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, які можна видалити, вони не будуть корисними, і як ви бачите, каталог файлів на половину розміру, і всередині нього є маса речей, які вам дійсно не потрібні:

/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 на сервері, я припускаю, що ви можете позбутися і від visvvm, вам доведеться перевірити, чи потрібно щось у цьому каталозі lib, але я не можу сказати, не знаючи вашої програми.

Одне, що ви повинні зробити у своєму dockerfile під час встановлення oracle jdk, - це видалити завантажений .tar.gzфайл, який має приблизно той самий розмір, що і результуюча директорія, оскільки .jarфайли вже стиснуті, tar.gz як раз там, щоб "пакувати" їх.

Ви повинні зробити все це в одній RUNкоманді, поєднуючись з тим, &&щоб уникнути додавання шарів, де ви не будете видаляти розмір, видаляючи файли з попереднього шару.


3

Офіційна реалізація Oracle JDK не надана компанією Docker. Docker використовував підтримку власної бібліотеки Java на hub.docker.com, але вони знецінили її на користь реальної реалізації OpenJDK, оскільки вона була "специфічною для OpenJDK з моменту її введення". Їх міркування:

Оскільки всі основні дистрибутивні версії Linux не бажають перерозподіляти Oracle Java у власних каналах дистрибуції, ми вирішили дотримуватися їх. Див. Посилання нижче про те, як кожен дистрибутив не поширює Oracle Java.

Тому якщо ви хочете зберегти своє зображення Docker якомога менше, подумайте про те, щоб скористатися OpenJDK. Існує офіційний сховище Dockerfile OpenJDK або ви можете просто використовувати 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
Немає офіційного JDK Oracle? Це здається дещо невірним або, принаймні, неправильно сформульованим.
Євгеній

1
@ Євген Я погоджуюся, я припускаю, що намір сказати: "Жодного офіційного зображення докера, включаючи Oracle JDK від Oracle", можливо, просто "докер" відсутній між JDK та реалізацією ...
Tensibai

Ой, так, я мав на увазі зробити цього Докера конкретним. Я виправив свою відповідь.
Петро Г
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.