빌드에서 캐시 사용 최적화하기

빌드에서 캐시 사용 최적화하기 (Optimize cache usage in builds)

Docker로 빌드할 때 명령과 그 명령이 의존하는 파일이 이전 빌드 이후 변경되지 않았다면, 해당 레이어는 빌드 캐시에서 재사용돼요. 캐시에서 레이어를 재사용하면 Docker가 레이어를 다시 빌드하지 않아도 되므로 빌드 과정이 빨라져요.

출처: 문서

본문

빌드 캐싱을 최적화하고 빌드 과정을 빠르게 하기 위한 몇 가지 기법을 소개할게요:

  • 레이어 순서 정하기 (Order your layers): Dockerfile의 명령을 논리적 순서로 배치하면 불필요한 캐시 무효화(invalidation)를 피할 수 있어요.
  • 컨텍스트 작게 유지하기 (Keep the context small): 컨텍스트는 빌드 명령을 처리하기 위해 빌더로 보내지는 파일·디렉터리 집합이에요. 컨텍스트를 최대한 작게 유지하면 빌더에 보낼 데이터 양이 줄고 캐시 무효화 가능성도 낮아져요.
  • 바인드 마운트 사용하기 (Use bind mounts): 바인드 마운트는 호스트 머신의 파일이나 디렉터리를 빌드 컨테이너에 마운트하게 해 줘요. 이미지에 불필요한 레이어가 생겨 빌드가 느려지는 것을 피할 수 있어요.
  • 캐시 마운트 사용하기 (Use cache mounts): 캐시 마운트는 빌드 중 사용할 영속적인 패키지 캐시를 지정하게 해 줘요. 특히 패키지 매니저로 패키지를 설치하는 단계에서 영속 캐시가 빌드 과정을 크게 빨라지게 해요.

이 외에도 다음과 같은 방법이 있어요:

  • .dockerignore 사용: 컨텍스트에서 불필요한 파일을 제외해서 전송 크기를 줄이고 캐시 무효화를 방지해요.
  • COPY보다 RUN 순서 최적화: 자주 변경되지 않는 의존성 설치를 먼저, 자주 바뀌는 소스 복사를 나중에 배치해요.
  • 멀티스테이지 빌드 활용: 빌드 스테이지에서 캐시를 최대한 활용하고 최종 이미지에는 필요한 산출물만 담아요.

각 기법의 구체적인 Dockerfile 예시와 적용 방법은 원본 문서에서 확인할 수 있어요.

더 알아보기 (Learn more)