dnf 패키지 버전 고정 누락

Dockerfile에서 dnf install 시 패키지 버전을 지정하지 않으면 빌드 결과가 달라질 수 있습니다.

설명

dnf install에서 패키지 이름만 지정하면 저장소 변경에 따라 다른 버전이 설치될 수 있습니다. 같은 Dockerfile을 다시 빌드해도 결과가 달라질 수 있어 이미지 재현성이 떨어집니다.

운영 환경에서 이런 차이는 예기치 않은 의존성 변경, 호환성 문제, 배포 실패로 이어질 수 있습니다. 필요한 패키지는 버전을 함께 명시해 설치 범위를 통제하는 것이 좋습니다.

잠재적 영향

  • 저장소 업데이트에 따라 이미지 내용이 달라질 수 있습니다.
  • 패키지 변경으로 애플리케이션 동작이나 설정이 달라질 수 있습니다.
  • 테스트한 이미지와 실제 배포 이미지가 서로 달라질 수 있습니다.

해결 방법

  • dnf install httpd-<version>-<release> 형식으로 저장소에서 확인한 정확한 버전과 릴리스를 지정하세요.
  • 여러 패키지를 설치할 때도 가능한 한 버전을 함께 고정하세요.
  • 버전 갱신 시에는 테스트와 취약점 점검을 먼저 수행하세요.

예시

HTTPD_VERSION_RELEASE에는 사용하는 Fedora 저장소에 존재하는 검토한 버전-릴리스를 제공하세요. latest 베이스와 전체 update는 여전히 변경 가능하므로 패키지 하나의 고정이 이미지 전체의 재현성을 보장하지는 않습니다.

변경 전

dockerfile
FROM fedora:latest
RUN dnf -y update && dnf -y install httpd && dnf clean all
RUN ["dnf", "install", "httpd"]

변경 후

dockerfile
FROM fedora:latest
ARG HTTPD_VERSION_RELEASE
RUN test -n "$HTTPD_VERSION_RELEASE" && dnf -y update && dnf -y install "httpd-${HTTPD_VERSION_RELEASE}" && dnf clean all

설명:

  • 변경 전: 패키지 버전이 고정돼 있지 않아 빌드 시점에 따라 다른 결과가 나올 수 있습니다.
  • 변경 후: 필요한 버전을 지정해 이미지 구성을 안정적으로 유지합니다.

참조