Docker Volume: 데이터 영속성 해결 방법
AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

Docker Volume

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

개발 툴

대상자

  • 개발자 (특히 컨테이너 기반 애플리케이션 개발자)
  • 난이도: 중급 (데이터 영속성, 볼륨 관리 기초 지식 필요)

핵심 요약

  • 컨테이너의 휘발성 문제 해결 : 볼륨(Volume)은 컨테이너 삭제 시에도 데이터를 유지함
  • 볼륨 vs BindMount 비교 :

- 볼륨: 도커가 관리하는 별도 저장 공간 (예: /var/lib/docker/volumes/)

- BindMount: 호스트 디렉토리와 직접 연결 (예: docker run -v /host/path:/container/path)

  • 필수 사용 시나리오 : DB 컨테이너, 파일 업로드 서비스, 로그 분석, 컨테이너 간 공유

섹션별 세부 요약

1. 왜 Docker Volume이 필요한가?

  • 휘발성 문제 : 컨테이너 삭제 시 데이터도 같이 사라짐

- 예: MySQL 컨테이너 종료 시 DB 데이터 손실

  • 데이터 영속성 필요성 :

- 로그, 업로드 파일, DB 데이터 등 외부에 저장해야 함

2. Docker Volume의 기능 및 특징

  • 데이터 영속성 : 호스트 저장소에 저장됨 (예: /내컴퓨터디렉토리경로)
  • 공유 가능성 : 여러 컨테이너가 동일 볼륨 사용 가능
  • 백업/복원 지원 : docker volume backup 명령어로 가능
  • 호스트와 연결 : 특정 디렉토리 매핑 가능 (예: -v /host/path:/container/path)

3. 사용하는 방식

  • 호스트 디렉토리 존재 시 : 컨테이너 디렉토리에 복사 (예: docker run -v /host/path:/container/path)
  • 호스트 디렉토리 없을 시 : 도커가 자동 생성 (예: mysql_volume 볼륨 생성)
  • 예시 명령어 :

```bash

docker run -e MYSQL_ROOT_PASSWORD=비밀번호 -p 3306:3306 -v /내컴퓨터디렉토리경로:/var/lib/mysql -d mysql

```

4. BindMount vs 볼륨

  • BindMount :

- 호스트 디렉토리와 실시간 공유 (예: VSCode 수정 → 컨테이너 즉시 반영)

- 호스트 경로가 컨테이너 경로를 덮어씀

  • 볼륨 :

- 도커가 관리하는 별도 저장소 (예: /var/lib/docker/volumes/)

- 데이터가 외부에서 직접 접근 불가능

결론

  • DB 컨테이너, 파일 업로드 서비스 등에서는 반드시 볼륨 사용 (예: -v /host/path:/container/path)
  • BindMount는 개발 시 실시간 파일 반영에 유리하지만, 데이터 관리가 복잡할 수 있음
  • 명령어 정리 :

```bash

docker volume create [볼륨명]

docker run -v [볼륨명]:[컨테이너경로] [이미지명]

```

  • 핵심 원칙 : 데이터 영속성 필요 시 볼륨, 실시간 공유 필요 시 BindMount 선택