도커 이미지 레이어 - 2 : Dockerfile과 이미지 레이어 관계

2-1. 도커 이미지 레이어 생성

Dockerfile 명령어 == 이미지 레이어 수

FROM busybox:1.34.1      # [1/2]
RUN echo "helloworld"    # [2/2]

2-2. docker history로 이미지 레이어 갯수 확인

docker history example:v1
  • example:v1총 3개의 레이어로 구성됨
    • busybox 이미지 레이어 2개
    • RUN echo "helloworld"로 생긴 1개

2-3. 이미지 레이어 크기

각 레이어는 최소 0바이트 이상

  • docker history: empty_layer 포함 모든 레이어 표시
  • docker inspect: empty_layer는 생략 파일 시스템에 변화가 생길 때만 레이어 크기가 커짐
    RUN, COPY, ADD

컨테이너 파일 시스템에, 영향을 주는 항목들만, 이미지 레이어로 추가한다.


2-4. 이미지 레이어 체인(chain)

레이어는 체인처럼 연결된 구조이다.(부모 → 자식 관계)

  • Docker는 새 레이어를 만들 때 이전 레이어를 부모로 참조한다.
  • 각 레이어는 parent라는 메타데이터를 통해 상하 관계를 가짐

example:v1레이어 확인

  • 현재 도커 내부 디렉토리에는 b737…, ca47… 레이어가 있다.
    • b737… 레이어가 ca47… 레이어를 부모로 가지고 있다.

2-5. 이미지 ID vs 레이어 ID

도커를 다루다 보면 이미지 ID와 레이어 ID가 혼동될 수 있다.

이미지 ID

전체 이미지의 고유 ID

  • docker images 명령어로 확인한 이미지 ID
  • /var/lib/docker/.../imagedb/sha256/에 위치한다.

레이어 ID

파일 시스템의 변경사항이 담긴 조각 (diff layer)

  • /var/lib/docker/.../layerdb/sha256/에 위치한다.

이미지 ID는 여러 레이어를 조합해 생성된 최종 결과물이다.

이때 사용된 레이어들의 ID는 이미지의 메타데이터에 명시되어 있다.


출처