본문으로 건너뛰기

Docker Volume


Docker Volume

왜 Volume?

  • Container Layer에서 파일을 수정, 생성 한다고 해도 컨테이너가 삭제되면 해당 파일들도 모두 함께 삭제되는 문제가 있다.
  • 이를 해결해기 위해 Volume을 사용한다.

생성 & 마운트

dockerstorage4

Volume Mount

docker volume create data_volume
  • 호스트의 /var/lib/docker/volumes/data_volume/ 생성
docker run -v data_volume:/var/lib/mysql mysql
  • 컨테이너 내부의 /var/lib/mysql에 있는 파일들이 data_volume에 마운트된다.
  • 컨테이너 삭제 후에도 이 데이터는 유지된다.
  • data_volume 대신에 없는 볼륨 이름을 넣어도(예:test) 해당 볼륨이 생성되며 자동으로 마운트된다.

Bind Mount

docker run -v /data/mysql:/var/lib/mysql mysql
  • /var/lib/docker/volumes가 아닌 호스트에 존재하는 다른 디렉토리를 사용하고 싶을 때는 위와 같이 사용하며, 이를 Bind Mount라고 한다.
구분Volume MountBind Mount
위치/var/lib/docker/volumes호스트 어디든
관리 주체Docker사용자
주 용도일반적인 데이터 영속성기존 데이터 재사용

-v vs --mount

docker run -v source:target
  • 구 방식
  • 간단
docker run \
--mount type=bind,source=/data/mysql,target=/var/lib/mysql \
mysql
  • 신 방식
  • 권장
  • type, source, target 명확히 구분

Docker Volume Driver

역할

  • 데이터 영속성(Persistence) 담당
  • 컨테이너 외부에 데이터 저장

Docker Volume Driver Plugin

  • 기본으로 제공되는 Volume Driver는 Docker 호스트의 로컬에 저장하는 기능만 존재한다.
  • 이 경우 여러 단점이 있다.
    • 서버 장애 시 데이터 손실
    • 컨테이너/호스트 이동 어려움 (해당 컨테이너를 다른 호스트에서 실행시키기 번거로움)
    • 클라우드 환경에서 확장성 부족
  • 이에 외부 스토리지와 연동하는 Volume Driver Plugin이 필요

대표적인 Volume Driver Plugins

  • Azure File Storage
  • Google Compute Persistent Disk
  • Amazon EBS
  • Openstack Cinder
  • VMware vSphere Storage
  • Convoy

레퍼런스