설명
apt-get install로 패키지를 설치할 때 버전을 지정하지 않으면 패키지 저장소가 바뀌면서 다른 버전이 설치될 수 있습니다. 따라서 같은 Dockerfile을 사용해도 빌드 시점에 따라 결과가 달라질 수 있습니다.
버전 고정은 예기치 않은 변경을 줄이지만, 고정한 버전의 보안이나 이미지 전체의 재현성을 보장하지는 않습니다. 사용 가능한 패키지와 기본 이미지, 저장소 상태도 함께 관리해야 합니다.
잠재적 영향
- 다시 빌드한 이미지에 이전과 다른 패키지 버전이 포함될 수 있습니다.
- 검증하지 않은 업데이트로 애플리케이션 호환성이나 동작이 달라질 수 있습니다.
- 반대로 고정한 버전을 방치하면 필요한 보안 수정이 적용되지 않을 수 있습니다.
해결 방법
apt-get install package=version형식으로 사용할 버전을 지정하고 여러 패키지도 각각 검토하세요.- 같은
RUN단계에서apt-get update후 설치하고, 대상 배포판의 저장소에 지정한 버전이 있는지 확인하세요. - 보안 업데이트를 정기적으로 검토하고 테스트한 뒤 버전 고정값을 갱신하세요.
버전 지정 예시
아래 코드는 버전 지정 구문의 차이를 보여 주는 예제이며 그대로 실행할 수 있는 빌드 지침은 아닙니다. 기본 busybox 이미지에는 apt-get이 없고 python=2.7도 현재 사용할 버전으로 권장하지 않습니다. 실제 빌드에는 apt를 지원하는 기본 이미지와 해당 저장소에서 제공하는 지원 버전을 선택하세요.
버전 지정 없음
dockerfile
FROM busybox
RUN apt-get install python
RUN ["apt-get", "install", "python"]
버전 지정 있음
dockerfile
FROM busybox
RUN apt-get install python=2.7
설명:
- 버전 지정 없음: 패키지 이름만 지정하며, 설치할 버전을 제한하지 않습니다.
- 버전 지정 있음:
=2.7은 해당 버전의 설치를 요청합니다. 실제 빌드에서는 선택한 배포판에서 제공하는 지원 버전을 검토해 지정하세요.