Dockerfile에서 RUN은 단순한 실행 명령이 아닙니다.
이미지를 빌드하는 과정에서 실행되고, 그 결과가 하나의 레이어로 저장되는 명령어입니다.
예를 들어:
RUN npm ci
이 명령은 이미지 빌드 시 실행되고,
설치 결과가 새로운 레이어로 저장됩니다.
여기서 중요한 개념이 하나 있습니다.
RUN 한 줄 = 레이어 하나
1. RUN을 여러 줄로 쓰면
RUN npm ci
RUN npm run build
이 경우:
- 첫 번째 RUN → 레이어 1 생성
- 두 번째 RUN → 레이어 2 생성
즉, 중간 상태(npm ci만 끝난 상태)도 하나의 레이어로 저장됩니다.
2. &&로 묶는 이유
RUN npm ci && npm run build
이렇게 작성하면:
- RUN 한 번 실행
- 레이어 하나만 생성
즉,
중간 상태 없이, 최종 결과만 하나의 레이어로 저장됩니다.
3. 왜 레이어를 줄이는 게 중요한가?
레이어가 많아질수록:
- 이미지 용량 증가 가능성
- 캐시 관리 복잡성 증가
- 중간 불필요 상태 보존
비유하면 이렇습니다.
RUN을 나눠 쓰는 건 “중간 공사 단계까지 모두 사진 찍어 저장하는 것”
&&로 묶는 건 “완공된 상태만 저장하는 것”
4. &&의 또 다른 역할
&&는 앞 명령이 성공해야 다음 명령을 실행합니다.
npm ci && npm run build
- npm ci 실패 → npm run build 실행 안 함
- 즉시 빌드 중단
안전성과 일관성을 보장합니다.
5. 정리
- RUN은 이미지 빌드 시 실행되는 명령
- RUN 한 줄당 하나의 레이어 생성
- &&로 묶으면 하나의 레이어로 통합
- 실패 시 즉시 중단되어 안정성 확보
RUN은 빌드 단계에서 레이어를 만드는 명령이며, &&로 묶는 이유는 레이어 수를 줄이고 안정적인 빌드를 만들기 위함입니다.
'컨테이너·워크플로우 자동화 > DocKer 기본 및 활용' 카테고리의 다른 글
| COPY(명령어)에서 / 유무에 따른 디렉토리 복사 차이 (0) | 2026.02.17 |
|---|---|
| Docker 컨테이너가 즉시 종료되는 이유와 디버깅을 위한 ENTRYPOINT 활용 방법 (0) | 2026.02.17 |
| Docker 빌드 최적화를 위한 .dockerignore 활용 전략 (0) | 2026.02.17 |
| Docker COPY 명령어의 동작 원리와 빌드 컨텍스트 이해 (0) | 2026.02.17 |
| Windows + Docker Desktop + WSL2 구조 이해하기 (0) | 2026.02.17 |