Post

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에서 성능 저하가 발생할 수 있음
개발 환경 소스코드 공유, 로그 파일 확인
VolumesDocker가 관리하는 전용 저장소를 컨테이너에 마운트하는 방식컨테이너와 분리되어 독립적으로 유지됨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.