승상의 코딩 블로그

[Docker] docker volume 을 활용해야하는 이유 본문

Docker(도커)

[Docker] docker volume 을 활용해야하는 이유

양승상 2025. 6. 27. 22:11
반응형

Docker Volume 데이터 저장을 위한 저장소이다.

이 데이터는 보존되고, 공유되고, 호스트 디렉토리와 독립적이고, 쉽다.

각 특징에 대해 조금 더 알아보자.

1. 컨테이너를 삭제해도 데이터가 보존됨

Volume 은 컨테이너 생명 주기와 분리되어 있어서 컨테이너를 삭제해도 데이터가 지워지지 않는다.

docker run -d -v data:/app/data myimage

docker volume 이 data 라는 저장소를 만들고, 컨테이너 내부의 /app/data 에 마운트한다.

data = /app/data 이다.

2. 여러 컨테이너간 데이터 공유

docker run -d --name A -v data:/app/data myimage1
docker run -d --name B -v data:/app/logs myimage2

data 라는 docker volume 을 두 컨테이너에 모두 마운트 한다.

예를 들어, B 컨테이너에서 생성된 로그를 A 컨테이너에서 분석하거나 모니터링 할 수 있다.

3. 호스트 디렉토리와 독립적이고 성능 및 관리가 효율적임

Docker 가 내부적으로 Volume을 관리하기 때문에 Docker 에 최적화 되어있다.

예를 들어, 컨테이너 간 데이터를 공유하는 Volume 일 경우, Docker 자체적인 입출력 동기화로 인해 빠르다.

호스트 디렉토리와 독립적이기 때문에 호스트의 다른 프로세스와의 충돌 문제가 적어진다.

 

Docker Volume 대신에 호스트의 디렉토리와 바인드 할 경우, 바인드할 디렉토리 경로를 기억해야함.

또한 권한 및 OS 에 따른 경로에 따른 문제가 생길 수 있음.

Docker Volume 은 이름 기반으로 쉽게 마운트할 수 있고, 내부적인 폴더로 인해 권한 문제 및 OS 차이에 따른 문제가 거의 생기지 않음. 

4. 백업과 복구가 쉬움

항상 백업과 복구는 아주 중요하다. 

# 백업
docker run --rm -v myvolume:/data -v $(pwd):/backup busybox tar czvf /backup/myvolume-backup.tar.gz /data
# 복원
docker run --rm -v myvolume:/data -v $(pwd):/backup busybox tar xzvf /backup/mysql-backup.tar.gz -C /

 

docker volume backup

이해가 쉽도록 그림으로 그려봤다.

흐름을 설명하겠다.

  1. docker container(백업하고자하는 컨테이너) 의 백업데이터는 myvolume(docker volume) 에 저장된다고 하자.
  2. busybox(리눅스 명령어 모음 이미지) 를 실행한다.
    • 백업데이터를 busybox 컨테이너에 연결 (myvolume 과 /data 에 마운트)
    • 호스트 디렉토리와 busybox 컨테이너 연결 ($(pwd) 와 /backup 를 바인드)
  3. /data (myvolum 이자 backup data임) 의 데이터를 압축해서 /backup 경로에 압축
  4. 호스트는 /backup 경로에 바운드된 $(pwd) 에서 압축된 백업파일을 확인가능

* --rm 은 busybox 가 백업에만 사용되고 필요없으므로 삭제 옵션을 추가함.

 

복구는 반대의 흐름이다.

Volume 직접 저장

/var/lib/docker/volumes/<volume-name>/_data/

이 경로에 volume 이 존재하므로 이 폴더를 백업하면 된다.

하지만 직접 폴더를 조작하면 권한 문제 등으로 복원시 비정상동작을 할 수 있으므로 앞서 소개한 명령어를 활용하자. 

 

cron 등으로 스케쥴링하면 주기적으로 백업하면 시스템을 유지보수하기 간편해진다.

반응형
Comments