← 목록으로
📅 2026.05.05
Docker 저장소(Storage) 및 데이터 영속화 세팅 가이드
TechStudyContainerStorageVolumeNAS

Docker 컨테이너 내부의 파일 시스템은 일시적(Ephemeral)입니다. 컨테이너가 삭제되면 내부 데이터도 함께 사라집니다. DB 데이터나 사용자가 업로드한 파일을 안전하게 유지(영속화)하기 위한 스토리지 세팅 방법을 알아봅니다.


1. Docker Volume (도커 볼륨)

Docker가 스토리지 관리를 온전히 책임지는 방식으로 가장 권장되는 영속화 기법입니다.

  • 저장 위치: 호스트 머신의 특정 공간 (/var/lib/docker/volumes/)에 저장되며, 일반 프로세스나 사용자가 직접 수정하지 않도록 관리됩니다.
  • 장점: 컨테이너 간 안전한 공유가 가능하며, 백업 및 복원이 쉽고, 클라우드 환경에서도 마이그레이션이 용이합니다.
  • 사용법 (docker.io 공식 권장): 기존 -v 옵션보다 직관적인 --mount 플래그 사용이 권장됩니다.
    # 볼륨 생성
    docker volume create myvol2
     
    # 컨테이너에 마운트 (기본)
    docker run -d --name devtest \
      --mount source=myvol2,target=/app \
      nginx:latest
     
    # 읽기 전용(Read-Only) 마운트 (보안 강화)
    docker run -d --name devtest \
      --mount source=myvol2,target=/app,readonly \
      nginx:latest

2. Bind Mount (호스트 디렉터리 바인딩)

호스트(Host) 시스템의 절대 경로에 위치한 파일이나 디렉터리를 컨테이너 내부에 직접 연결하는 방식입니다.

  • 장점: 개발 환경에서 IDE로 호스트 소스 코드를 편집하면, 컨테이너 내부에 즉시 반영되어 빠른 테스트가 가능합니다.
  • 단점: 호스트의 파일 시스템 경로에 크게 의존하기 때문에 다른 머신으로 이관(Portability)할 때 충돌이 발생할 수 있습니다.
  • 사용법 (docker.io 공식 권장): 바인드 마운트 역시 --mount type=bind를 사용하여 경로를 명확히 지정하는 것이 좋습니다.
    # 현재 디렉토리의 target 폴더를 컨테이너의 /app 경로로 매핑
    docker run -d -it --name devtest \
      --mount type=bind,source="$(pwd)"/target,target=/app \
      nginx:latest

3. NAS (Network Attached Storage) 및 SAN (Storage Area Network) 연동

고가용성 분산 환경이나 대규모 기업용 인프라에서는 각 호스트 머신 내부 디스크 대신 외부 통합 스토리지 장비(NAS, SAN)를 연결하여 사용합니다.

방법 1: 호스트 레벨 마운트 후 Bind Mount

  • 가장 고전적인 방식입니다. OS 수준에서 NFS(NAS)나 iSCSI(SAN) 스토리지를 특정 디렉터리(예: /mnt/nfs_data)에 마운트합니다.
  • 이후 컨테이너 구동 시 Bind Mount를 사용하여 연결합니다.
    docker run -v /mnt/nfs_data/shared:/app/shared my_app

방법 2: Docker Volume Plugin 사용

  • Docker 자체적으로 NFS나 써드파티 분산 스토리지 플러그인을 직접 생성하여 볼륨처럼 다룰 수 있습니다.
  • 다중 컨테이너 환경(Docker Swarm 등)에서 컨테이너가 호스트를 옮겨가며 띄워질 때 스토리지가 유동적으로 따라붙게 만들 때 유리합니다.