설명
FROM alpine처럼 태그나 다이제스트를 명시하지 않으면 기본적으로 latest 태그를 사용합니다. 이 태그가 다른 이미지를 가리키면 같은 Dockerfile이라도 다음 빌드에서 다른 결과가 나올 수 있습니다.
베이스 이미지는 애플리케이션 전체 실행 환경을 결정합니다. 따라서 최소한 명확한 태그를 사용하고, 가능하면 다이제스트까지 고정해 빌드 재현성을 확보하는 것이 좋습니다.
잠재적 영향
- 빌드 시점에 따라 서로 다른 운영체제나 라이브러리 구성이 들어갈 수 있습니다.
- 예기치 않은 이미지 변경으로 테스트 결과와 운영 결과가 달라질 수 있습니다.
- 취약점 점검과 배포 추적이 어려워집니다.
해결 방법
FROM alpine:3.22처럼 명확한 이미지 태그를 지정하세요.- 이미지 태그는 다시 지정될 수 있으므로 같은 이미지 내용을 선택하려면 다이제스트를 함께 사용하세요. 고정한 이미지도 보안 업데이트를 검토해 갱신하세요.
- 멀티스테이지 빌드에서도 외부 이미지를 참조할 때는 항상 버전이나 다이제스트를 명시하세요.
예시
변경 전
dockerfile
FROM alpine
변경 후
dockerfile
FROM alpine:3.22
설명:
- 변경 전: 태그가 없는 베이스 이미지는 저장소 상태에 따라 다른 결과를 만들 수 있습니다.
- 변경 후: 명확한 버전 태그로 의도한 릴리스 계열을 지정합니다. 이 태그도 변경될 수 있으므로 동일한 내용이 필요하면 검증한 다이제스트를 추가하세요.