Programming > Docker

[볼륨-2] 데이터 백업/복원 tar

샘플 실행 명령어 전체

1) 볼륨컨테이너(amc) 만들고 테스트 파일을 생성한다.
docker run -it -v /DATA --name amc busybox /bin/sh
    echo "test data by ...con" > /DATA/mmc.txt
    exit
2) 1회성(--rm) 더미 컨테이너를 이용해 볼륨을 압축하고 더미컨테이너는 없앤다.
docker run --rm --volumes-from amc -v $(pwd):/back busybox tar cvf /back/backup.tar /DATA
3) 볼륨컨테이너를 일단 삭제한다.
docker rm amc
4) 복원할 신규 컨테이너(emc)를 만든다.
docker run -it -d -v /MYDATA --name emc busybox
5) 1회성 더미 컨테이너로 복원한다. (--strip-components는 불필요한 절대경로 벗겨내기) >> TAR명령 참조
docker run --rm --volumes-from emc -v $(pwd):/tempdir busybox tar xvf /tempdir/backup.tar -C /MYDATA --strip-components 1

1) 백업대상 컨테이너 준비

※ 컨테이너 생성 (데이터 컨테이너 또는 그외 운영용 컨테이너)

$ docker run -it -v /DATA --name dcv001 busybox /bin/sh

dcv001 이라는 컨테이너와 그안에 볼륨디렉토리를 /DATA를 생성한다.

아래는 테스트용 데이터인 mmc.txt파일을 /DATA에 생성하고, 컨테이너를 빠져나온다.

컨테이너는 실행중 또는 정지중이든 상관 없다.

# echo "test data by ...con" > /DATA/mmc.txt
# exit

 

2) 데이터를 백업한다.

$ docker run --rm --volumes-from dcv001 -v $(pwd):/back busybox tar cvf /back/backup.tar /DATA

$ docker run --rm

컨테이너를 생성하는데 종료시 컨테이너를 삭제한다. 즉, 임시용 컨테이너

--volumes-from dcv001

dcv001 컨테이너를 임시컨테이너의 볼륨으로 연동시킨다.

-v $(pwd):/back

호스트머신의 현재 디렉토리를 임시컨테이너의 /back 디렉토리와 연동시킨다.

busybox tar cvf /back/backup.tar /DATA

베이스OS를 busybox로 사용해 tar명령어를 실행한다. 
이는 임시 컨테이너 안에서 tar가 실행되는 것으로 /back폴더안에 backup.tar로 /DATA를 압축하라는 명령어이다
/DATA는 dcv001컨테이너에 연동된것이고, /back는 호스트머신의 현재폴더이므로, dcv001컨테이너의 /DATA디렉토리를 호스트머신의 현재 디렉토리에 backup.tar 파일로 압축된다.

 

3) 데이터 복원

※ 복원할 컨테이너를 선택한다. (임시로 생성)

$ docker run -it -d -v /MYDATA --name emc001 centos

※ 데이터를 복원한다.

복원대상 컨테이너는 실행중이든 정지중이든 상관없이 실행된다.

$ docker run --rm --volumes-from emc001 -v $(pwd):/tempdir busybox tar xvf /tempdir/backup.tar -C /MYDATA

$ docker run --rm --volumes-from emc001

끝나면 사라지는 임시컨테이너를 생성하는데 컨테이너 emc001의 볼륨을 연동해서 생성한다.

-v $(pwd):/tempdir

호스트머신의 현재 디렉토리를 임시컨테이너의 /tempdir에 매핑시킨다.

tar xvf /tempdir/backup.tar -C /MYDATA

압축을 해제하는데 /tempdir(호스트의 현재디렉토리) 폴더의 backup.tar을 압축해제하는데 임시컨테이너의 /MYDATA에 압축을 해제한다. /MYDATA는 복원대상 컨테이너와 동일