특정 버전의 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가 필요합니다.
도커 파일을 다음과 같이 변경했습니다.
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 업데이트 65가되어야합니까)?
부정적인 대답은 좋습니다-일반적으로 다양한 Linux 패키징 메커니즘이 사람들이 이와 같은 리포지토리를 사용하지 않기를 원한다면 괜찮습니다. 항상 JDK의 자체 버전을 zip 파일로 패키징하고 압축을 풀 수 있습니다. 이미지 빌드의 일부로 환경을 제공하지만, 내가하고 싶지 않은 번거 로움입니다.
다른 사람들은 어떻게이 일을합니까? 최신 업데이트 (FROM 절의 기본 이미지 및 yum 업데이트에 정의 된대로)로 최신 버전의 OS 배포판을 사용할 수 있도록 JDK를 설치하는 다른 방법이 있습니까?
이런 종류의 요구 사항에 더 적합한 Linux 버전이 있습니까?
yum install -y $package --disablerepo=updates