Dev / App

Docker - 실습으로 알아보는 Docker Image Layer 구조

Docker Layer

5 min read
Docker - 실습으로 알아보는 Docker Image Layer 구조

Layer

Docker Layer vs Container Layer

Why❓

Container Layer

1. Docker Layer 실습

busybox:latest 이미지를 통해 위 내용을 짚어보도록 하겠습니다.

#image pull
docker pull busybox:latest
#inspect를 통해 busybox 이미지 metadata 확인
docker inspect busybox:latest
텍스트, 폰트, 스크린샷이(가) 표시된 사진

AI 생성 콘텐츠는 정확하지 않을 수 있습니다.

Docker Layer Deep dive🌊

도커 이미지 레이어의 정보는 일반적으로 /var/lib/docker/image/overlay2/layerdb/sha256 디렉터리에 저장되며, 내부에는 inspect로 확인했던 것과 동일한 layer 정보가 담겨 있습니다.

2. Container Layer 실습

컨테이너 레이어는 쓰기 작업이 가능하다고 했었으며, 정말 가능한지 컨테이너의 tmp 디렉토리에 간단한 파일을 만드는 실습을 통해서 확인해보도록 하겠습니다.

#쉘 사용이 가능하도록 busybox 실행
docker run -it --rm busybox sh
텍스트, 스크린샷, 폰트이(가) 표시된 사진

AI 생성 콘텐츠는 정확하지 않을 수 있습니다.

❓그런데, 86bed95... 레이어는 무엇일까요?
❗해당 레이어가 바로 컨테이너 레이어입니다.
현재 docker run을 통해서 컨테이너를 실행하고 있기에, 쓰기 작업이 가능한 컨테이너 레이어가 생성되어 있습니다.

쓰기 작업 내용 확인

레이어 구조 시각화

busybox 이미지├── sha256:068f... ← lowerdir (읽기 전용)
컨테이너 (ID: d756a67a66fe)
├── lowerdir = 이미지(도커) 레이어├── upperdir = overlay2/86bed95.../diff
└── merged = upper + lower

3. 컨테이너 실행 방식(interactive vs detached) 차이

위 실습을 하다가 흥미로운 점을 발견했습니다.

docker run -it ... 와 같이 interactive 방식으로 컨테이너를 쉘을 사용할 수 있도록 실행한 후, 컨테이너 내부가 아닌, 호스트(외부)의 overlay2 디렉터리의 컨테이너 레이어에 쓰기 작업을 하면 컨테이너 내부에 쓰기 내용이 연동될까? 라는 궁금증이 생겼습니다.

docker run -dit ... 로 실행한다면?

왜 이런 현상이 나타날까?

찾아본 바로는 -it의 경우 overlayfs가 짧은 시간으로(daemon이 아닌 상태로) 마운트 되고, 이후 내부 캐시가 고정되어있어서 반영되지 않은 것인가라고 생각됩니다.

Share This Post

Check out these related posts

개발팀의 애자일 도입 이야기2

개발팀의 애자일 도입 이야기 1

Lambda@Edge 고급 로깅 제어 기능