[Docker] 도커 공식문서로 배우기 (6): 이미지 레이어 구조, 유니온 파일 시스템, chroot

2026. 1. 13. 18:56·개발

도커를 이해하는 데 있어 가장 중요한 개념 중 하나가 바로 이미지 레이어(Image Layer) 입니다.
도커 이미지는 단일 파일이 아니라, 여러 개의 레이어가 쌓인 구조로 만들어집니다.

이 레이어 구조 덕분에 도커는 저장 공간을 효율적으로 사용하고, 빠른 배포와 실행을 하며, 컨테이너를 격리합니다.
이 글에서는 도커 이미지 레이어가 어떻게 구성되고, 유니온 파일 시스템과 chroot가 어떤 역할을 하는지를 자세히 알아봅니다.


이미지가 여러 레이어로 구성된다는 것

도커 이미지는 여러 개의 레이어로 나누어 만들어집니다.
각 레이어는 Dockerfile의 한 줄 한 줄이 만든 결과물이라고 이해하면 쉽습니다.

예를 들어 자바 애플리케이션 이미지를 간단히 구성해 보면 다음과 같은 레이어 구조가 됩니다.

  • Ubuntu 레이어
  • JDK 설치 레이어
  • 애플리케이션 실행에 필요한 라이브러리 레이어
  • 빌드된 JAR 파일 레이어
  • 컨테이너 실행 명령 레이어

이처럼 공통적으로 사용하는 부분을 하위 레이어로 두고, 자주 변경되는 애플리케이션 레벨은 상위 레이어로 둡니다.
이 구조가 이후 설명할 이미지 재사용과 연결됩니다.

 

이미지 레이어는 어떻게 저장되고 사용될까?

각 레이어는 도커 이미지 다운로드 시점에 파일 시스템의 개별 디렉토리에 각각 압축이 해제되어 저장됩니다.

이 때, 같은 베이스 이미지를 사용하는 이미지가 여러 개인 경우에도 해당 레이어는 한 번만 저장합니다.

그리고 컨테이너를 실행하는 순간, 자기들이 필요한 레이어들을 찾아 순서대로 쌓아 올립니다.

포인트는 레이어를 쌓을 때는 물리적인 복사가 아닌, 논리적인 참조로만 이루어진다는 점입니다.

 

이 덕분에 디스크 사용량이 크게 줄어들고, 이미지 다운로드 속도도 빨라집니다.

이 구조를 가능하게 하는 핵심 기술이 바로 유니온 파일 시스템(Union File System) 입니다.

 

유니온 파일 시스템이란?

유니온 파일 시스템은 여러 개의 디렉토리를 하나의 디렉토리처럼 보이게 만드는 파일 시스템 기술입니다.
동작 방식은 다음과 같습니다.

  1. 여러 개의 이미지 레이어를 아래에서 위로 차곡차곡 쌓습니다.
  2. 모든 하위 레이어는 읽기 전용(Read Only)으로 합니다.
  3. 가장 위의 한 레이어만 쓰기 가능(Read Write)으로 합니다.

파일 수정은 어떻게 처리될까? (Copy-on-Write)

컨테이너 실행 중에 하위 레이어에 있는 파일을 수정해야 하는 상황이 생길 수 있습니다.

이 경우 도커는 하위의 읽기 전용 레이어의 파일을 최상단의 쓰기 가능한 레이어로 복사하고, 복사된 파일을 수정합니다.

즉, 변경 사항은 항상 최상위 레이어에서만 일어납니다. 이를 Copy-on-Write(COW) 방식이라고 합니다.

 

이 구조 덕분에 원본 이미지 레이어는 절대 변경되지 않고, 동일한 이미지로부터 여러 컨테이너를 동시에 실행할 수 있습니다.


컨테이너 실행 시, 격리는 어떻게 이루어질까?

이렇게 유니온 파일 시스템을 통해 컨테이너 전용 루트 디렉토리 구조가 만들어집니다.

여기서 도커 컨테이너의 중요한 특징 중 하나를 짚고 넘어가야 합니다.
컨테이너는 호스트와 분리된 것처럼 보이도록 격리된 환경에서 실행됩니다.

이 격리를 이해하는 핵심 개념 중 하나가 바로 chroot 입니다.

chroot란 무엇인가?

chroot는 현재 실행 중인 프로세스와 그 자식 프로세스들의 루트 디렉토리(/)를 변경하는 작업 또는 명령어를 의미합니다.

특정 디렉토리를 어떤 프로세스의 루트로 지정하면, 그 프로세스는 지정된 디렉토리 밖으로 접근할 수 없게 됩니다.

이 상태를 chroot jail이라고 부릅니다.

도커에서 chroot 개념의 활용

컨테이너가 시작될 때,

유니온 파일 시스템으로 여러 레이어를 통합해 만든 디렉토리를 해당 컨테이너의 루트(/)인 것처럼 설정합니다.

그 결과 컨테이너 내부의 프로세스는 자신에게 할당된 파일 시스템만 볼 수 있고,

호스트의 다른 파일이나 다른 컨테이너의 파일에는 접근할 수 없습니다.

 

※ 실제 도커의 격리는 chroot뿐만 아니라
Linux namespace, cgroup과 함께 동작하지만,
파일 시스템 관점에서의 기본 개념을 이해하는 데 chroot는 중요한 역할을 합니다.

'개발' 카테고리의 다른 글

[Docker] 도커 공식문서로 배우기 (4): 컨테이너, 이미지, 리포지토리, 레지스트리  (0) 2026.01.11
[Docker] 도커 공식문서로 배우기 (3): 도커 이미지 생성과 리포지토리에 푸시  (0) 2026.01.10
[Docker] 도커 공식문서로 배우기 (2): 컨테이너에서 개발하기  (0) 2026.01.09
[Docker] 도커 공식문서로 배우기 (1): 첫 컨테이너 실행  (0) 2026.01.08
글 쓰는 개발자, 개발자가 글을 써야하는 이유  (0) 2025.11.25
'개발' 카테고리의 다른 글
  • [Docker] 도커 공식문서로 배우기 (4): 컨테이너, 이미지, 리포지토리, 레지스트리
  • [Docker] 도커 공식문서로 배우기 (3): 도커 이미지 생성과 리포지토리에 푸시
  • [Docker] 도커 공식문서로 배우기 (2): 컨테이너에서 개발하기
  • [Docker] 도커 공식문서로 배우기 (1): 첫 컨테이너 실행
devracoon
devracoon
  • devracoon
    개발하는 너굴맨
    devracoon
  • 전체
    오늘
    어제
    • 분류 전체보기 (10) N
      • 개발 (6)
      • 언어&프레임워크 (0)
      • 자료구조&알고리즘 (1)
      • 컴퓨터구조 (0)
      • 데이터베이스 (0)
      • 네트워크 (2) N
      • 클라우드컴퓨팅 (0)
      • 티스토리 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    티스토리
    docker
    short-url
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
devracoon
[Docker] 도커 공식문서로 배우기 (6): 이미지 레이어 구조, 유니온 파일 시스템, chroot
상단으로

티스토리툴바