1. 개요
데이터가 사라지는 문제
컨테이너는 기본적으로 휘발성이다 컨테이너 삭제시 (rm) 모든 데이터(로그, DB파일)도 같이 사라짐
→ 해결책 Volume 외부에 저장
2. 볼륨
2-1 정의
도커에서 볼륨(Volume)은 컨테이너가 삭제되거나 재시작되어도 데이터를 안정적으로 보존하기 위해 호스트에
별도로 저장하는 영역
2-2 볼륨(Volume)의 특징
- 컨테이너와 분리되어 있음
- 컨테이너 재시작/삭제에도 데이터 유지
- 여러 컨테이너가 동일한 볼륨을 공유가능
2-3 볼륨의 종류 비교
| 구분 | Volume | Bind Mount |
| 정의 | Docker가 관리하는 독립 스토리지 | 호스트의 특정 디렉터리를 직접 연결 |
| 저장위치 | Docker가 직접 관리 (/var/lib/docker/volumes/) | 호스트의 특정 디렉토리 |
| 관리주체 | Docker 엔진이 자동 관리 | 사용자가 직접 관리 |
| 예시 | 컨테이너 간 데이터 공유, 지속성 보장 | 로컬 개발 환경에서 코드 연결 |
| 장점 | 운영 안정성 높음, 컨테이너 간 공유 쉬움 | 실시간 파일 수정 가능 (개발용에 적합) |
3. Volume 기본 명령어
mydata라는 이름의 볼륨 생성
docker volume create mydata
-> 실제로는 Docker가 관리하는 경로(/var/lib/docker/volumes/...)에 저장됨
컨테이너에 Volume 연결
docker run -d --name web -v mydata:/usr/share/nginx/html nginx
#구조 분석
-v [볼륨명]:[컨테이너 경로]
- 해당 경로를 볼륨과 마운트
- 이 경로에 저장되는 데이터는 컨테이너가 아니라 볼륨에 저장됨
컨테이너 내부에서 데이터 생성
docker exec -it web bash
echo "Persisted Data" > /usr/share/nginx/html/test.html
exit
- 동작 원리
- 파일은 컨테이너 내부에 생성되는 것처럼 보임
- 실제로는 mydata 볼륨에 저장됨
컨테이너 삭제 후 재생성
docker rm -f web
docker run -d --name web2 -v mydata:/usr/share/nginx/html nginx
- 컨테이너는 삭제됨 (데이터 날아가야 정상)
- 하지만 동일한 Volume(mydata)을 다시 연결
데이터 유지 확인
docker exec -it web2 cat /usr/share/nginx/html/test.html
#결과
Persisted Data
실제 파일 경로 확인법
#inspect 명령어를 사용하면 호스트 머신 내의 실제 저장 경로(Mountpoint) 확인 가능하다
docker volume inspect mydata
[
{
"Name": "mydata"
,
"Mountpoint": "/var/lib/docker/volumes/mydata/_data"
}
]
4. Bind Mount 방식 기본 명령어
로컬 디렉터리 준비
mkdir ~/myweb
echo "Hello Bind Mount!" > ~/myweb/index.html
- ~/myweb → 실제 서비스 파일 위치
- index.html → Nginx에서 서빙할 콘텐츠
컨테이너 실행 (Bind Mount 연결)
docker run -d \
--name bindweb \
-p 8080:80 \
-v ~/myweb:/usr/share/nginx/html \
nginx
#구조 분석
-v [호스트 경로]:[컨테이너 경로]
- ~/myweb → 내 PC 디렉터리
- /usr/share/nginx/html → Nginx 웹 루트
동작 원리
- 컨테이너 내부 파일이 아니라 호스트 파일을 그대로 참조
- 컨테이너는 “뷰(View)” 역할만 수행
실시간 동기화 확인
echo "Updated Content!" > ~/myweb/index.html
결과
- 컨테이너 재시작 없이 바로 반영됨
- 브라우저 접속 시 즉시 변경 확인 가능
Bind Mount Read-Only 모드 (보안 옵션)
리스크
- 컨테이너 내부 프로세스가
- 설정 파일 수정
- 소스 코드 삭제
- 악성 코드 삽입
=> :ro 옵션(read-only)으로 보호
docker run -d \
-v ~/config:/app/config:ro \
my-app
5. Volume 관리 (유지보수 필수)
Bind Mount와 별개로, Docker Volume은 자동 삭제되지 않는다.
-> 'Dangling Volume'(연결되지 않은 볼륨)이 쌓여 디스크가 꽉 찬다.
볼륨 목록 확인
docker volume ls
사용하지 않는 볼륨 삭제
docker volume prune
※ 주의
- 컨테이너에 연결되지 않은 모든 볼륨 삭제
- 데이터 복구 불가
본 글은 강의 내용을 기반으로 학습한 내용을 정리한 글입니다.
'Docker' 카테고리의 다른 글
| 4-1. 도커 허브(Docker Hub)란? (0) | 2026.04.15 |
|---|---|
| 4. Dockerfile Best Practices 8가지 (0) | 2026.04.15 |
| 3-1. [실습] 나만의 유틸리티 이미지 만들기 (Alpine 버전) / no cache관련 (0) | 2026.04.15 |
| 3. Dockerfile의 기본 구조 (1) | 2026.04.15 |
| 2-3. [실습] 이미지 관리 및 정리 실습 (0) | 2026.04.15 |