特定のバージョンのJavaに関連付けられたカスタムアプリケーションを実行するdockerfileを作成しています。
私が参照していた記事が使用していたものであり、何かを使用する必要があるため、centos7ベースイメージを使用しているので、それは他のどの画像よりも優れています。正直なところ、使用しているユーザーランドは気にしません。このイメージのポイントは、ホストされているソフトウェアです。Linuxディストリビューション自体は、目的を達成するための手段にすぎません。重要なことに、JDKは他のアプリケーションやユーザーによって使用されません。
述べたように、私のアプリケーションは、私が使用しているJavaの特定のバージョンに関連付けられています-Javaバージョンへの更新には、の完全な回帰テストが必要になりますリリース前の特定のバージョンのソフトウェア。
私がフォローしていた記事は、関連するdockerfileJDKインストールパーツから始まりました。
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
そして、Dockerのイメージはうまく構築されていました。それは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
Dockerfileを再構築して、特定のバージョンのJavaを常に使用できるようにするにはどうすればよいですか(この例では、Javaのバージョンを1.8にします)。 0更新65)?
否定的な答えは問題ありません-さまざまなLinuxパッケージングメカニズムが一般に人々にこのようなリポジトリを使用させたくない場合、それはOk-私はいつでも自分のバージョンのJDKをパッケージ化できますファイルを圧縮して、イメージビルドの一部として環境内のどこかで解凍しますが、それは私がしたくない面倒な作業です。
他の人はこれをどのように行いますか? JDKをインストールする別の方法はありますか?最新の更新(FROM句のベースイメージとyum更新で定義されている)を含む最新バージョンのOSディストリビューションを使用できますが、特定のバージョンのJDKをインストールできますか?
この種の要件により適したLinuxバージョンはありますか(私はCentOSに縛られていません、ユーザーランドのLinuxディストリビューションは私にとって特に重要ではありません)?
必要なパッケージが表示されているように見えますが、何らかの理由で更新リポジトリからインストールされています。
Yumコマンドでupdatesリポジトリを無効にできます。
yum install -y $package --disablerepo=updates