이전 글에서 정리했던 것처럼 Docker에는 크게 두 종류의 “스토리지 관련 컴포넌트”가 있습니다.
- Storage Driver(스토리지 드라이버): 이미지/컨테이너의 레이어 파일 시스템을 관리
- Volume Driver(볼륨 드라이버, 플러그인): 컨테이너의 영구 데이터(Volume) 를 관리
여기서 중요한 포인트는 이겁니다.
컨테이너 레이어(overlay2 등)와 볼륨(/var/lib/docker/volumes 아래 데이터)은 같은 담당자가 아니다.
컨테이너 레이어는 Storage Driver, 볼륨은 Volume Driver가 맡는다.
1) Storage Driver가 하는 일 (이미지/컨테이너 레이어)
Storage Driver는 Docker의 “계층형(레이어) 구조”를 가능하게 해줍니다.
- 이미지 레이어(읽기 전용) 관리
- 컨테이너 실행 시 writable layer 생성
- Copy-on-Write(파일 수정 시 copy-up) 처리
- 여러 레이어를 합쳐 하나의 파일 시스템처럼 보이게 구성
대표적으로 리눅스에서 많이 보는 값이:
docker info | grep -i "Storage Driver"
# Storage Driver: overlay2
2) Volume Driver가 하는 일 (영구 데이터)
컨테이너는 삭제하면 writable layer가 날아가므로, DB 데이터 같은 것은 컨테이너 레이어에 두면 안 됩니다.
이때 쓰는 게 Volume이고, 이 Volume을 실제로 생성/연결/관리하는 주체가 Volume Driver(플러그인) 입니다.
기본 볼륨 드라이버: local
Docker 설치 직후 기본으로 제공되는 드라이버는 보통 local이고, 이 경우 볼륨 데이터는 호스트의 아래 경로에 저장됩니다.
/var/lib/docker/volumes/<볼륨이름>/_data
확인:
docker volume create mysql_data
docker volume inspect mysql_data
# Mountpoint: /var/lib/docker/volumes/mysql_data/_data
컨테이너에 붙이면:
docker run -d --name mysql \
--mount type=volume,src=mysql_data,dst=/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=pass \
mysql:8
여기서 src=mysql_data는 “VM 디스크 볼륨 이름”이 아니라 Docker가 관리하는 named volume 이름입니다.
3) 3rd-party Volume Driver(플러그인)로 “외부 스토리지” 붙이기
강의에서 말한 Azure File, DigitalOcean Block Storage, Google Persistent Disk, GlusterFS, NetApp, Portworx, VMware vSphere 등은 “개념적으로” 이런 그림입니다.
local은 Docker 호스트 내부 디렉터리에 저장- 3rd-party 드라이버는 클라우드/스토리지 시스템(EBS, NFS, SAN, vSphere Datastore 등) 에 저장
즉, 컨테이너가 종료/재시작/재배치되어도 데이터는 외부에 남습니다.
Docker에서 볼륨 드라이버를 지정하는 형태(개념)
docker volume create --driver <driver_name> <volume_name>
docker run --mount type=volume,src=<volume_name>,dst=<path> ...
실제로는 플러그인마다 설치 방식/드라이버 이름/옵션이 다릅니다.
(어떤 건 Docker plugin 형태, 어떤 건 데몬/에이전트 형태로 동작)
4) “클라우드 볼륨을 Docker가 자동으로 프로비저닝한다”는 의미
강의에서 “예: 특정 볼륨 드라이버로 AWS에 EBS를 프로비저닝하고 컨테이너에 연결한다”는 흐름은 이런 동작을 말합니다.
- 컨테이너 실행(또는 볼륨 생성) 요청
- 볼륨 드라이버가 외부 스토리지 API 호출 (예: EBS 생성/attach)
- 컨테이너의
dst=/var/lib/mysql같은 경로에 마운트 - 컨테이너가 종료되어도 외부 스토리지는 남음(정책에 따라 삭제/유지)
5) Storage Driver vs Volume Driver 한눈에 비교
| 구분 | Storage Driver | Volume Driver |
|---|---|---|
| 목적 | 이미지/컨테이너 레이어 관리 | 영구 데이터(볼륨) 관리 |
| 주요 대상 | 레이어, CoW, writable layer | /var/lib/docker/volumes 및 외부 스토리지 |
| 컨테이너 삭제 시 | writable layer 삭제됨 | 볼륨은 유지(명시적으로 삭제하지 않는 한) |
| 예시 | overlay2, btrfs, zfs 등 | local, 그리고 각종 외부 스토리지 플러그인 |
6) Kubernetes로 넘어가기 전 연결 포인트
이 강의의 마지막 문장처럼, 다음에 Kubernetes 볼륨으로 넘어가면 “역할 분리”가 더 명확해집니다.
- Docker의 Volume Driver 플러그인 개념 ↔ Kubernetes의 CSI(Container Storage Interface) 드라이버
- “파드가 떠있는 노드”와 상관없이 데이터를 유지하려면, 결국 외부 스토리지 + 드라이버가 필요
'CKA' 카테고리의 다른 글
| Storage - Volume (0) | 2026.01.03 |
|---|---|
| Storage - Kubernetes CSI(Container Storage Interface) (0) | 2026.01.03 |
| Storage - Docker의 Storage (0) | 2026.01.03 |
| Security - 정리(2) (1) | 2026.01.02 |
| Security - Custom Controller & Operator (0) | 2026.01.02 |