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
선택