Я створюю dockerfile, який запускає власну програму, прив’язану до певної версії Java.
Я використовую базовий образ centos7, тому що саме в цій статті я мав на увазі і тому, що я повинен щось використовувати, тому це так добре, як і будь-який. Мені чесно не байдуже, яку користувальницьку землю я використовую. Суть цього зображення - це програмне забезпечення, яке розміщується, саме дистрибутив Linux - це лише засіб для досягнення мети - що важливо, JDK не буде використовуватися іншими програмами та користувачами.
Як зазначено, моя програма прив’язана до конкретної версії Java, яку я використовую - будь-яке оновлення версії Java вимагатиме повного тесту регресії програмного забезпечення з цією конкретною версією до її випуску.
Стаття, яку я слідкував, розпочалася з відповідних докерфайлів JDK для встановлення деталей приблизно так:
FROM centos:centos7
RUN yum makecache \
&& yum update -y \
&& yum install -y \
java-1.8.0-openjdk-devel \
&& yum clean all
Це недостатньо конкретно, щоразу, коли зображення будуються, він отримує випадкову версію Java, яка не є тим, що я хочу, мені потрібна конкретна версія Java.
Я змінив файл докера, щоб виглядати так:
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, оновлено 65)?
Негативна відповідь чудова - якщо різні механізми упаковки Linux взагалі не хочуть, щоб люди користувались такими сховищами, це нормально - я завжди можу запакувати власну версію JDK у вигляді поштового файлу та просто розпакувати її десь усередині навколишнє середовище як частина побудови зображення, але це сукупність клопотів, які я вважаю за краще не робити.
Як це роблять інші? Чи існує інший спосіб встановлення JDK, щоб я міг мати останню версію дистрибутива ОС з останніми оновленнями (як визначено базовим зображенням у пункті FROM та оновленням yum), але встановити конкретну версію JDK?
Чи є версія Linux більш підходяща до такого роду вимог (я не ввійшов у CentOS, дистрибутив Linuxland для мене не особливо важливий)?
yum install -y $package --disablerepo=updates