Docker 이미지는 본질적으로 단일 파일이 아니라 불변의 읽기 전용 파일 시스템 계층의 스택입니다. 각 Dockerfile 지침은 새로운 계층을 생성하며, FROM, RUN, COPY, ENV와 같은 지침이 이 계층 구조에 기여합니다. 이러한 계층은 내용 주소 지정이 가능하며 재사용될 수 있어 효율성과 빌드 속도를 크게 향상시킵니다. docker build를 실행하면 Docker CLI가 빌드 컨텍스트를 데몬으로 보내고, BuildKit이 빌드 프로세스를 조정합니다. BuildKit은 Dockerfile을 순차적으로 읽고 캐시된 계층을 확인하여 빌드를 최적화합니다. 계층 캐싱은 중요한 기능으로, 변경 사항이 계층과 그 이후의 모든 계층을 무효화하여 빌드 시간에 영향을 미칩니다. 빌드를 최적화하려면 덜 휘발성인 지침(종속성)을 Dockerfile 앞쪽에 배치하십시오.
BuildKit은 권장되는 빌드 엔진으로, 레거시 빌더에 비해 속도, 병렬 실행 및 고급 캐싱이 향상되었습니다. 멀티 스테이지 빌드는 불필요한 중간 아티팩트를 폐기하여 더 작은 이미지를 생성하는 강력한 기법입니다. 이러한 최적화된 빌드는 불필요한 파일을 폐기하여 배포 속도와 보안을 향상시킵니다. 느린 빌드를 디버깅하기 위한 팁에는 Dockerfile 순서 재지정, `--no-cache` 플래그 사용, 멀티 스테이지 빌드 및 .dockerignore를 사용하여 이미지 크기 줄이기가 포함됩니다. Docker는 Union File System(OverlayFS와 같은)을 사용하여 계층을 결합하여 컨테이너에 결합된 가상 파일 시스템을 제공합니다. 계층 구성 및 캐싱을 마스터하는 것이 빠르고 예측 가능한 Docker 빌드를 만드는 열쇠입니다.
dev.to
Dockerfile & Image Build Internals: From Layers to Lightning-Fast Builds
