05 Docker Data
05 Docker Data
1. Note
1. Note
- 네트워크에 이어서 데이터와 관련된 체크포인트들
- 흐름 체크 필요하고
- 전반적인 부분은 직접 판단하기 보다 인프라와 협력해야하는 부분들이 많음
2. Docker Volumes
1. Docker Volumes
- 컨테이너 내부의 데이터가 사라지는 문제를 해결하기 위해 사용
- 호스트 시스템의 특정 경로에 데이터를 저장하여 지속성 제공
- 컨테이너를 삭제해도 데이터는 유지됨
2. 구조
1
2
3
[ Container ] ---> [ Volume ] ---> [ Host OS Storage ]
# 컨테이너는 Volume을 통해 외부 저장소에 접근
# 실제 데이터는 Docker가 관리하는 영역에 저장됨
3. 주요 특징
- 생명주기 분리
- 컨테이너가 삭제되거나 재생성되더라도 Volume에 저장된 데이터는 유지
- 배포나 재기동이 반복되는 환경에서도 데이터 유실 없이 안정적으로 운영할 수 있음
- 데이터 공유
- 하나의 Volume을 여러 컨테이너가 동시에 마운트하여 사용
- 서비스 간 파일 공유나 로그 수집에 유용하지만, 동시에 쓰기 작업 시 충돌 관리가 필요
- 성능
- Docker가 관리하는 저장소를 사용하기 때문에 bind mount보다 일관된 IO 성능을 제공
- 특히 Mac/Windows 환경에서는 성능 차이가 더 크게 체감
- 관리 편의성
- Docker가 저장 경로를 추상화하여 직접 경로를 다룰 필요가 없음
- 생성, 조회, 삭제를 명령어로 쉽게 관리할 수 있어 운영 부담이 줄어듬
3. Docker Volumes 종류
1. note
1. 종류
| 구분 | 설명 | 데이터 지속성 | 성능 | 사례 |
|---|---|---|---|---|
| Container Storage | 컨테이너 내부 레이어에 데이터를 저장하는 방식 별도 마운트 없이 기본적으로 사용 | 컨테이너 삭제 시 데이터가 함께 삭제됨 | 보통 수준이며, 쓰기 시 레이어 구조 영향으로 비효율이 발생할 수 있음 | 일회성 작업, 캐시성 데이터, 테스트 환경 |
| Bind Mounts | 호스트 OS의 특정 디렉토리를 컨테이너에 직접 마운트하는 방식 | 호스트 파일 시스템에 저장되므로 컨테이너 삭제와 무관하게 유지됨 | 호스트 환경에 따라 성능 편차가 큼 특히 Mac/Windows에서 성능 저하가 발생할 수 있음 | 개발 환경 소스코드 공유, 로그 파일 확인 |
| Volumes | Docker가 관리하는 전용 저장소를 컨테이너에 마운트하는 방식 | 컨테이너와 분리되어 독립적으로 유지됨 | Docker가 최적화하여 bind mount보다 안정적이고 일관된 성능을 제공 | DB 데이터 저장, 업로드 파일, 운영 환경 데이터 |
| Tmpfs Mount | 메모리(RAM)에 데이터를 저장하는 방식으로 디스크를 사용하지 않음 | 컨테이너 종료 시 데이터가 모두 사라짐 | 매우 빠른 속도를 제공하지만 메모리 용량에 제한 | 임시 캐시, 민감 정보 저장, 세션 처리 |
2. note
- Volumes와 Bind Mount의 차이
- Host 컴퓨터에서 접근이 가능한가 여부
- Volumes에서 접근은 가능하지만, 암호화되어있고 원래 목적과는 다름
3. Volumn + Dokcer 관련 디스크 관리
1
2
3
4
5
6
7
8
9
10
11
# 사용하지 않는 리소스 정리
docker system prune -f
# 사용하지 않는 볼륨 정리
docker volume prune -f
# 사용하지 않는 이미지 정리
docker image prune -a -f
# 정리 후 사용량 확인
docker system df -v
2. Container Storage
1. Container Storage
- 컨테이너 내부 레이어에 데이터를 저장하는 기본 방식
- 별도의 마운트 없이 컨테이너 자체에 저장
2. 특징
- 컨테이너에 완전히 종속된 저장 방식
- 이미지 위에 쓰기 레이어 추가 구조
3. 사용법
1
2
3
4
5
# 별도 설정 없이 바로 사용 가능
docker run -it ubuntu
# 컨테이너 내부에서 파일 생성
touch test.txt
4. 장단점
- 장점
- 설정이 필요 없고 가장 단순함
- 테스트 및 임시 작업에 적합
- 단점
- 컨테이너 삭제 시 데이터 유실
- 운영 데이터 저장에는 부적합
3. Bind Mounts
1. Bind Mounts
- 호스트 OS의 디렉토리를 컨테이너에 직접 연결하는 방식
2. 특징
- 호스트 파일 시스템을 그대로 사용
- 환경(OS, 경로)에 강하게 의존
- 실시간 파일 반영 가능
3. 사용법
1
2
3
4
5
6
7
# 호스트의 /host/path 디렉토리를
# 컨테이너 내부 /container/path에 연결(마운트)해서
# 컨테이너가 해당 경로를 호스트 파일처럼 사용하게 만드는 명령어
docker run -d \
-v /host/path:/container/path \
nginx
4. 장단점
- 장점
- 호스트에서 파일 직접 확인 및 수정 가능
- 개발 환경에 매우 유용 (코드 핫리로드)
- 단점
- 환경 의존성 높음 (이식성 낮음)
- OS에 따라 성능 차이 발생
4. Volumes
1. 개념
- Docker가 관리하는 전용 저장소를 사용하는 방식
2. 특징
- 컨테이너와 생명주기 분리
- Docker가 실제 저장 경로 관리
- 안정적인 성능 제공
3. 사용법
1
2
3
4
5
6
7
# Volume 생성
docker volume create my-volume
# 컨테이너에서 사용할 경로 지정
docker run -d \
-v my-volume:/app/data \
nginx
4. 장단점
- 장점
- 데이터 영속성 보장
- 운영 환경에서 사용 권장
- 성능 안정적
- 단점
- 실제 파일 위치 확인이 번거로움
- 별도 백업 전략 필요
5. Tmpfs Mount
1. Tmpfs Mount
- 메모리(RAM)에 데이터를 저장하는 방식
2. 특징
- 디스크를 사용하지 않음
- 매우 빠른 속도
- 휘발성 데이터 저장
3. 사용법
1
2
3
docker run -d \
--tmpfs /app/temp \
nginx
4. 장단점
- 장점
- 최고 수준의 성능
- 디스크에 데이터가 남지 않아 보안에 유리
- 단점
- 컨테이너 종료 시 데이터 소멸
- 메모리 용량 제한 존재
This post is licensed under CC BY 4.0 by the author.