본문 바로가기

WEB개발/Cloud

[Docker] Volume

 

Docker Volumes

도커는 각 컨테이너마다 독자적인 저장소(Volume)을 가진다. 컨테이너 내부에 저장되는 데이터는 컨테이너가 삭제되었을 경우 함께 사라진다. 이를 보완하기 위해 도커는 데이터의 영속성을 보장하기 위한 여러 방법을 지원하는데, 그 중 하나가 도커 볼륨이다.

 

 

1. 호스트 바인드 마운트 (Host Bind Mount)

  • 호스트 서버의 실제 물리 경로를 직접 지정하는 방식입니다.
  • 이 경우에는 당연히 실제 서버의 경로가 됩니다.
 
volumes: - /home/user/data:/app/data
 

👉 위 예시는 서버의 /home/user/data 폴더가 컨테이너의 /app/data로 마운트되는 것이고, 서버의 물리 디스크 공간을 그대로 씁니다.


2. Docker Named Volume (도커 관리 볼륨)

  • Docker가 내부적으로 관리하는 경로에 자동 저장하는 방식입니다.
  • docker volume create로 만들거나, Compose에서 volumes: 항목으로 지정하면 됩니다.
services: db: volumes: - db-data:/var/lib/mysql volumes: db-data:
 

이 경우에는 /var/lib/docker/volumes/db-data/_data 같은 Docker 내부 디렉토리가 자동 생성됩니다.
→ 즉, 이건 사용자가 명시적으로 지정하지 않아도 도커가 호스트 내부 경로를 자동 할당합니다.

 

Docker Volume 관련 명령어

# 도커 볼륨 생성 
$ docker volume create [volume-name] 
# 도커 볼륨 조회 
$ docker volume ls 
# 도커 볼륨 정보 확인 
$ docker volume inspect [volume-name] 
# 도커 볼륨 삭제 
$ docker volume rm [volume-name] 
# 도커 볼륨 전체 삭제 
$ docker volume prune

 

 

Volume을 통한 컨테이너 데이터 백업

 

Bind Mount와 Docker volume 방식을 이용하면 데이터를 쉽게 백업할 수 있다. 컨테이너의 애플리케이션 구동에 필요한 설정 파일들이 담긴 디렉토리를 호스트 디렉토리와 연결했기 때문에 컨테이너를 삭제해도 호스트 디렉토리에는 해당 디렉토리와 연결된 컨테이너의 디렉토리 파일들이 남아있다.

 

docker-compose.yaml

version : '1.0'

services : 
  redis : 
    image : redis:latest
    container_name : redis-container
    ports : 
      - "6379:6379"
    volumes : 
      - /c/redis:/data

    command : ["redis-server", "--appendonly", "yes"]

 

 

 

  1. 데이터 지속성: /tmp 디렉토리에 생성된 임시 파일이나 로그 파일을 컨테이너가 종료된 후에도 유지하고 싶을 때 사용합니다. 일반적으로 /tmp는 임시 저장소로 사용되기 때문에 컨테이너가 종료되면 해당 데이터는 사라지지만, 볼륨을 설정하면 컨테이너 재시작 후에도 데이터를 유지할 수 있습니다.

  2. 다른 컨테이너와 데이터 공유: /tmp 디렉토리를 볼륨으로 설정하면, 다른 컨테이너와 데이터를 공유할 수 있습니다. 예를 들어, 하나의 컨테이너에서 /tmp에 저장된 데이터를 다른 컨테이너에서 사용해야 할 경우, 볼륨을 통해 데이터를 쉽게 공유할 수 있습니다.

  3. 디버깅 및 로깅: 컨테이너 내에서 실행되는 애플리케이션이 /tmp에 임시 로그 파일을 기록할 때, 이 로그 데이터를 호스트 시스템이나 다른 컨테이너에서 접근할 수 있도록 유지하려는 경우에도 유용합니다.

 

redis컨테이너에 데이터 저장후 도커컴포즈 다운 후 다시 도커컴포즈업 후 저장된 데이터확인

1. $ docker compose up -d
2. $ docker exec -it redis-container redis-cli
3. $ set TEST_k TEST_V

4. $ docker-compose down
5. $ docker-compose up -d
6. docker exec -it redis-contianer redis-cli
7.127.0.0.1:6379> get TEST_k "TEST_V" 

 

'WEB개발 > Cloud' 카테고리의 다른 글

[Docker] 도커(docker)  (0) 2024.02.13