Назад | Перейти на главную страницу

Как мне создать среду Linux, в которой указаны конкретные версии пакетов?

Я создаю файл 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.

Я изменил файл докера, чтобы он выглядел так:

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

Как я могу перестроить свой файл докеров, чтобы всегда использовать определенную версию Java (в этом примере я хочу, чтобы версия java была 1.8.0 с обновлением 65)?

Отрицательный ответ - это нормально - если различные механизмы упаковки Linux в целом не хотят, чтобы люди использовали свои репозитории подобным образом, это нормально - я всегда могу упаковать свою версию JDK в виде zip-файла и просто распаковать его где-нибудь внутри окружение как часть сборки образа, но это куча хлопот, от которых я бы предпочел избавиться.

Как это делают другие люди? Есть ли другой способ установки JDK, чтобы я мог иметь последнюю версию дистрибутива ОС с последними обновлениями (как определено базовым образом в предложении FROM и обновлении yum), но установить определенную версию JDK?

Есть ли версия Linux, более подходящая для такого рода требований (я не привязан к CentOS, пользовательский дистрибутив Linux не особенно важен для меня)?

Похоже, он видит нужный вам пакет, но по какой-то причине устанавливает его из репозитория обновлений.

Вы можете отключить репозиторий обновлений в своей команде yum;

yum install -y $package --disablerepo=updates