2024. 11. 20. 11:30ㆍDocker
Overlay Driver란?
Overlay Driver는 Linux 커널의 OverlayFS(Overlay Filesystem)를 기반으로 한 컨테이너 스토리지 드라이버입니다. Docker, Podman과 같은 컨테이너 플랫폼에서 사용되며, 컨테이너의 이미지 레이어를 효율적으로 관리하는 데 활용됩니다.
Overlay Driver는 여러 파일 시스템 레이어를 겹쳐서 하나의 통합 파일 시스템처럼 작동하도록 설계되었습니다. 이를 통해 컨테이너마다 독립적인 파일 시스템을 제공하면서도, 디스크 사용량을 줄이고 성능을 향상시킬 수 있습니다.
OverlayFS의 핵심 개념
OverlayFS는 읽기 전용 레이어와 읽기-쓰기 레이어를 조합하여 동작합니다:
Lowerdir (읽기 전용 레이어):
- 기본 이미지 파일 시스템입니다.
- 변경되지 않는 데이터(기본 OS 파일 등)가 여기에 저장됩니다.
Upperdir (읽기-쓰기 레이어):
- 컨테이너의 변경 사항이 저장되는 위치입니다.
- Lowerdir에 있던 파일을 수정하면 Upperdir에 복사되고, 수정된 파일은 Upperdir에 저장됩니다. 이를 Copy-on-Write(CoW)라고 합니다.
Merged View (통합 파일 시스템):
- Lowerdir과 Upperdir를 합쳐 하나의 통합된 파일 시스템처럼 보여줍니다.
Workdir:
- OverlayFS가 파일 시스템 작업을 처리하는 데 사용하는 임시 디렉토리입니다.
Overlay Driver의 작동 방식
컨테이너가 실행될 때, Docker는 이미지를 여러 레이어로 분리하여 저장합니다. Overlay Driver는 이 레이어들을 OverlayFS를 사용해 관리합니다.
이미지 레이어:
- Docker 이미지는 여러 개의 읽기 전용 레이어로 구성됩니다.
- 각 레이어는 Lowerdir로 사용됩니다.
컨테이너 레이어:
- 컨테이너는 이미지 위에 추가된 읽기-쓰기 레이어(Upperdir)를 가집니다.
- 컨테이너가 데이터를 수정하거나 생성하면 Upperdir에 저장됩니다.
통합 파일 시스템:
- Lowerdir(읽기 전용)과 Upperdir(읽기-쓰기)을 병합하여 컨테이너가 파일 시스템을 하나로 보도록 합니다.
Overlay Driver의 주요 특징
Copy-on-Write(CoW):
- 읽기 전용 파일을 수정할 때 Upperdir로 복사한 후 수정합니다.
- 이를 통해 효율적으로 디스크 공간을 사용하고, 원본 이미지를 보호합니다.
효율성:
- 이미지 레이어를 공유하여 여러 컨테이너에서 동일한 파일을 중복 저장하지 않습니다.
- 디스크 사용량과 I/O 작업을 줄입니다.
속도:
- 레이어 구조를 활용해 파일 시스템 동작을 빠르게 처리합니다.
- 커널 수준에서 동작하므로 성능이 뛰어납니다.
유연성:
- 여러 레이어를 겹쳐 사용할 수 있어, 다양한 컨테이너 작업에 적합합니다.
Overlay Driver의 동작 예
기본 이미지:
- 예: Ubuntu 이미지(
/bin/bash
,/usr/bin/apt
등). - Lowerdir에 저장됩니다.
- 예: Ubuntu 이미지(
컨테이너 실행:
- 컨테이너가 실행되면 읽기-쓰기 레이어(Upperdir)가 생성됩니다.
파일 수정:
- 컨테이너가
/etc/hosts
파일을 수정하면, 원본 파일(/etc/hosts
)은 Lowerdir에 남아 있고, Upperdir에 복사된 뒤 수정됩니다.
- 컨테이너가
파일 생성:
- 새로운 파일은 Upperdir에 직접 생성됩니다.
Overlay Driver의 장점
효율적인 디스크 사용:
- 동일한 이미지를 사용하는 여러 컨테이너가 레이어를 공유하여 디스크 공간 절약.
빠른 컨테이너 생성:
- 이미지 레이어를 재사용하여 컨테이너 생성 속도를 크게 향상.
확장성:
- 대규모 컨테이너 환경에서도 적합.
파일 시스템 독립성:
- 호스트의 파일 시스템 종류에 구애받지 않고 작동 가능(일반적으로 ext4, xfs 등에서 사용).
Overlay Driver의 단점
레이어 제한:
- OverlayFS는 최대 128개의 레이어를 지원하지만, 너무 많은 레이어는 성능 저하를 유발할 수 있습니다.
I/O 성능:
- Copy-on-Write 작업이 빈번할 경우 성능 저하가 발생할 수 있습니다.
호환성 제한:
- 일부 오래된 커널 버전에서는 OverlayFS가 지원되지 않을 수 있습니다.
- OverlayFS는 NFS(Network File System)와 같은 원격 파일 시스템에서는 동작하지 않습니다.
Overlay Driver와 다른 Docker 스토리지 드라이버 비교
특징 | Overlay/Overlay2 | AUFS | Device Mapper | Btrfs |
---|---|---|---|---|
레이어 관리 | 빠르고 효율적 | 유사하지만 오래된 기술 | 블록 장치 수준 관리 | Copy-on-Write 파일 시스템 |
성능 | 빠름 | 중간 | 느림 | 중간 |
지원 여부 | 최신 Docker 기본 드라이버 | 구형, 비권장 | 지원되지만 비권장 | 제한적 (Btrfs 필요) |
운영 환경 | 일반적인 모든 환경 | 오래된 배포판 | 대규모 데이터 작업에 적합 | SSD 및 특정 환경에서 적합 |
Overlay Driver의 주요 명령어
Docker 스토리지 드라이버 확인
docker info | grep Storage
출력 예:
Storage Driver: overlay2
사용 중인 레이어 확인
docker inspect <container-id>
저장소 경로 확인
docker info | grep "Docker Root Dir"
출력 예:
Docker Root Dir: /var/lib/docker
레이어 상태 확인
- 컨테이너 파일 시스템의 레이어를
/var/lib/docker/overlay2
에서 확인할 수 있습니다.
- 컨테이너 파일 시스템의 레이어를
Overlay Driver가 적합한 환경
대규모 컨테이너 환경:
- 여러 컨테이너가 동일한 이미지를 사용할 경우 효율적.
속도가 중요한 환경:
- 빠른 컨테이너 시작과 관리가 요구되는 경우.
리눅스 최신 커널 기반 환경:
- 최신 커널에서 최적의 성능을 발휘.
Overlay Driver는 컨테이너 기술에서 효율적인 스토리지 관리와 성능을 제공하는 핵심적인 구성 요소입니다. 레이어 기반 관리와 Copy-on-Write 특성을 통해 디스크 공간을 절약하고, 컨테이너 생성 및 실행 속도를 높입니다. 최신 리눅스 환경에서 안정적이고 빠르게 동작하며, 대다수의 Docker 및 Kubernetes 워크로드에 적합합니다.
'Docker' 카테고리의 다른 글
alpine (0) | 2024.11.21 |
---|---|
Remove Container & Docker Image (0) | 2024.11.20 |
ext4 파일 시스템 (0) | 2024.11.20 |
MNT 네임스페이스 (0) | 2024.11.20 |
AWS EC2 Docker 설치 및 Docker 권한 추가 (0) | 2024.11.18 |