Docker 볼륨 드라이버: 외부 스토리지 연결하기
Docker 볼륨 드라이버의 개념과 기본 local 드라이버로 NFS를 마운트하는 방법, 서드파티 드라이버 플러그인 설치 방법을 설명합니다.
지난 글에서 메모리 기반 tmpfs 마운트를 살펴봤다. 이번에는 볼륨 드라이버(Volume Driver)를 다룬다. 기본 local 드라이버 외에도 NFS, AWS EBS, Ceph 등 다양한 스토리지 백엔드를 볼륨으로 연결할 수 있다.
볼륨 드라이버란
볼륨 드라이버는 Docker 볼륨 API와 실제 스토리지 백엔드 사이의 플러그인이다. 드라이버를 교체하더라도 컨테이너는 동일한 -v 문법으로 볼륨을 사용한다.
# 볼륨 생성 시 드라이버 지정
docker volume create --driver DRIVER_NAME my-volume
# 드라이버 확인
docker volume inspect my-volume
# "Driver": "DRIVER_NAME"
기본 드라이버: local
설치 없이 사용할 수 있는 내장 드라이버다. 기본적으로 호스트 로컬 파일시스템에 데이터를 저장하지만, --opt로 마운트 옵션을 지정하면 NFS, CIFS(Samba) 같은 네트워크 파일시스템도 마운트할 수 있다.
# NFS v4 마운트 예시
docker volume create \
--driver local \
--opt type=nfs \
--opt o=addr=192.168.1.10,rw,nfsvers=4 \
--opt device=:/exports/mydata \
nfs-data
# CIFS (Windows 공유) 마운트
docker volume create \
--driver local \
--opt type=cifs \
--opt o=username=user,password=pass,vers=3.0 \
--opt device=//fileserver/share \
cifs-data
--opt type은 Linux mount 명령의 -t 옵션에 해당한다. --opt o는 -o 옵션 문자열이다.
서드파티 드라이버 플러그인
더 많은 기능이 필요하면 Docker 플러그인을 설치한다.
# 설치된 플러그인 확인
docker plugin ls
# 예시: vieux/sshfs 플러그인 (SSH 마운트)
docker plugin install vieux/sshfs
# SSHFS 볼륨 생성
docker volume create \
--driver vieux/sshfs \
--opt sshcmd=user@host:/remote/path \
--opt password=mypass \
ssh-data
클라우드 스토리지 연결
AWS ECS / EKS: EBS
AWS ECS에서는 EBS 볼륨을 태스크 정의(task definition)에서 직접 지정한다. 로컬 Docker로 EBS를 마운트하려면 aws-ebs 플러그인이 필요하다.
# AWS EBS 플러그인 (구버전 접근 방식)
docker plugin install --alias aws rexray/ebs:latest
docker volume create \
--driver aws \
--opt size=20 \
--opt volumetype=gp3 \
my-ebs-vol
실제로는 Kubernetes, ECS 같은 오케스트레이터가 볼륨 프로비저닝을 담당하므로 로컬에서 직접 EBS 드라이버를 쓰는 경우는 드물다.
Compose에서 드라이버 지정
services:
db:
image: postgres:16
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
driver: local
driver_opts:
type: nfs
o: addr=192.168.1.10,rw,nfsvers=4
device: ":/exports/pgdata"
Compose 파일에서 driver_opts로 드라이버 옵션을 지정할 수 있다.
드라이버 선택 기준
| 상황 | 권장 드라이버 |
|---|---|
| 단일 호스트, 로컬 데이터 | local (기본) |
| NFS/Samba 공유 스토리지 | local + --opt type=nfs/cifs |
| SSH 원격 경로 | vieux/sshfs 플러그인 |
| AWS ECS/EKS | EBS CSI 드라이버 (Kubernetes) |
| 분산 파일 시스템 | rexray/ceph, flocker 등 |
주의사항
- 서드파티 플러그인은 네트워크 접근, 특수 권한이 필요할 수 있어 보안 감사 필요
- NFS 마운트는 네트워크 장애 시 컨테이너 I/O가 블로킹될 수 있음
- 플러그인은 Docker 데몬 재시작 후에도 유지되지만 의존하는 서비스(NFS 서버 등)가 준비되어야 함
docker volume prune은 드라이버 종류와 무관하게 미사용 볼륨 모두 삭제
핵심 정리
- 볼륨 드라이버는 스토리지 백엔드를 추상화하는 플러그인
- 내장
local드라이버로 NFS, CIFS 마운트 가능 (--opt type=nfs) - 서드파티 드라이버는
docker plugin install로 추가 - Compose에서
driver_opts로 드라이버 옵션 설정 - 오케스트레이터 환경(K8s, ECS)에서는 CSI 드라이버가 역할 대체
지난 글: tmpfs 마운트: 메모리 기반 임시 파일 시스템
다음 글: Docker 볼륨 백업과 복원: 데이터 보호 전략
읽어주셔서 감사합니다. 😊