パッケージの特定のバージョンを指定するLinux環境を構築するにはどうすればよいですか?


9

特定のバージョンのJavaに関連付けられたカスタムアプリケーションを実行するdockerfileを作成しています。

私がcentos7ベースイメージを使用しているのは、それが私が参照していた記事が使用していたものであり、何かを使用する必要があるためです。正直に言って、私が使用しているユーザーランドは気にしません。このイメージのポイントは、ホストされているソフトウェアであり、Linuxディストリビューション自体は目的を達成するための手段にすぎません。重要なのは、JDKが他のアプリケーションやユーザーによって使用されないことです。

述べたように、私のアプリケーションは使用しているJavaの特定のバージョンに関連付けられています。Javaバージョンへの更新には、リリース前にその特定のバージョンのソフトウェアの完全な回帰テストが必要です。

私がフォローしていた記事は、次のような関連するdockerfile JDKインストールパーツから始まりました。

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

そして、ドッカーのイメージはうまく構築されていました。それは12月でした。

今週、ソフトウェアの別の部分に小さな変更を加え、イメージの新しいバージョンを再構築する必要がありましたが、イメージの構築が失敗しました。

特定のバージョンの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を常に使用できるようにdockerfileを再構築するにはどうすればよいですか(この例では、javaのバージョンを1.8.0 update 65にしたい)。

否定的な答えは結構です-一般に、さまざまなLinuxパッケージメカニズムがこのようなリポジトリを使用したくない場合、それはOKです-私はいつでも自分のバージョンのJDKをzipファイルとしてパッケージ化し、それをイメージビルドの一部としての環境ですが、それは私がやりたくないほうがいい束の束です。

他の人はこれをどのように行うのですか?FROM句のベースイメージとyumアップデートで定義されている最新の更新を含むOSディストリビューションの最新バージョンを使用できるようにJDKをインストールする別の方法はありますか?ただし、特定のバージョンのJDKをインストールしますか?

この種の要件により適したLinuxバージョンはありますか(私はCentOSに慣れていません。ユーザーランドのLinuxディストリビューションは特に重要ではありません)。


-versionlockをYUMドッカーで使用可能なことで?
アーロンコプリー2016

1
@AaronCopley私はそうは思いません。versionlockは、次にupdateを実行したときにバージョンを維持することに重点を置いているように見えますが、リポジトリが新しいバージョンに移行したら、最初のインストールコマンドが失敗しないようにすることが実際に心配です。その特定の環境でyum updateを実行する予定は二度とありません。環境で新しい更新が必要になると、新しいdockerイメージが構築されます(そのイメージで、現在使用しているのとまったく同じバージョンのJDKを使用したいと思います)。
Shorn

1
すみません、誤解したようです。リクエストしているバージョンがベースにあり、何らかの理由でアップデートからインストールされていることがわかります。試してみるyum install -y $package --disablerepo=updates
アーロンコプリー2016

1
@AaronCopleyうん、それはうまくいくようです-ありがとう!あなたがそれを答えにしたら、私はそれを成功とマークします。または後で自分で追加します。
Shorn

回答:


2

目的のパッケージが表示されているように見えますが、何らかの理由で更新リポジトリからインストールされています。

yumコマンドで更新リポジトリを無効にすることができます。

yum install -y $package --disablerepo=updates
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.