설명
apt-get update 같은 인덱스 갱신을 별도 RUN에서 실행하면 Docker가 이전 갱신 레이어를 재사용할 수 있습니다. 뒤의 설치 명령만 바뀌면 오래된 인덱스로 패키지를 설치해 실패하거나 예상과 다른 결과가 나올 수 있습니다.
같은 RUN으로 묶으면 설치 명령 변경 시 갱신도 함께 실행됩니다. 다만 RUN 전체가 캐시되면 재실행되지 않으므로 새 패키지 정보를 받아야 할 때는 빌드 캐시 정책도 확인해야 합니다.
잠재적 영향
- 오래된 인덱스에 따른 다운로드·설치 실패로 배포가 늦어질 수 있습니다.
- 빌드 캐시 상태에 따라 설치 결과를 추적하기 어려워질 수 있습니다.
해결 방법
- apt-get update && apt-get install ...처럼 인덱스 갱신과 설치를 같은 RUN에 두세요.
- 최신 정보를 반영해야 할 때는 해당 레이어의 캐시를 갱신하고, 재현성이 필요하면 베이스·패키지 버전과 저장소도 관리하세요.
- 패키지 관리자마다 update의 의미가 다르므로 갱신과 업그레이드를 구분하고 불필요한 캐시는 같은 RUN에서 정리하세요.
예시
기존 Ubuntu 예제는 APT 인덱스 갱신과 설치의 순서만 비교합니다. 패키지 캐시 정리는 생략했습니다.
변경 전
dockerfile
FROM ubuntu:24.04
RUN apt-get update
RUN apt-get install -y curl
변경 후
dockerfile
FROM ubuntu:24.04
RUN apt-get update \
&& apt-get install -y curl
설명:
- 변경 전: 갱신 레이어가 재사용된 상태에서 설치만 새로 실행될 수 있습니다.
- 변경 후: 인덱스 갱신과 설치를 함께 실행합니다. 전체 레이어의 캐시 재사용이나 버전 변동까지 없애지는 않습니다.