Docker 볼륨 핸드북

이 핸드북은 Docker 볼륨의 개념, 구조, 생성 및 관리 방법, 활용 사례와 모범 사례를 종합적으로 정리하여, Docker 환경에서 데이터를 안전하고 효율적으로 관리하기 위한 참고서로 작성되었다.

1. 개요 및 생성 배경

Docker 컨테이너의 파일 시스템은 에페멀(ephemeral) 특성을 지녀, 컨테이너가 중지·삭제될 때 내부에 저장된 데이터도 함께 사라진다.

  • 문제점: 데이터베이스 파일, 로그, 사용자 업로드 콘텐츠 등 컨테이너 라이프사이클을 넘어 보존해야 하는 데이터를 직접 이미지나 컨테이너 내부에 저장할 수 없음.
  • 해결책: Docker가 관리하는 독립된 저장소인 **볼륨(volume)**을 사용하여, 컨테이너 재시작·재배포 시에도 데이터 지속성(persistence) 보장1.

2. 볼륨의 종류와 구조

Docker 볼륨은 크게 네 가지 유형으로 구분된다.

구분설명호스트 경로사용 예시
이름 있는 볼륨 (Named volume)Docker가 /var/lib/docker/volumes/<이름>/_data에 생성·관리자동 생성데이터베이스, 애플리케이션 설정 파일
익명 볼륨 (Anonymous volume)이름 없이 컨테이너 생성 시 자동 부여/var/lib/docker/volumes/<랜덤ID>/_data테스트 용 임시 저장소
바인드 마운트 (Bind mount)호스트 파일 시스템의 특정 디렉토리를 컨테이너에 직접 연결사용자 지정 경로개발 중 코드 공유, 호스트 로그 분석
임시 메모리 볼륨 (tmpfs)호스트 메모리에만 존재, 컨테이너 종료 시 삭제메모리 상민감 정보 처리, 고속 I/O 캐시

볼륨은 Docker 엔진이 관리하는 저장 영역이며, 컨테이너의 쓰기 계층을 우회하여 호스트 파일 시스템에 직접 기록된다1.

3. 생성·마운트·관리 절차

3.1 생성

  • CLI: docker volume create [옵션] <볼륨명>
    • 드라이버 지정: --driver local --opt o=type=nfs,...
  • Docker Compose:
volumes:
  app_data:
    driver: local

3.2 마운트

  • -v 단축: docker run -v <볼륨명>:<컨테이너경로>[:ro] 이미지
  • --mount 상세:
docker run \
  --mount type=volume,source=<볼륨명>,target=/data,readonly \
  이미지
- `type=volume|bind|tmpfs`
- `source`(또는 `src`), `target`(또는 `dst`)
- 읽기 전용: `readonly=true` 또는 `:ro`

3.3 조회 및 삭제

  • 목록: docker volume ls
  • 상세: docker volume inspect <볼륨명>
  • 개별 삭제: docker volume rm <볼륨명>
  • 미사용 볼륨 일괄 정리: docker volume prune

4. 고급 설정 및 드라이버 활용

  • NFS/CIFS 마운트:
docker volume create \
  --driver local \
  --opt type=nfs \
  --opt o=addr=192.168.1.1,rw \
  nfs_volume
  • 크기 제한(지원 드라이버 한정):
docker volume create \
  --opt size=10g limited_volume
  • 분산 파일 시스템을 위한 서드파티 플러그인 연동 가능

5. 활용 사례 및 모범 사례

5.1 활용 사례

  1. 상태 저장 애플리케이션
    • MySQL, Postgres 데이터베이스 파일 저장
  2. 로그 수집
    • 컨테이너 로그 디렉토리 마운트 후 호스트에서 Aggregation 도구 실행
  3. CI/CD 파이프라인
    • 빌드 산출물을 공유 디렉토리에 저장하여 후속 단계 재사용
  4. 다중 컨테이너 공유 데이터
    • 웹 서버와 워커 간 파일 공유

5.2 모범 사례

  • 이름 있는 볼륨 사용 권장: 관리·백업·마이그레이션 용이
  • --mount 구문 선호: 명시적이고 가독성 우수
  • 볼륨 네이밍 규칙 수립: 환경·서비스 식별자 포함 (prod_db_data 등)
  • 정기 정리: docker volume prune로 불필요 볼륨 제거하여 디스크 공간 확보
  • 백업 전략:
    • 볼륨을 다른 컨테이너에 마운트하여 tar 백업
    • 외부 스토리지 백업 툴 통합

6. 참고 명령어 요약

구분명령어설명
생성docker volume create myvol기본 로컬 드라이버로 볼륨 생성
생성(드라이버)docker volume create --driver local --opt type=nfs … nfsvolNFS 타입 볼륨 생성
목록docker volume ls볼륨 목록 조회
상세docker volume inspect myvol볼륨 메타데이터 확인
삭제docker volume rm myvol단일 볼륨 삭제
정리docker volume prune미사용 볼륨 일괄 삭제
마운트docker run --mount type=volume,source=myvol,target=/data img볼륨 마운트하여 컨테이너 실행

7. 결론 및 추천

Docker 볼륨은 컨테이너와 데이터의 수명주기를 분리하여 영속성을 보장하는 핵심 수단이다.

  • 이름 있는 볼륨--mount 구문 사용을 기본으로,
  • 정기 백업·정리를 통해 안정적인 운영 환경을 유지할 것을 권장한다.

이 핸드북을 토대로 Docker 볼륨을 체계적으로 설계·운영하여, 컨테이너 기반 인프라의 데이터 내구성과 관리 효율성을 극대화하기 바란다.


sources: Docker 공식 문서1, Dev.to 가이드2, LabEx 튜토리얼3.

Footnotes

  1. https://docs.docker.com/engine/storage/volumes/ 2 3

  2. https://dev.to/doziestar/a-comprehensive-guide-to-docker-volumes-4d9h

  3. https://labex.io/ja/tutorials/docker-how-to-use-docker-volumes-effectively-392904