데브허브 | DEVHUB | [10분 테코톡] 포라의 Docker 빌드 속도 최적화[10분 테코톡] 포라의 Docker 빌드 속도 최적화
- 야구보구 프로젝트는 초기 도커 빌드 시간이 7분으로 전체 CI 시간의 대부분을 차지하여 심각한 병목 현상을 겪었습니다. ⏱️
- 도커 빌드 최적화를 통해 빌드 시간을 1분 30초대로 단축, 무려 82%의 효율성 개선을 달성했습니다. 🚀
- BuildKit은 캐시 사용을 용이하게 하는 도커 빌더로, 순차적 빌드 방식의 캐시 무효화 문제를 해결하는 데 핵심적인 역할을 합니다. 🛠️
- 레이어 캐시 재사용을 위해 Dockerfile 명령 순서를 최적화해야 합니다. 자주 변경되지 않는 무거운 의존성 설치는 앞쪽에, 소스 코드 복사는 뒤쪽에 배치하여 캐시 히트율을 높입니다. 📂
RUN 명령 중 파일 시스템 변경으로 생성되는 데이터를 재사용하기 위해 캐시 마운트(--mount=type=cache)를 활용하여 빌더 내부에 독립적인 캐시 볼륨을 유지할 수 있습니다. 💾
- CI 환경(예: GitHub Actions)에서는 로컬 캐시 재사용이 불가능하므로,
cache-from 및 cache-to 옵션을 사용하여 도커 허브나 GitHub Actions 캐시와 같은 외부 저장소에 원격 캐시를 저장하고 활용해야 합니다. ☁️
- 타겟 서버와 동일한 아키텍처의 러너(예: ARM 서버에는 ARM 러너)를 사용하여 네이티브 빌드를 수행함으로써, QEMU 에뮬레이션으로 인한 빌드 속도 저하를 방지하고 빌드 시간을 크게 단축할 수 있습니다. 🖥️
- 야구보구는 AMD 러너에서 ARM 이미지를 빌드하는 멀티 플랫폼 빌드와 CI 환경에서의 캐시 미사용이 주요 병목이었으며, ARM 러너 사용 및 원격 캐시 적용으로 이를 해결했습니다. ✅