TITEDIOS 편한 코딩

[Docker]#18 Docker 데이터 백업 - Volume 의 활용 방법 및 가이드 본문

Docker

[Docker]#18 Docker 데이터 백업 - Volume 의 활용 방법 및 가이드

TitediosKW 2024. 8. 30. 19:00
반응형

목차

  1. Docker 볼륨이란?
  2. Docker 볼륨 백업의 필요성
  3. Docker 볼륨 백업 방법
  4. Docker 볼륨 복구 방법
    - 방법 1: docker run 명령어를 이용한 복구
    - 방법 2: tar 명령어를 이용한 복구
  5. Docker 볼륨 백업 및 복구 자동화
  6. 결론

1. Docker 볼륨이란?

Docker 볼륨은 Docker 컨테이너와 호스트 시스템 간에 데이터를 저장하고 공유하는 방법입니다. 일반적으로 컨테이너는 상태가 없는(stateless) 애플리케이션을 운영하는 데 사용되지만, 데이터베이스나 로그 파일처럼 지속적으로 저장되어야 하는 데이터는 컨테이너가 삭제되더라도 유지될 필요가 있습니다. Docker 볼륨은 이러한 데이터를 안전하게 저장하고 관리할 수 있도록 해줍니다.


2. Docker 볼륨 백업의 필요성

Docker 볼륨에 저장된 데이터는 컨테이너의 삭제 또는 업데이트로 인한 데이터 손실을 방지하기 위해 주기적으로 백업해야 합니다. 백업은 데이터의 지속성을 보장하고, 예기치 않은 시스템 장애 시에도 데이터를 복구할 수 있게 해줍니다. 개발에 유명한 명언 중에 "개발에 실패한 개발자는 용서할 수 있어도 백업에 실패한 개발자는 용서할 수 없다"라는 말이 있습니다. 그만큼 백업의 중요성을 강조한 말이라고 생각합니다. Docker에서 백업은 더 중요한 일로 여겨질 수 있습니다.


3. Docker 볼륨 백업 방법

방법 1: docker run 명령어를 이용한 백업

가장 기본적인 백업 방법은 docker run 명령어를 사용하는 것입니다. 예를 들어, 다음과 같이 볼륨 데이터를 백업할 수 있습니다. my_volume을 백업해 현재 디렉토리에 저장하는 명령어입니다.

docker run --rm \
-v my_volume:/volume \
-v $(pwd):/backup \
ubuntu tar cvf /backup/backup.tar /volume

이 명령어는 my_volume 볼륨의 데이터를 backup.tar 파일로 백업합니다. 명령어가 좀 복잡해 보이지만 하나씩 살펴보겠습니다.

  • docker run: 컨테이너를 실행하는 명령어 입니다.
  • --rm: 컨테이너 종료 시 컨테이너를 삭제하는 옵션입니다. 컨테이너를 임시로 사용하기 때문에 사용하는 옵션입니다.
  • -v my_volume:/volume: 백업하고자 하는 my_volume을 컨테이너와 마운트하는 옵션입니다.
  • -v $(pwd):/backup: 백업할 위치(현재 디렉토리)와 컨테이너에서 백업할 디렉토리를 마운트하는 옵션입니다. $(pwd)는 bash에서 현재 디렉토리를 가져오는 명령어입니다.
  • ubuntu: Docker 컨테이너 생성 시 ubuntu 이미지를 가지고 컨테이너를 생성합니다.
  • tar cvf /backup/backup.tar /volume: 실제 컨테이너 내부 즉, ubuntu에서 실행시킬 명령어 입니다. tar 명령어는 파일 압축을 위한 명령어입니다.

그림 1. Docker 볼륨 임시 컨테이너 이용 백업 과정


명령어 수행 과정에 대해 설명하겠습니다. 우선 -v 옵션으로 2개의 볼륨을 컨테이너에 연결했습니다. 그리고 컨테이너 내부에서 /volume, 즉, ①기존 my_volume의 데이터들을 /backup/backup.tar 로 압축합니다. 그러면, 현재 위치와 /backup이 연결되어 있기 때문에 ②backup.tar가 현재 위치에 저장되게 됩니다. 이로써 백업이 완료됩니다.

방법 2: tar 명령어를 이용한 백업

다른 방법으로, tar 명령어를 사용하여 직접 호스트 시스템에서 Docker 볼륨의 데이터를 백업할 수 있습니다.

# 데이터 저장 경로 확인
docker volume inspect my_volume
# 경로 확인 후 백업
tar cvf backup.tar -C /var/lib/docker/volumes/my_volume/_data .

이 명령어는 Docker 볼륨의 데이터를 backup.tar 파일로 압축하여 백업합니다.

그림 2. Docker volume 직접 백업


볼륨에 있는 데이터를 직접 원하는 위치에 백업하는 방식입니다.

반응형

4. Docker 볼륨 복구 방법

방법 1: docker run 명령어를 이용한 복구

백업된 데이터를 복구하려면 다음과 같이 명령어를 사용합니다. 이전에 살펴봤던 백업과 유사한 방식이지만 동작이 역방향으로 이루어질 것이라는게 느낌으로 오시죠?ㅎㅎ

docker run --rm \
-v my_volume:/volume \
-v $(pwd):/backup \
ubuntu tar xvf /backup/backup.tar -C /volume

이 명령어는 backup.tar 파일의 데이터를 my_volume 볼륨으로 복구합니다. 이전과 마찬가지로 임시 컨테이너를 실행하고 -v 옵션으로 my_volume과 현재 디렉토리를 마운트합니다. 그리고 현재 디렉토리에 있는 백업 데이터를 my_volume에 복구하는 방식으로 동작합니다.

방법 2: tar 명령어를 이용한 복구

tar 명령어를 사용하여 직접 호스트 시스템에서 데이터를 복구할 수 있습니다.

tar xvf backup.tar -C /var/lib/docker/volumes/my_volume/_data

이 명령어는 backup.tar 파일의 데이터를 Docker 볼륨으로 복원합니다. 호스트에 저장된 백업파일을 직접 볼륨에 복사하는 방식입니다.


5. Docker 볼륨 백업 및 복구 자동화

스크립트를 이용한 자동화

백업 및 복구는 주기적으로 이루어진다고 했습니다. 그렇다면 자동화하여 우리가 신경쓰지 않고도 이루어지게 하는 것이 좋습니다. 백업 및 복구를 자동화하기 위해 간단한 스크립트를 작성할 수 있습니다. 예를 들어, 다음과 같은 스크립트를 사용하여 주기적으로 백업을 수행할 수 있습니다.

#!/bin/bash 
VOLUME_NAME="my_volume" 
BACKUP_DIR="/path/to/backup" 
DATE=$(date +%Y%m%d%H%M) 
docker run --rm \
-v $VOLUME_NAME:/volume \
-v $BACKUP_DIR:/backup \
ubuntu tar cvf /backup/backup_$DATE.tar /volume

크론 잡(cron job)을 이용한 주기적 백업 설정

크론 잡을 설정하여 일정한 간격으로 자동 백업을 수행할 수 있습니다. 예를 들어, 매일 자정에 백업을 실행하도록 설정할 수 있습니다. 크론 잡에 대한 설명은 범위를 벗어나므로 생략하겠습니다.

crontab -l # crontab 리스트 확인
crontab -e # crontab 작성

# crontab -e 명령 수행 후 아래 내용을 스크립트로 작성 후 저장
0 0 \* \* \* /path/to/backup\_script.sh

service cron start # crontab 시작
service cron status # crontab 상태 확인
service cron restart # crontab 재시작. 설정 변경 후 재시작 필요

결론

Docker 볼륨의 백업 및 복구는 데이터의 안전성을 보장하기 위해 필수적인 작업입니다. 주기적인 백업과 신속한 복구를 통해 Docker 환경에서 데이터 손실을 최소화할 수 있습니다. 백업을 주기적으로 하여 여러분의 소중한 데이터를 잘 보관함은 물론 필요할 때 즉시 복구가 가능한 환경을 만드는 것은 중요합니다. 실습을 통해 Docker에서 데이터를 어떻게 관리하는지 익히시길 바라겠습니다.

 

도움이 되셨다면 공감 부탁드리겠습니다. 여러분의 공감이 정말 큰 힘이 됩니다.


감사합니다!

반응형