Як створити середовище Linux, яке визначає конкретні версії пакетів?


9

Я створюю 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-versionlock використовувати Docker?
Аарон Коплі

1
@AaronCopley Я так не думаю. Схоже, що версіяlock орієнтована на те, щоб версія залишалася там, коли це буде наступний раз, коли ви запустите оновлення, але я насправді занепокоєний тим, щоб команда початкової установки не вийшла з ладу після того, як репозиторій перейшов на нову версію. Я не планую більше ніколи запускати оновлення yum в цьому конкретному середовищі. Коли середовище потребує нових оновлень, буде створено нове зображення докера (і я хочу, щоб це зображення використовувало ту саму версію JDK, як і зараз).
Шорн

1
Вибачте, я думаю, що я зрозумів неправильно. Ви можете бачити, що версія, яку ви запитуєте, знаходиться в базі, і вона встановлюється з оновлень з будь-якої причини. Спробуйтеyum install -y $package --disablerepo=updates
Аарон Коплі

1
@AaronCopley Так, здається, працює - дякую! Якщо ви зробите це відповіддю, я відзначу це успішним. Або я його додаду пізніше.
Шорн

Відповіді:


2

Схоже, він бачить потрібний вам пакет, але з будь-якої причини встановлюється із сховища оновлень.

Ви можете відключити сховище оновлень у своїй команді yum;

yum install -y $package --disablerepo=updates
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.