특정 버전의 패키지를 지정하는 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가 필요합니다.

도커 파일을 다음과 같이 변경했습니다.

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 버전이 있습니까?


겠습니까 -versionlock을 YUM 부두 노동자로 사용할 수에 의해?
Aaron Copley

1
@AaronCopley 그렇게 생각하지 않습니다. versionlock은 다음에 업데이트를 실행할 때 버전을 유지하는 데 중점을 둔 것으로 보이지만 실제로 리포지토리가 새 버전으로 이동하면 초기 설치 명령이 실패하지 않도록 걱정하고 있습니다. 특정 환경에서 yum 업데이트를 다시 실행할 계획은 없습니다. 환경에 새로운 업데이트가 필요할 때 새로운 도커 이미지가 작성됩니다 (그리고 그 이미지가 현재 사용중인 것과 동일한 버전의 JDK를 사용하고 싶습니다).
Shorn

1
미안, 내가 오해 한 것 같아 요청한 버전이 기본 이고 어떤 이유로 든 업데이트 에서 설치되고 있음을 알 수 있습니다 . Tryyum install -y $package --disablerepo=updates
Aaron Copley

1
@AaronCopley Yep, 작동하는 것 같습니다-감사합니다! 당신이 대답하면 성공으로 표시합니다. 아니면 나중에 직접 추가하겠습니다.
Shorn

답변:


2

원하는 패키지가 보이는 것처럼 보이지만 어떤 이유로 든 업데이트 저장소에서 설치하고 있습니다.

yum 명령에서 업데이트 저장소를 비활성화 할 수 있습니다.

yum install -y $package --disablerepo=updates
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.