[Docker] 이미지 레이어 구조

소영·2025년 4월 8일

Docker

목록 보기
2/3
post-thumbnail

이미지

Docker에서 이미지(Image)는 컨테이너를 생성하기 위한 설계도이며,
여러 개의 레이어(layer)로 구성되어 있다.

각 레이어는 이전 레이어 위에 쌓이는 계층적인 구조로,
파일 시스템의 변화(추가/삭제/수정)를 담고 있다.

🪜 레이어 구조

이미지는 가상 머신에 비해서는 가볍지만
컨테이너를 생성하기 위한 모든 정보를 가지고 있기 때문에 용량이 작지만은 않다.

이때 매번 이미지를 처음부터 다시 빌드하고 다운로드 받는다면,
시간도 오래 걸리고 디스크도 낭비된다.

그래서 도커는 이미지를 레이어 구조로 관리하여
중복된 부분은 캐시로 재사용하고, 변경된 부분만 새로 빌드하는 방식으로
전체 이미지 빌드 시간을 단축하고 디스크 사용량을 줄이며 최적화한다.

한 레이어가 변경된다면, 이미지의 모든 부분을 변경하는 게 아니라
변경된 레이어의 위 레이어만 다시 빌드하면 된다.

모든 레이어는 읽기 전용의 불변 레이어이고
새로운 변경 사항은 새로운 레이어로 추가한다.

베이스 레이어

첫 번째 레이어는 운영 체제의 기본 파일 시스템을 포함하며
다른 모든 레이어의 기반이 된다.

FROM ubuntu:22.04: 우분투 OS의 커널을 바탕으로 한다는 의미

중간 레이어

Dockerfile에서 RUN, COPY, ADD
명령어 하나 하나마다 하나의 레이어가 생성된다.

예를 들어, 아래와 같이 이미지 레이어가 쌓였을 때

FROM ubuntu:20.04 → 첫 번째 레이어
COPY . /app → 두 번째 레이어
RUN npm install → 세 번째 레이어
...

RUN 단계가 변경되면, 그 이전 단계인 FROM ubuntu:20.04와 COPY . /app은 캐시를 사용하고,
변경된 RUN 단계부터 그 이후 명령어만 다시 빌드하게 된다.

그렇기 때문에 가장 자주 바뀌는 명령어를 마지막 레이어에 두는 것이 좋다.


최종 컨테이너는 이 모든 레이어를 합쳐서 하나의 통합된 파일 시스템처럼 보여주는 방식으로 실행된다.

✅ 요약

  • Docker 이미지는 여러 개의 레이어로 구성된다.
  • 레이어는 계층적으로 쌓이는 파일 시스템이다.
  • 캐싱 덕분에 이미지 빌드 속도와 디스크 사용량이 최적화된다.
  • 변경된 레이어만 재빌드되므로 효율적인 개발 및 배포가 가능하다.
profile
블로그 이전: https://syleeblog.tistory.com/

0개의 댓글