Я создаю dockerfile, который запускает пользовательское приложение, привязанное к определенной версии Java.
Я использую базовое изображение centos7, потому что именно эту статью я имел в виду, и потому что мне нужно что-то использовать, так что это так же хорошо, как и любое другое. Мне, честно говоря, все равно, какой пользовательский язык я использую. Смысл этого образа - размещение программного обеспечения, сам дистрибутив Linux - всего лишь средство для достижения цели - важно, что JDK не будет использоваться другими приложениями или пользователями.
Как уже говорилось, мое приложение связано с конкретной версией Java, которую я использую - любое обновление до версии Java потребует полного регрессионного тестирования программного обеспечения с этой конкретной версией до его выпуска.
Статья, за которой я следил, началась с соответствующих частей установки JDK dockerfile, которые выглядят так:
FROM centos:centos7
RUN yum makecache \
&& yum update -y \
&& yum install -y \
java-1.8.0-openjdk-devel \
&& yum clean all
Это недостаточно конкретно, каждый раз, когда образы создаются, они получают случайную версию Java, а это не то, чего я хочу, мне нужна конкретная версия Java.
Я изменил файл Docker, чтобы он выглядел так:
FROM centos:centos7
RUN yum makecache \
&& yum update -y \
&& yum install -y \
java-1.8.0-openjdk-devel-1.8.0.65-3.b17.el7 \
&& yum clean all
И изображение докера строилось нормально. Это было в декабре.
На этой неделе мне нужно было внести небольшие изменения в другую часть программного обеспечения и пересобрать новую версию образа, но теперь сборка образа не удалась.
Сборка завершается ошибкой, потому что эта конкретная версия java-пакета больше недоступна (по крайней мере, я думаю, это то, что она говорит мне)
Error: Package: 1:java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64 (base)
Requires: java-1.8.0-openjdk-headless = 1:1.8.0.65-3.b17.el7
Available: 1:java-1.8.0-openjdk-headless-1.8.0.65-3.b17.el7.x86_64 (base)
java-1.8.0-openjdk-headless = 1:1.8.0.65-3.b17.el7
Installing: 1:java-1.8.0-openjdk-headless-1.8.0.71-2.b15.el7_2.x86_64 (updates)
java-1.8.0-openjdk-headless = 1:1.8.0.71-2.b15.el7_2
Как я могу перестроить свой dockerfile, чтобы я всегда мог использовать определенную версию Java (в этом примере я хочу, чтобы версия java была 1.8.0 update 65)?
Отрицательный ответ хорош - если различные механизмы упаковки Linux вообще не хотят, чтобы люди использовали свои репозитории, как это, это нормально - я всегда могу упаковать свою собственную версию JDK в виде zip-файла и просто распаковать ее где-нибудь внутри окружение как часть построения образа, но это куча хлопот, которые я предпочел бы не делать.
Как другие люди делают это? Есть ли другой способ установки JDK, чтобы я мог иметь последнюю версию дистрибутива ОС с последними обновлениями (как определено базовым образом в предложении FROM и обновлением yum), но установить определенную версию JDK?
Существует ли версия Linux, более подходящая для такого рода требований (я не привязан к CentOS, пользовательский дистрибутив Linux не особенно важен для меня)?
yum install -y $package --disablerepo=updates