Docker이미지와 빌드

build context와 cache

Docker 빌드 속도와 이미지 효율을 좌우하는 build context와 레이어 캐시의 동작 원리를 정리합니다.

마지막 수정 2026년 3월 19일

기본 패턴

dockerfile
FROM node:22-alpine
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
COPY . .
RUN npm run build

설명

  • docker build .의 마지막 .은 현재 디렉터리를 build context로 보낸다는 뜻입니다.
  • builder는 이 context 안의 파일만 볼 수 있으므로, 불필요한 파일을 줄이는 .dockerignore가 중요합니다.
  • Docker는 각 지시어를 레이어처럼 취급해, 이전 단계 결과를 캐시로 재사용할 수 있으면 다시 만들지 않습니다.
  • 그래서 의존성 파일(package.json, requirements.txt)을 먼저 복사하고 설치한 뒤, 자주 바뀌는 앱 소스를 나중에 복사하는 패턴이 흔합니다.
  • 캐시를 이해하지 못하면 빌드가 매번 느려지고, 이미지에 테스트 산출물이나 로컬 캐시 같은 불필요한 파일까지 들어가기 쉽습니다.

짧은 예제

text
좋은 순서:
1. package.json 복사
2. npm ci
3. 소스 코드 복사

나쁜 순서:
1. 소스 전체 복사
2. npm ci

소스 한 줄만 바뀌어도 의존성 설치 캐시가 깨질 수 있음

빠른 정리

개념의미
build context빌드에 전달되는 파일 범위
.dockerignorecontext에서 제외할 파일 목록
레이어 캐시바뀌지 않은 빌드 단계를 재사용
복사 순서캐시 효율에 직접 영향
흔한 최적화의존성 파일 먼저, 소스는 나중에 복사

주의할 점

.git, node_modules, 빌드 산출물, 테스트 결과를 그대로 context에 보내면 빌드가 느려지고 이미지도 불필요하게 커집니다. Dockerfile과 .dockerignore는 항상 함께 설계하는 편이 좋습니다.

참고 링크

2 sources