📦 최근 IT 업계에서 '컨테이너'라는 용어가 대세가 되었습니다. 도커(Docker)로 대표되는 컨테이너 기술은 애플리케이션을 가볍고 빠르게 배포할 수 있게 해주는 혁신적인 방법이죠. 하지만 이 마법 같은 컨테이너가 어떻게 만들어지는지 궁금하신가요? 컨테이너 이미지는 단순히 하나의 파일 덩어리가 아니라, 마치 레고 블록처럼 여러 개의 층(Layer)이 쌓여서 만들어집니다. 🧱 이 레이어 구조는 컨테이너 기술의 핵심이자 효율성의 비밀입니다. 이 포스팅에서는 컨테이너 이미지가 생성되는 과정, 파일 시스템의 레이어 구조, 그리고 이 구조가 컨테이너의 성능과 저장 공간 관리에 어떻게 기여하는지 중급 개발자의 시각에서 상세히 분석해 드리겠습니다.
✨ 핵심 원리: '읽기 전용' 레이어와 Union File System의 조합 🛡️
컨테이너 이미지가 효율적이고 빠른 이유의 핵심은 파일 시스템을 여러 개의 독립된 '읽기 전용(Read-Only)' 레이어로 나누어 사용하고, 이 레이어들을 Union File System (합성 파일 시스템) 기술을 이용해 마치 하나의 통합된 디렉토리처럼 보이게 만드는 데 있습니다.
🧱 1. 레이어(Layer)의 불변성과 재사용성
컨테이너 이미지는 Dockerfile에 명시된 각 명령(Instruction)을 실행할 때마다 새로운 레이어를 생성합니다.
- 생성 과정: FROM, RUN, COPY와 같은 각 명령이 실행되면, 이전 레이어와 비교하여 **변경된 파일 시스템의 차이(Diff)**만을 담는 새로운 레이어가 생성됩니다.
- 불변성 (Immutability): 한 번 생성된 레이어는 수정되지 않는 읽기 전용(Read-Only) 상태로 고정됩니다. 이는 **캐싱(Caching)**의 핵심 기반이 됩니다.
- 재사용 (Sharing): 여러 이미지가 동일한 베이스 이미지나 중간 레이어를 공유할 경우, 해당 레이어는 디스크에 한 번만 저장되며, 이 레이어를 공유하는 모든 이미지는 중복 저장 없이 이 파일을 참조합니다. 이는 저장 공간과 네트워크 전송 대역폭을 획기적으로 절약하게 해줍니다.

👉 관련 글 : Kubernetes 클러스터 구성과 배포 자동화
Kubernetes 클러스터 구성과 배포 자동화: 대규모 컨테이너 오케스트레이션의 표준
Kubernetes(K8s) 클러스터의 핵심 아키텍처와 구성 요소를 심도 있게 분석합니다. Control Plane(etcd, API Server)과 Worker Node의 역할 분담, YAML 기반의 선언적 배포 자동화, Service 네트워킹 전략(Ingress), 그리
praymeyer2025.tistory.com
📂 2. Union File System (합성 파일 시스템)의 역할
컨테이너 엔진은 Union File System 기술을 사용하여 여러 개의 독립된 레이어들을 마치 하나의 일관된 파일 시스템 경로처럼 합쳐서(Union) 보여줍니다.
- 작동 방식: UnionFS는 여러 디렉토리(레이어)를 쌓아 올리고, 파일에 접근할 때 가장 위에 있는 레이어부터 차례로 내려가면서 파일을 찾습니다.
- Copy-on-Write (CoW) 메커니즘: 이 메커니즘은 컨테이너가 실행될 때 적용됩니다. 컨테이너가 실행되면 가장 위에 '쓰기 가능한(Writable)' 레이어가 하나 추가됩니다.
- 읽기: 파일에 접근할 때는 하위의 읽기 전용 레이어에서 바로 파일을 읽어옵니다.
- 쓰기/수정: 실행 중인 컨테이너가 파일 시스템에 쓰기(Write)를 시도하거나 기존 파일을 수정하려고 할 때, 해당 파일은 하위 레이어에서 최상위의 **쓰기 가능한 레이어로 복사(Copy)**됩니다. 이후 수정 작업은 복사된 파일에만 적용됩니다.
- 효율성: 이 CoW 덕분에 하위 레이어의 원본 파일은 그대로 유지되며, 컨테이너가 종료될 때 쓰기 가능한 레이어에만 변경사항이 남거나, 혹은 이 쓰기 가능한 레이어 자체가 사라져 이미지의 불변성이 유지됩니다.

⚙️ 3. Dockerfile 명령과 레이어 생성 분석
Dockerfile 내의 각 명령이 어떻게 레이어를 생성하고 캐싱에 영향을 주는지 이해하는 것이 중요합니다.
| Dockerfile 명령 | 레이어 생성 방식 | 캐싱 영향 |
| FROM | 베이스 이미지의 모든 레이어를 가져와 시작합니다. | 캐싱 시작점. 베이스 이미지가 변경되지 않으면 재사용됨. |
| RUN | 명령 실행 결과 파일 시스템의 변경 사항을 단일 레이어로 커밋합니다. | 실행 중인 명령이나 변경된 파일의 해시(Hash)에 의해 캐싱 여부가 결정됨. |
| COPY/ADD | 지정된 파일들을 이미지에 복사하는 새로운 레이어를 만듭니다. | 복사할 파일의 내용(Checksum)이 변경되면 캐시는 무효화되고 새 레이어가 생성됨. |
| CMD/ENTRYPOINT | 메타데이터만 변경하므로, 파일 시스템 레이어를 생성하지 않습니다. | 파일 시스템 레이어 캐싱에는 영향을 미치지 않음. |
👉 성능 팁: Dockerfile을 작성할 때, RUN 명령을 최소화하고 여러 명령을 하나의 RUN 명령으로 묶어(예: RUN apt-get update && apt-get install -y ...) 레이어 수를 줄이는 것이 이미지 크기와 빌드 속도를 최적화하는 일반적인 방법입니다.
💾 4. 이미지 크기 관리 및 전송 효율
레이어 구조의 가장 큰 실질적 이점은 이미지의 관리와 전송에서 나타납니다.
- 증분 전송 (Delta Transfer): 이미지를 컨테이너 레지스트리(예: Docker Hub)로 푸시(Push)하거나 풀(Pull)할 때, 이미 로컬에 존재하는 레이어는 전송되지 않고 변경된 레이어(Delta)만 전송됩니다. 이는 네트워크 대역폭 사용을 최소화합니다.
- 태깅과 참조: 서로 다른 태그를 가진 이미지라도 공통 레이어는 공유하고, 태그에 따라 상위의 다른 레이어들만 참조합니다. 예를 들어, myapp:v1.0과 myapp:v1.1이 있다면, v1.1은 v1.0의 모든 레이어를 재사용하고 맨 위의 변경된 레이어만 추가하게 됩니다.

✅ 요약
| 🧱 구성 요소 | 🔑 핵심 기능 | ⚙️ 주요 이점 |
| 읽기 전용 레이어 | Dockerfile 명령어 별 파일 시스템 차이(Diff) 저장 | 불변성 유지, 캐싱 기반 제공, 재사용성 극대화 |
| 쓰기 가능 레이어 | 컨테이너 실행 시 동적으로 추가되는 최상위 층 | 실행 중 발생하는 변경사항(로그, 데이터 생성) 기록 |
| UnionFS/CoW | 여러 레이어를 하나의 FS처럼 통합하고 쓰기 시에만 복사 | 저장 공간 최적화, 이미지 불변성 보장 |
레이어 구조와 Union File System을 이해하는 것은 컨테이너 환경에서 빌드 속도를 높이고, 이미지 크기를 관리하며, CI/CD 파이프라인의 효율을 극대화하는 데 필수적인 지식입니다.
📚 출처
- Docker Documentation: Understand images, containers, and storage drivers
- Operating Systems Concepts: Union File Systems and Copy-on-Write
- Linux Kernel Architecture: OverlayFS, AUFS (UnionFS 구현체)
👉 함께 보면 도움되는 글 : VPC가 정확히 뭔가? 클라우드의 ‘가상 데이터센터’ 구조
'🚀 IT 미래와 전략 (Strategy) > ☁️ 클라우드 & 인프라' 카테고리의 다른 글
| 클라우드 구조란 무엇인가? AWS로 쉽게 이해하는 핵심 개념 정리 (0) | 2026.03.16 |
|---|---|
| 온프레미스와 클라우드 차이점 총정리, 뜻부터 장단점까지 (0) | 2026.03.15 |
| VPC가 정확히 뭔가? 클라우드의 ‘가상 데이터센터’ 구조 : 나만의 안전하고 독립된 인터넷 공간 만들기 (0) | 2025.12.16 |
| 클라우드 리전과 존, 왜 나눠져 있을까? : 지진에도 끄떡없는 데이터 센터의 비밀 (0) | 2025.12.15 |
| 클라우드 보안 환경에서 나타나는 주요 흐름 정리 (0) | 2025.11.27 |