본문 바로가기
IT 개발/클라우드

[도커] Docker 볼륨(Volume) 완벽 가이드

by 이것 저것 모든것 2025. 2. 1.
728x90

Docker 볼륨은 컨테이너의 데이터를 영구적으로 저장하고 관리하는 방법을 제공합니다.

상세한 사용법을 알아보겠습니다.

1. Docker 볼륨의 종류

1) Volume (도커 관리 볼륨)

  • Docker가 관리하는 호스트 파일시스템의 일부에 저장 (/var/lib/docker/volumes/)
  • 가장 권장되는 방식

2) Bind Mount (바인드 마운트)

  • 호스트의 파일 시스템을 직접 마운트
  • 호스트의 어느 경로든 사용 가능

3) tmpfs Mount (임시 파일시스템)

  • 메모리에만 저장되는 임시 데이터
  • 컨테이너가 중지되면 데이터 삭제

2. Volume 명령어

볼륨 생성

# 기본 볼륨 생성
docker volume create my-vol

# 옵션을 지정하여 생성
docker volume create --driver local \
    --opt type=none \
    --opt device=/home/user/data \
    --opt o=bind \
    my-custom-vol

볼륨 조회

# 모든 볼륨 목록 확인
docker volume ls

# 특정 볼륨 상세 정보 확인
docker volume inspect my-vol

볼륨 삭제

# 특정 볼륨 삭제
docker volume rm my-vol

# 사용하지 않는 모든 볼륨 삭제
docker volume prune

3. 컨테이너에 볼륨 연결

Volume 마운트

# 볼륨 생성과 동시에 마운트
docker run -d \
    --name my-container \
    -v my-vol:/app/data \
    nginx

# 읽기 전용으로 마운트
docker run -d \
    --name my-container \
    -v my-vol:/app/data:ro \
    nginx

Bind Mount 사용

# 호스트 디렉토리 마운트
docker run -d \
    --name my-container \
    -v /host/path:/container/path \
    nginx

# 현재 디렉토리 마운트
docker run -d \
    --name my-container \
    -v $(pwd):/app \
    nginx

tmpfs 마운트

# 메모리에 임시 저장소 생성
docker run -d \
    --name my-container \
    --tmpfs /app/temp \
    nginx

4. 볼륨 사용 예시

MySQL 데이터 저장

# 볼륨 생성
docker volume create mysql_data

# MySQL 컨테이너 실행
docker run -d \
    --name mysql \
    -v mysql_data:/var/lib/mysql \
    -e MYSQL_ROOT_PASSWORD=password \
    mysql:8.0

웹 애플리케이션 개발

# 소스 코드 마운트
docker run -d \
    --name web-app \
    -v $(pwd):/usr/src/app \
    -v node_modules:/usr/src/app/node_modules \
    node:14

5. Docker Compose에서의 볼륨 사용

version: '3.8'
services:
  web:
    image: nginx
    volumes:
      - web-data:/usr/share/nginx/html
      - ./config:/etc/nginx/conf.d
      - /var/log/nginx:/var/log/nginx

volumes:
  web-data:
    driver: local

6. 볼륨 백업과 복구

볼륨 백업

# 볼륨 데이터 백업
docker run --rm \
    -v my-vol:/source \
    -v $(pwd):/backup \
    ubuntu tar cvf /backup/backup.tar /source

볼륨 복구

# 백업된 데이터 복구
docker run --rm \
    -v my-vol:/source \
    -v $(pwd):/backup \
    ubuntu tar xvf /backup/backup.tar -C /

7. 볼륨 관련 모범 사례

1) 명명 규칙

Copy# 프로젝트명_용도
docker volume create myapp_db_data

2) 볼륨 라벨링

# 라벨을 사용한 볼륨 생성
docker volume create \
    --label project=myapp \
    --label environment=production \
    myapp_data

3) 주기적인 정리

# 사용하지 않는 볼륨 정리
docker volume prune --filter "label!=environment=production"

8. 자주 발생하는 문제와 해결방법

1) 권한 문제

# 권한 설정을 위한 볼륨 마운트
docker run -d \
    -v my-vol:/app/data \
    --user $(id -u):$(id -g) \
    nginx

2) 볼륨 삭제 오류

# 강제 삭제 (주의 필요)
docker volume rm -f my-vol

# 연결된 컨테이너 확인
docker ps -a --filter volume=my-vol

정리

Docker 볼륨의 주요 명령어:

  • 생성: docker volume create
  • 조회: docker volume ls
  • 상세정보: docker volume inspect
  • 삭제: docker volume rm
  • 정리: docker volume prune

참고사항

  • 중요한 데이터는 반드시 볼륨을 사용하여 저장하세요.
  • 개발 환경에서는 Bind Mount가 유용할 수 있습니다.
  • 프로덕션 환경에서는 Named Volume 사용을 권장합니다.
  • 정기적인 볼륨 백업 계획을 수립하세요.
  • 불필요한 볼륨은 주기적으로 정리하여 디스크 공간을 관리하세요.
728x90