Docker를 사용하여 CentOS 6.4 서버에 일부 서비스를 배포하고 있으며 생성 된 데이터를 올바르게 백업하는 방법을 알아 내려고 노력 중입니다.
예를 들어, 서비스 중 하나는 사용자가 파일을 업로드 할 수있는 웹 응용 프로그램입니다. 이 컨테이너의 경우 /files
백업하려는 볼륨이 있습니다. 이 블로그 게시물 과 볼륨에 대한 도커 설명서 에서 언급했듯이 호스트 마운트는 이식성이 떨어지기 때문에 다소 찌그러진 것처럼 보입니다 .
같은 블로그 게시물 에서 볼륨의 파일에 액세스하기 위해 호스트 마운트가 필요 하지 않다는 docker inspect
것을 알고 있습니다. 파일 위치를 찾는 데 사용할 수 있습니다 .
그러나 여기 내 문제가 있습니다. 컨테이너와 관련 볼륨을 빌드하는 데 필요한 도커 파일 만 백업하는 것에 대해 생각하고있었습니다. 백업에서 모든 것을 복원해야 할 경우 어떤 볼륨 디렉토리가 어떤 컨테이너에 해당하는지 아는 방법은 무엇입니까? 컨테이너를 다시 빌드하면 ID와 볼륨 경로가 변경되므로 일치하는 추가 정보가 필요합니다. 실제로 모든 것을 복원하려면 백업해야 할 것이 있다면 무엇입니까?
답변
네가 옳아. 자체적으로 볼륨이있는 여러 컨테이너를 가질 수 있으므로 어떤 볼륨이 어떤 컨테이너에 해당하는지 추적해야합니다. 이를 수행하는 방법은 설정에 따라 다릅니다. 데이터 컨테이너에 이름 -data를 사용하므로 이미지가 속한 컨테이너가 분명합니다. 그렇게하면 다음과 같이 백업 할 수 있습니다.
VOLUME=`docker inspect $NAME-data | jq '.[0].Volumes["/path/in/container"]'`
tar -C $VOLUME . -czvf $NAME.tar.gz
이제 이미지를 다시 작성하고 데이터 컨테이너를 다시 작성하면됩니다.
cat $NAME.tar.gz | docker run -name $NAME-data -v /path/in/container \
-i busybox tar -C /path/int/container -xzf -
따라서 백업해야합니다.
- 도커 파일
- 음량
- 컨테이너의 볼륨 경로
- 볼륨이 속한 컨테이너의 이름
업데이트 : 컨테이너 및 해당 볼륨 (컨테이너)을 백업하는 도구를 만들었습니다 : https://github.com/discordianfish/docker-backup 및 백업을 생성하고 푸시 할 수있는 백업 이미지 s3 : https://github.com/discordianfish/docker-lloyd
답변
최신 Docker (에서 테스트 1.9.1, build 9894698
)에서 cp
명령을 사용할 수 있습니다 .
컨테이너에서 호스트로 디렉토리를 복사하는 방법의 예는 다음과 같습니다.
docker cp wordpress:/var/www/html backups/wordpress.`date +"%Y%m%d"`/
컨테이너에서 tar
파일 로 디렉토리를 복사하는 방법의 예는 다음과 같습니다 .
docker cp wordpress:/var/www/html - > backups/wordpress.`date +"%Y%m%d"`.tar
컨테이너에서 tar.gz
파일 로 디렉토리를 복사하는 방법에 대한 마지막 예는 다음과 같습니다.
docker cp wordpress:/var/www/html - | gzip > backups/wordpress.`date +"%Y%m%d"`.tar.gz