volume Backup/Restore

Backup

백업 대상

  • 백업 대상 컨테이너와 volume이 아래와 같을 경우 해당 volume에 대한 백업이 필요한 상황
  • dbdata volume 생성 및 컨테이너에 dbdata 이름으로 디렉토리 생성하여 연결됨
  • volume 이름을 지정하지 않았기 대문에 volume 조회 명령어를 통해 조회하면 임의의 해쉬 값으로 생성된 것을 확인 할수 있다.
$ docker run -v /dbdata --name dbstore ubuntu /bin/bash

백업 실행

  1. volume 사용을 못하도록 백업 대상 volume을 사용하는 컨테이너 중지
  2. 백업 실행용 임시 컨테이너를 생성 - 백업파일 생성(tar) 용도/ 사용 후 컨테이너 삭제
    • volumes-from [컨테이너 이름/ID]
    • 대상 컨테이너(dbstore)에서 사용하는 모든 volume을 마운트
    • 해당 컨테이너에서 지정했던 디렉토리 이름도 똑같이 연결이 됨 /dbdata 이름으로 폴더가 연결됨
  3. -v $(pwd):/backup : 백업 파일을 저장하기 하기위해 명령어를 실행하는 현재 디렉토리를 컨테이너의 backup 디렉토리로 연결
  4. tar cvf - dbdata 디렉토리를 압축 후 스토리지로 연결한 폴더(backup)에 tar 생성
  5. --rm 옵션에 때문에 해당 컨테이너는 압축 후 삭제
  6. 호스트 머신의 아래 명령어를 실행한 디렉토리에 backup.tar 파일이 생성되어 있다.
$ docker run --rm --volumes-from dbstore -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata

Restore

복원 대상

  • 아래와 같이 생성한 컨테이너에 volume 복원을 할 경우
$ docker run -v /dbdata --name dbstore2 ubuntu /bin/bash

복원 실행

  1. 복원을 실행할 임시 컨테이너를 생성 - 백업 파일을 dbdata volume에 압축해제 하기위해
  2. --rm : 복원이 끝낙 자동 삭제
  3. --volumes-from dbstore2: 복원 대상 컨테이너를 지정 - dbstore2에서 사용하는 volume을 연결
    . -v : 복원할 파일(backup.tar)의 위치를 bind mount를 이용하여 연결
  4. -c "cd /dbdata && tar xvf /backup/backup.tar --strip 1" :
    • 임시 컨테이너의 dbdata 폴더로 이동 후 backup폴더 위치에 있는 백업 파일 압축을 해제
    • strip 1 : 압축 파일 이름으로 폴더를 생성후 압축을 실행하지 않고 지정된 폴더에 바로 압축을 해제 하기 위해 해당 옵션 사용
    • strip 1 옵션이 없이 압축 해제 할 경우 /dbdata 폴더에 압축 파일이름으로 폴더가 생성되면서 압축이 해제됨
      • /dbdata/backup/
$ docker run --rm --volumes-from dbstore2 -v $(pwd):/backup ubuntu bash -c "cd /dbdata && tar xvf /backup/backup.tar --strip 1"

기타

  • volumes-from 을 사용하지 않고 backup/restore 실행 할 경우
# volumeq 백업 대상 - tod
$ docker run -di -v todo:/tod -v todo2:/tod2 --name ubuntu ubuntu

# volume 백업 실행
$ docker run --rm -v todo:/tod -v $(pwd):/backup ubuntu tar cvf /backup/tod.tar /tod

# 복원 대상 컨테이너
docker run -di -v todo-new:/todo --name ubuntu-new ubuntu
# 백업 파일 todo-new volume에 압축 해제
docker run --rm -v todo-new:/todo -v $(pwd):/backup ubuntu bash -c "cd /todo && tar xvf /backup/tod.tar --strip 1"

'서버' 카테고리의 다른 글

[ubuntu] ansible 설치  (0) 2023.02.02
[Vagrant] - 테스트 서버 생성  (0) 2022.04.27
[Docker] 컨테이너간 통신  (0) 2021.09.07
Centos 7.4 다운로드  (0) 2018.05.21
DB validationQuery  (0) 2013.10.22

+ Recent posts