베이스 이미지 버전 미지정

Dockerfile의 FROM 이미지에 명확한 버전이나 다이제스트를 지정하지 않으면 빌드 결과가 달라질 수 있습니다.

설명

FROM alpine처럼 태그나 다이제스트를 명시하지 않으면 기본적으로 latest 태그를 사용합니다. 이 태그가 다른 이미지를 가리키면 같은 Dockerfile이라도 다음 빌드에서 다른 결과가 나올 수 있습니다.

베이스 이미지는 애플리케이션 전체 실행 환경을 결정합니다. 따라서 최소한 명확한 태그를 사용하고, 가능하면 다이제스트까지 고정해 빌드 재현성을 확보하는 것이 좋습니다.

잠재적 영향

  • 빌드 시점에 따라 서로 다른 운영체제나 라이브러리 구성이 들어갈 수 있습니다.
  • 예기치 않은 이미지 변경으로 테스트 결과와 운영 결과가 달라질 수 있습니다.
  • 취약점 점검과 배포 추적이 어려워집니다.

해결 방법

  • FROM alpine:3.22처럼 명확한 이미지 태그를 지정하세요.
  • 이미지 태그는 다시 지정될 수 있으므로 같은 이미지 내용을 선택하려면 다이제스트를 함께 사용하세요. 고정한 이미지도 보안 업데이트를 검토해 갱신하세요.
  • 멀티스테이지 빌드에서도 외부 이미지를 참조할 때는 항상 버전이나 다이제스트를 명시하세요.

예시

변경 전

dockerfile
FROM alpine

변경 후

dockerfile
FROM alpine:3.22

설명:

  • 변경 전: 태그가 없는 베이스 이미지는 저장소 상태에 따라 다른 결과를 만들 수 있습니다.
  • 변경 후: 명확한 버전 태그로 의도한 릴리스 계열을 지정합니다. 이 태그도 변경될 수 있으므로 동일한 내용이 필요하면 검증한 다이제스트를 추가하세요.

참조