인프라/Docker
[도커] 쌓아보며 익히는 Docker Layer 개념
Hun's blog
2026. 5. 22. 09:03
회사 업무를 하다 보면, Docker 이미지가 기대한 대로 재사용되지 않는 순간이 있다.
이번에 내가 겪은 것도 비슷한 문제였다. 공통으로 사용하는 core 이미지를 만들고, 그 위에 서비스별 수정을 더해 여러 개의 이미지를 운영하고 있었는데, 어느 순간부터 이 공통 core가 재사용되지 않고 pull하는 데 시간이 오래 걸렸다.
공통 core의 매니페스트를 열어보니, 특정 시점부터 같은 소스코드에서 만들어진 이미지인데도 layer의 digest가 달라진 것을 확인할 수 있었다.
그래서 디버깅을 하는 김에 Docker Image Layer에 대해 다시 공부해보기로 했다.
먼저 베이스 이미지를 만들고, 그 위에 작은 수정을 더한 뒤 Docker Hub에 올려서 pull할 때 layer가 재사용되는지 직접 확인해보려 한다.
기준이 되는 베이스 이미지 - ubuntu:22.04
ubuntu:22.04 이미지를 pull 하고 layer를 확인할 예정이다.
#image pull
docker pull ubuntu:22.04
#inspect로 이미지의 메타데이터 확인
docker inspect ubuntu:22.04
RootFS.Layers에 sha256 으로 시작하는 레이어가 있는 것을 볼 수 있다.
- sha 256 으로 시작하는 문자열들은 레이어를 SHA-256으로 해시한 값이 256비트(64자리 16진수)로 표현된다
- 즉, 레이어에 1바이트에 변경만 있어도 다른 문자열로 표현된다.

수정된 이미지 - my-ubuntu:latest
ubuntu:22.04를 베이스 이미지로 직접 수정하여 빌드하고자 한다.
# BaseImage
FROM ubuntu:22.04
RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
RUN apt-get update && apt-get install -y vim && rm -rf /var/lib/apt/lists/*
#command
docker build -t my-ubuntu:latest
Dockerfile 을 통해 빌드할 이미지의 설명서를 만들었고 빌드를 진행했다.

레이어가 1개에서 3개로 늘어났고 특히 첫번째 레이어는 유지가 되면서 두개가 추가된 점을 확인할 수 있다.
즉, docker pull ubuntu:22.04 를 하면서 미리 pull 된 layer 가 재사용된 것이다.
이미지 pull 시에 Layer 재사용 확인
새로 만든 이미지를 docker hub 에 올렸고 ubuntu:22.04 를 사전에 pull 하기 전 후로 my-ubuntu 이미지의 pull 과정을 비교해본다.
ubuntu:22.04 pull 하기 전

- 기존 3개의 레이어들이 전부 다운로드 되고 있다.
ubuntu:22.04 pull 한 후

- 첫번째 레이어는 Already exists 로 표현되면서 재사용 되는 모습을 보여준다
참고
- pull 로그에 나오는 12자리 문자열은 압축된 layer digest의 앞 12자리다.
- `docker inspect` RootFS.Layers의 해시는 압축 해제된 layer(DiffID) 기준이라 값이 다르다.
- `docker manifest inspect` 하면 pull 로그와 동일한 압축 기준 digest 전체를 볼 수 있다.