Docker 컨테이너를 데이터 볼륨으로 어떻게 백업 할 수 있습니까?


152

이 Docker 이미지 tutum / wordpress 를 사용하여 Wordpress 웹 사이트를 보여주었습니다. 최근 이미지가 MySQL 데이터의 볼륨을 사용한다는 것을 알았습니다.

그래서 문제는 이것입니다 : 컨테이너를 백업하고 복원하려면 이미지를 커밋하려고 시도한 다음 나중에 컨테이너를 삭제하고 커밋 된 이미지에서 새 컨테이너를 만들 수 있습니다. 그러나 그렇게하면 볼륨이 삭제되고 모든 데이터가 사라집니다.

컨테이너와 볼륨 데이터를 백업하는 간단한 방법이 있어야하지만 어디서나 찾을 수는 없습니다.


명명 된 및 명명되지 않은 볼륨, 이미지, 구성, 로그, 컨테이너 루트 파일 시스템, 데이터베이스 등을 포함하여 도커 프로젝트의 모든 것을 절대적으로 백업하는이 스크립트를 확인하십시오 : docker-compose-backup.sh .
Nick Sweeting

답변:


141

컨테이너를 되돌리려면 이미지를 커밋 한 다음 나중에 컨테이너를 삭제하고 커밋 된 이미지에서 새 컨테이너를 만들 수 있습니다. 그러나 그렇게하면 볼륨이 삭제되고 모든 데이터가 사라집니다.

도커 사용 설명서에서 설명하는 것처럼 데이터 볼륨 은 컨테이너 파일 시스템 외부에서 데이터를 유지하기위한 것입니다. 또한 여러 컨테이너간에 데이터를 쉽게 공유 할 수 있습니다.

Docker는 볼륨에서 데이터를 삭제하지 않지만 (와 관련된 컨테이너를 삭제하지 않는 한 docker rm -v) 도커 컨테이너가 참조하지 않는 볼륨을 댕글 링 볼륨 이라고 합니다. 이러한 매달린 볼륨 은 제거하기가 어렵고 액세스하기가 어렵습니다.

즉, 볼륨을 사용하는 마지막 컨테이너가 삭제 되 자마자 데이터 볼륨이 늘어지고 컨텐츠를 액세스하기가 어렵습니다.

이러한 댕글 링 볼륨을 방지하기 위해 트릭은 유지하려는 데이터 볼륨을 사용하여 추가 도커 컨테이너를 만드는 것입니다. 볼륨을 참조하는 도커 컨테이너가 항상 있어야합니다. 이렇게하면 해당 데이터 볼륨 내용에 대한 액세스 용이성을 잃지 않고 wordpress 앱을 실행하는 도커 컨테이너를 삭제할 수 있습니다.

이러한 컨테이너를 데이터 볼륨 컨테이너 라고 합니다 .

컨테이너와 볼륨 데이터를 백업하는 간단한 방법이 있어야하지만 어디서나 찾을 수는 없습니다.

백업 도커 이미지

도커 이미지를 백업하려면 docker save 명령을 사용하여 나중에 docker load 명령 으로 새 docker 이미지를 만드는 데 사용할 수있는 tar 아카이브를 생성합니다 .

백업 도커 컨테이너

다른 방법으로 도커 컨테이너를 백업 할 수 있습니다

  • docker commit 명령을 사용하여 docker 컨테이너 현재 상태를 기반으로 새 docker 이미지를 커밋
  • docker export 명령을 사용하여 docker container 파일 시스템을 tar 아카이브로 내 보냅니다 . 나중에 docker import 명령을 사용하여 해당 tar 아카이브에서 새 docker 이미지를 만들 수 있습니다 .

이러한 명령은 docker container 계층 파일 시스템 만 백업합니다. 데이터 볼륨은 제외됩니다 .

백업 도커 데이터 볼륨

데이터 볼륨을 백업하려면 백업하려는 볼륨을 사용하고 tar 명령을 실행하여 도커 사용 설명서에 설명 된대로 볼륨 내용의 아카이브를 생성하는 새 컨테이너를 실행할 수 있습니다 .

특별한 경우 데이터 볼륨은 MySQL 서버의 데이터를 저장하는 데 사용됩니다. 따라서이 볼륨에 대한 tar 아카이브를 내보내려면 먼저 MySQL 서버를 중지해야합니다. 그렇게하려면 워드 프레스 컨테이너를 중지해야합니다.

MySQL 데이터 백업

다른 방법은 mysqldump 명령으로 데이터베이스 덤프를 생성하기 위해 MySQL 서버에 원격으로 연결하는 것 입니다. 그러나 이것이 작동하려면 MySQL 서버가 원격 연결을 허용하고 원격으로 연결할 수있는 사용자를 갖도록 구성되어야합니다. 사용중인 워드 프레스 도커 이미지의 경우에는 그렇지 않을 수 있습니다.


편집하다

Docker는 최근 Docker 볼륨 플러그인 을 도입 하여 볼륨 처리를 공급 업체가 구현 한 플러그인으로 위임 할 수 있습니다.

docker run명령에는 -v옵션에 대한 새로운 동작이 있습니다. 이제 볼륨 이름 을 전달할 수 있습니다. 이러한 방식으로 생성 된 볼륨은 이름지정 되고 나중에 참조하기 쉽기 때문에 매달려있는 볼륨 문제를 완화합니다 .

편집 2

Docker는 docker volume prune모든 매달려있는 볼륨을 쉽게 삭제 하는 명령을 도입했습니다 .


34
실제로 쉽게 움직일 수있는 용기를 만드는 데 더 관심이 있는데, 움직일 수없는 용기의 요점을 이해하지 못합니다.
pguardiario

이 경우 Flocker
Thomasleveil

9
Docker가 데이터 볼륨을 자동으로 삭제하지 않습니다. Data volumes are designed to persist data, independent of the container’s life cycle. Docker therefore never automatically delete volumes when you remove a container, nor will it “garbage collect” volumes that are no longer referenced by a container. 데이터 있도록 전용 용기는 기존 있습니다
안드리 Zarubin

2
에 대한 원격 연결이 필요하지 않습니다 mysqldump. 컨테이너에 껍질을 벗기고 덤프 한 다음로 복사하십시오 docker cp.
jiggunjer

@AndriiZarubin 다시 : data only container obsolete?전혀. 데이터 전용 컨테이너는 docker exec data-container tar -czf snapshot.tgz /data그때 등에 컨테이너를 제공합니다 docker cp data-container:snapshot.tgz ./snapshot.tgz. 컨테이너를 오래 tail -f /dev/null사용하려면 최소한의 리소스를 사용하여 종료되지 않는 것과 같은 명령을 만드십시오 .
제시 치숄

31

업데이트 2

원시 단일 볼륨 백업 bash 스크립트 :

#!/bin/bash
# This script allows you to backup a single volume from a container
# Data in given volume is saved in the current directory in a tar archive.
CONTAINER_NAME=$1
VOLUME_NAME=$2

usage() {
  echo "Usage: $0 [container name] [volume name]"
  exit 1
}

if [ -z $CONTAINER_NAME ]
then
  echo "Error: missing container name parameter."
  usage
fi

if [ -z $VOLUME_NAME ]
then
  echo "Error: missing volume name parameter."
  usage
fi

sudo docker run --rm --volumes-from $CONTAINER_NAME -v $(pwd):/backup busybox tar cvf /backup/backup.tar $VOLUME_NAME

원시 단일 볼륨 복원 bash 스크립트 :

#!/bin/bash
# This script allows you to restore a single volume from a container
# Data in restored in volume with same backupped path
NEW_CONTAINER_NAME=$1

usage() {
  echo "Usage: $0 [container name]"
  exit 1
}

if [ -z $NEW_CONTAINER_NAME ]
then
  echo "Error: missing container name parameter."
  usage
fi

sudo docker run --rm --volumes-from $NEW_CONTAINER_NAME -v $(pwd):/backup busybox tar xvf /backup/backup.tar

사용법은 다음과 같습니다.

$ volume_backup.sh old_container /srv/www
$ sudo docker stop old_container && sudo docker rm old_container
$ sudo docker run -d --name new_container myrepo/new_container
$ volume_restore.sh new_container

가정 : 백업 파일 이름은 backup.tar이며 백업 및 복원 스크립트와 동일한 디렉토리에 있으며 볼륨 이름은 컨테이너간에 동일합니다.

최신 정보

컨테이너에서 볼륨을 백업하는 것은 데이터 컨테이너에서 볼륨을 백업하는 것과 다르지 않습니다.

볼륨은 컨테이너에 연결된 경로 일 뿐이므로 프로세스는 동일합니다.

docker-backup이 동일한 컨테이너 볼륨에서도 작동하는지 모르겠지만 다음을 사용할 수 있습니다.

sudo docker run --rm --volumes-from yourcontainer -v $(pwd):/backup busybox tar cvf /backup/backup.tar /data

과:

sudo docker run --rm --volumes-from yournewcontainer -v $(pwd):/backup busybox tar xvf /backup/backup.tar

업데이트 종료

도커 볼륨 컨테이너를 백업하고 복원 할 수있는 유용한 도구가 있습니다.

https://github.com/discordianfish/docker-backup

컨테이너가 다음과 같은 일부 컨테이너 볼륨에 연결된 경우 :

$ docker run --volumes-from=my-data-container --name my-server ...

다음과 같이 모든 볼륨을 백업 할 수 있습니다.

$ docker-backup store my-server-backup.tar my-server

다음과 같이 복원하십시오.

$ docker-backup restore my-server-backup.tar

또는 공식적인 방법을 따를 수 있습니다.

한 호스트에서 다른 호스트로 데이터 전용 볼륨을 포팅하는 방법은 무엇입니까?


아니요. "-볼륨에서"상황이 아니라 데이터가 지속되지 않는 도커 파일에 볼륨이 정의되어 있습니다. tuer / lamp에 대한 dockerfile 을 보면 내가 무슨 뜻인지 알 수 있습니다.
pguardiario

볼륨이 볼륨이고 컨테이너가 컨테이너이기 때문에 이미 제공 한 답변은 모든 종류의 볼륨에 적합합니다. 볼륨 관점에서 컨테이너를 데이터 컨테이너로 사용하면 차이가 없습니다
tommasop

dockerfile에 정의 된 볼륨은 컨테이너가 손상되면 삭제됩니다. 따라서 컨테이너를 이동할 때 해당 데이터를 다시 가져올 수있는 방법이 없습니다.
pguardiario

컨테이너를 옮기기 전에 데이터를 꺼내고 컨테이너를 다시 시작하고 데이터를 다시 넣어야합니다.
tommasop

1
오류가 발생 unknown shorthand flag: 'r' in -rm.했습니다 --rm. (Docker 버전 18.09.5, 빌드 e8ff056)
kuga

22

마운트 된 볼륨 만 백업 해야하는 경우 Dockerhost 에서 폴더를 복사 하면 됩니다.

참고 : Ubuntu를 사용하는 경우 Dockerhost 가 로컬 시스템입니다. 당신은에있는 경우 , Dockerhost는 가상 머신이다.

우분투에서

여기에서 볼륨이있는 모든 폴더를 찾을 수 있습니다. 원하는 위치에 /var/lib/docker/volumes/복사하여 보관할 수 있습니다.

MAC에서

우분투만큼 쉽지 않습니다. VM에서 파일을 복사해야합니다.

다음은 볼륨이있는 모든 폴더를 가상 시스템 (Docker 서버가 실행중인)에서 로컬 시스템으로 복사하는 방법에 대한 스크립트입니다. 우리는 docker-machine VM이 default 라고 가정합니다 .

docker-machine ssh default sudo cp -v -R /var/lib/docker/volumes/ /home/docker/volumes

docker-machine ssh default sudo chmod -R 777 /home/docker/volumes

docker-machine scp -R default:/home/docker/volumes ./backup_volumes

docker-machine ssh default sudo rm -r /home/docker/volumes

현재 디렉토리에 ./backup_volumes 폴더를 만들고 모든 볼륨을이 폴더에 복사합니다.

다음은 로컬 디렉토리 ( ./backup_volumes )에서 Dockerhost 시스템으로 저장된 모든 볼륨을 복사하는 방법에 대한 스크립트 입니다.

docker-machine scp -r ./backup_volumes default:/home/docker

docker-machine ssh default sudo mv -f /home/docker/backup_volumes /home/docker/volumes

docker-machine ssh default sudo chmod -R 777 /home/docker/volumes

docker-machine ssh default sudo cp -v -R /home/docker/volumes /var/lib/docker/

docker-machine ssh default sudo rm -r /home/docker/volumes

이제 다음 방법으로 작동하는지 확인할 수 있습니다.

docker volume ls

/var/lib/docker/volumes우분투 에서 해당 폴더를 백업하려면 컨테이너를 종료해야 합니까?
오전 10시 56 분

2
필요하지 않습니다. 언제든지 원하는 폴더를 복사 할 수 있습니다.
Andrii Dvoiak

4
기술적으로는 가능하지만 사본이 원자 적이 지 않고 볼륨에 동시 쓰기가있을 수 있으므로 데이터 손상 문제에 노출 될 수 있습니다. 컨테이너를 먼저 중지하고 싶습니다.
Alessandro S.

13

볼륨 이름이이라고 가정 해 봅시다 data_volume. 다음 명령을 사용하여 이름이 지정된 도커 이미지와 볼륨을 백업 및 복원 할 수 있습니다 data_image.

백업하기 위해:

docker run --rm --mount source=data_volume,destination=/data alpine tar -c -f- data | docker run -i --name data_container alpine tar -x -f-
docker container commit data_container data_image
docker rm data_container

복원하려면

docker run --rm data_image tar -c -f- data | docker run -i --rm --mount source=data_volume,destination=/data alpine tar -x -f-

실시간 백업입니까?
Kang Andrew

2
동일한 볼륨을 여러 도커에 마운트 할 수 있으므로 실시간 백업입니다. 예 : Mysql 컨테이너에 마운트 된 볼륨을 백업 할 수 있습니다 (데이터 손상이 없다고 가정). 그러나 데이터 손상에 대한 우려로 서비스를 중단해야하는 서비스는 실시간이 아닙니다.
Sahil Ahuja 2016 년

9

나는 이것이 오래되었다는 것을 알고 있지만 데이터 컨테이너 (백업)를 docker hub로 푸시하는 잘 문서화 된 솔루션이 없다는 것을 알고 있습니다. 방금 https://dzone.com/articles/docker-backup-your-data-volumes-to-docker-hub 에서 방법에 대한 간단한 예를 게시했습니다.

결론은 다음과 같습니다

도커 자습서에서는 데이터 볼륨을 로컬로 백업 및 복원 할 수 있다고 제안합니다. 우리는이 기술을 사용하고 몇 줄을 더 추가하여 원하는 위치로 쉽게 복원 할 수 있도록 도커 허브에 백업을 푸시합니다. 이제 시작하겠습니다. 다음 단계를 따르십시오.

data-container-to-backup이라는 데이터 컨테이너에서 데이터 볼륨을 백업하십시오.

docker run --rm --volumes-from data-container-backup --name tmp-backup -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /folderToBackup

이 tar 파일을 새 컨테이너로 확장하여 이미지의 일부로 커밋 할 수 있습니다.

docker run -d -v $(pwd):/backup --name data-backup ubuntu /bin/sh -c "cd / && tar xvf /backup/backup.tar"

원하는 태그 ($ VERSION)로 이미지를 커밋하고 푸시

docker commit data-backup repo/data-backup:$VERSION
docker push repo/data-backup:$VERSION

마지막으로 정리하자

docker rm data-backup
docker rmi $(docker images -f "dangling=true" -q)

이제 우리는 repo에 백업 파일과 폴더가있는 파일 시스템 인 data-backup이라는 이미지를 가지고 있습니다. 이 이미지 (일명 백업에서 복원)를 사용하려면 다음을 수행하십시오.

데이터 백업 이미지로 데이터 컨테이너를 실행하십시오.

run -v /folderToBackup --entrypoint "bin/sh" --name data-container repo/data-backup:${VERSION}

데이터 conainter의 볼륨으로 whatEver 이미지를 실행하십시오.

docker run --volumes-from=data-container repo/whatEver

그게 다야.

이 작업에 대한 설명서가 없다는 것에 놀랐습니다. 누군가 도움이되기를 바랍니다. 나는 이것에 대해 생각하는 데 시간이 걸렸다는 것을 안다.


8

프로젝트에서 docker-compose를 사용하는 경우 볼륨을 백업하고 복원하는 방법이 있습니다.

docker-compose.yml

기본적으로 docker-compose.yml 파일에 서비스를 추가 db-backup하고 db-restore볼륨 이름에 맞게 조정합니다. dbdata이 예에서는 제 볼륨의 이름이 지정 되었습니다.

version: "3"

services:
  db:
    image: percona:5.7
    volumes:
      - dbdata:/var/lib/mysql

  db-backup:
    image: alpine    
    tty: false
    environment:
      - TARGET=dbdata
    volumes:
      - ./backup:/backup
      - dbdata:/volume
    command: sh -c "tar -cjf /backup/$${TARGET}.tar.bz2 -C /volume ./"

  db-restore:
    image: alpine    
    environment:
      - SOURCE=dbdata
    volumes:
      - ./backup:/backup
      - dbdata:/volume
    command: sh -c "rm -rf /volume/* /volume/..?* /volume/.[!.]* ; tar -C /volume/ -xjf /backup/$${SOURCE}.tar.bz2"

부패를 피하십시오

데이터 일관성을 위해 백업 또는 복원하기 전에 DB 컨테이너를 중지하십시오.

docker-compose stop db

백업

기본 대상 ( backup/dbdata.tar.bz2) 으로 백업하려면

docker-compose run --rm db-backup

또는 대체 대상 이름을 지정하려면 다음을 수행하십시오.

docker-compose run --rm -e TARGET=mybackup db-backup

복원

에서 복원하려면 다음을 backup/dbdata.tar.bz2수행하십시오.

docker-compose run --rm db-restore

또는 다음을 사용하여 특정 파일에서 복원하십시오.

docker-compose run --rm -e SOURCE=mybackup db-restore

이 접근법을 만들기 위해 https://loomchild.net/2017/03/26/backup-restore-docker-named-volumes/의 명령을 조정했습니다 .


5

다음 명령은 명명 된 모든 데이터 볼륨이 마운트 된 컨테이너에서 tar를 실행하고 출력을 파일로 리디렉션합니다.

docker run --rm `docker volume list -q | egrep -v '^.{64}$' | awk '{print "-v " $1 ":/mnt/" $1}'` alpine tar -C /mnt -cj . > data-volumes.tar.bz2

문제가 발생한 경우 결과 아카이브를 테스트하십시오.

tar -tjf data-volumes.tar.bz2

4

아카이브에 간단한 백업이 필요하면 내 작은 유틸리티를 사용해보십시오 : https://github.com/loomchild/volume-backup

지원:

docker run -v some_volume:/volume -v /tmp:/backup --rm loomchild/volume-backup backup archive1

아카이브 파일에 이름이 지정된 볼륨 some_volume/tmp/archive1.tar.bz2아카이브합니다

복원:

docker run -v some_volume:/volume -v /tmp:/backup --rm loomchild/volume-backup restore archive1

아카이브 파일 에서 이름이 지정된 볼륨 을 지우고 복원 합니다.some_volume/tmp/archive1.tar.bz2

자세한 정보 : https://medium.com/@loomchild/backup-restore-docker-named-volumes-350397b8e362


비슷한 도구 인 github.com/01e9/docker-backup을 만들었습니다. 백업 아카이브를 생성하여 Resilio 동기화 디렉토리에 추가합니다
Oleg

2

나는 단순히 docker-backup 이라는 데이터 및 mysql 컨테이너의 백업을 조정하고 시작하는 도구를 만들었습니다 . 도커 허브 에는 즉시 사용 가능한 이미지가 있습니다.

주로 오케스트레이션이므로 Bash로 작성되었습니다. 그것은 사용하는 duplicity실제 백업 엔진. 현재 FTP (S) 및 Amazon S3로 백업 할 수 있습니다.

구성은 매우 간단합니다. 백업 할 대상과 위치를 설명하는 구성 파일을 YAML로 작성하십시오.

데이터 컨테이너의 경우 컨테이너와 공유 된 볼륨을 자동으로 마운트하여 백업 및 처리합니다. mysql 컨테이너의 경우 컨테이너를 연결하고 컨테이너와 함께 번들로 제공된 mysqldump를 실행하고 결과를 처리합니다.

최신 docker-engine 릴리스에서 최신이 아닌 Docker-Cloud를 사용하고 응용 프로그램 컨테이너에 백업 프로세스를 포함시키지 않고 Docker 방식을 채택하고 싶기 때문에 작성했습니다.


2

전체 백업을 원하면 몇 가지 단계를 수행해야합니다.

  1. 컨테이너를 이미지에 커밋
  2. 이미지 저장
  3. 컨테이너에 볼륨 마운트 지점의 tar 파일을 작성하여 컨테이너 볼륨을 백업하십시오.
  4. 데이터베이스 컨테이너에 대해서도 1-3 단계를 반복하십시오.

컨테이너를 이미지에 Docker 커밋하는 것만으로는 컨테이너에 연결된 볼륨이 포함되지 않습니다 ( Docker commit documentation 참조 ).

" 커밋 작업에는 컨테이너 내부에 마운트 된 볼륨에 포함 된 데이터가 포함되지 않습니다. "


1

커맨드 라인에서 비전 연산자를 입력하고 싶다면 수동 컨테이너 백업 기술을 좋아할 것입니다. 컨테이너를보다 빠르고 효율적으로 백업 할 수있는 더 빠르고 효율적인 방법이 있습니다. 여기에 지침을 작성했습니다 : https://www.morpheusdata.com/blog/2017-03-02-how-to-create-a-docker-backup-with-morpheus

1 단계 : 모든 클라우드에 도커 호스트 추가 Morpheus 지원 사이트의 자습서에 설명 된대로 몇 초 만에 선택한 클라우드에 Docker 호스트를 추가 할 수 있습니다. 기본 Morpheus 탐색 모음에서 인프라를 선택하여 시작하십시오. 인프라 창의 상단에서 호스트를 선택하고 오른쪽 상단의 "+ 컨테이너 호스트"버튼을 클릭하십시오.

Morpheus를 통해 Docker 호스트를 클라우드에 백업하려면 인프라 화면으로 이동하여 "+ Container Hosts"메뉴를 엽니 다.

메뉴에서 컨테이너 호스트 유형을 선택하고 그룹을 선택한 다음 이름, 설명, 가시성, 클라우드 선택 및 태그 입력 (선택 사항)의 5 개 필드에 데이터를 입력하십시오. 다음을 클릭 한 후 서비스 계획을 선택하여 호스트 옵션을 구성하십시오. 볼륨, 메모리 및 CPU 수 필드는 선택한 계획에 사용자 지정 옵션이 활성화 된 경우에만 표시됩니다.

여기에서 볼륨을 추가 및 크기 조정하고 메모리 크기 및 CPU 수를 설정하고 네트워크를 선택합니다. OS 사용자 이름과 비밀번호, 도메인 이름 및 호스트 이름을 구성 할 수도 있습니다. 기본적으로 이전에 입력 한 컨테이너 이름입니다. 다음을 클릭 한 다음 자동화 워크 플로를 추가합니다 (선택 사항). 마지막으로 설정을 검토하고 완료를 클릭하여 저장합니다.

2 단계 : 퍼블릭 또는 프라이빗 클라우드에 Docker Registry 통합 추가 Adam Hicks는 다른 Morpheus 튜토리얼에서 프라이빗 Docker Registry와 통합하는 것이 얼마나 간단한지를 설명합니다. Morpheus를 사용하여 공용 Docker API를 사용하여 Docker의 공용 허브로 이미지를 프로비저닝하는 데 추가 구성이 필요하지 않습니다.

기본 탐색 모음의 관리 탭에서 통합을 선택한 다음 화면 오른쪽에서 "+ 새 통합"버튼을 선택하십시오. 표시되는 통합 창의 유형 드롭 다운 메뉴에서 Docker 저장소를 선택하고 이름을 입력 한 후 개인 레지스트리 API 엔드 포인트를 추가하십시오. 사용중인 레지스트리의 사용자 이름과 비밀번호를 제공하고 변경 사항 저장 버튼을 클릭하십시오.

Morpheus“New Integration”대화 상자를 통해 Docker Registry를 개인 클라우드와 통합하십시오.

방금 생성 한 통합을 프로비저닝하려면 인스턴스 생성 대화 상자의 유형에서 Docker를 선택하고 구성 탭의 Docker Registry 드롭 다운 메뉴에서 레지스트리를 선택한 다음 Docker 컨테이너처럼 프로비저닝을 계속하십시오.

3 단계 : 백업 관리 Docker 호스트를 추가하고 레지스트리를 통합하면 프로비저닝 한 각 인스턴스에 대해 백업이 자동으로 구성되고 수행됩니다. Morpheus 지원은 백업보기, 인스턴스 백업 작성 및 서버 백업 작성에 대한 지시 사항을 제공합니다.


0

내 경우처럼 간단한 사례가있는 경우 다음을 수행 할 수 있습니다.

  1. 컨테이너의 기본 이미지를 확장하는 Dockerfile을 만듭니다.
  2. 볼륨이 파일 시스템에 매핑되어 있다고 가정하므로 해당 파일 / 폴더를 이미지에 추가 할 수 있습니다 ADD folder destination
  3. 끝난!

예를 들어, 홈 디렉토리에있는 볼륨의 데이터가 있다고 가정하면 /home/mydata다음을 실행할 수 있습니다.

DOCKERFILE=/home/dockerfile.bk-myimage
docker build --rm --no-cache -t $IMAGENAME:$TAG -f $DOCKERFILE /home/pirate

DOCKERFILE이 다음과 같은 파일을 가리키는 경우 :

FROM user/myimage
MAINTAINER Danielo Rodríguez Rivero <example@gmail.com>

WORKDIR /opt/data
ADD mydata .

나머지는 기본 이미지에서 상속됩니다. 이제 해당 이미지를 docker cloud로 푸시하면 사용자가 컨테이너에서 직접 데이터를 사용할 수 있습니다.


볼륨을 결국 이미지에 구우려면 볼륨을 사용하는 것이 중요합니다.
jiggunjer

볼륨이있는 @jiggunjer를 사용하면 컨테이너의 데이터를 재정의 할 수 있습니다.
Danielo515

를 사용하여 볼륨없이 데이터를 무시할 수 있습니다 docker cp.
jiggunjer

0

문제 : 데이터 볼륨이 포함 된 이미지 컨테이너를 백업하려고하지만이 옵션은 상자에서 벗어난 것이 아닙니다. 직접적이고 사소한 방법은 볼륨 경로를 복사하고 도커 이미지를 백업하여 다시로드하고 연결하는 것입니다. 양자. 그러나이 솔루션은 서투른 것처럼 보이며 지속 가능하고 유지 관리 할 수없는 것 같습니다. 매번이 흐름을 만드는 cron 작업을 만들어야합니다.

솔루션 : dockup -Docker 이미지를 사용하여 Docker 컨테이너 볼륨을 백업하고 s3에 업로드하십시오 (Docker + Backup = dockup). dockup은 AWS 자격 증명을 사용하여 환경 변수에 따라 이름으로 새 버킷을 생성하고 구성된 볼륨을 가져오고 tarballed, ggzpping, time-stamped 및 S3 버킷으로 업로드됩니다.

단계 :

  1. 구성 파일을 구성 docker-compose.yml하고 여기에 연결하십시오 env.txt. 데이터는 전용 보안 s3 버킷에 업로드되고 DRP 실행시 다시로드 될 수 있어야합니다. 구성 실행에있는 볼륨의 경로를 확인하기 위해 docker inspect <service-name>찾습니다 볼륨 :

"볼륨": { "/ etc / service-example": {}, "/ service-example": {}},

  1. 구성 파일의 컨텐츠를 편집하여 env.txt프로젝트 경로에 배치하십시오.

    AWS_ACCESS_KEY_ID=<key_here>
    AWS_SECRET_ACCESS_KEY=<secret_here>
    AWS_DEFAULT_REGION=us-east-1
    BACKUP_NAME=service-backup
    PATHS_TO_BACKUP=/etc/service-example /service-example
    S3_BUCKET_NAME=docker-backups.example.com
    RESTORE=false
    
  2. 도킹 컨테이너 실행

$ docker run --rm \
--env-file env.txt \
--volumes-from <service-name> \
--name dockup tutum/dockup:latest
  1. 그런 다음 s3 버킷에 관련 데이터가 포함되어 있는지 확인하십시오

-1

이것은 볼륨 폴더 백업 방법입니다.
docker registry infra가있는 경우이 방법이 매우 유용합니다.
이것은 zip 파일을 쉽게 옮기기 위해 docker registry를 사용합니다.

#volume folder backup script. !/bin/bash

#common bash variables. set these variable before running scripts
REPO=harbor.otcysk.org:20443/levee
VFOLDER=/data/mariadb
TAG=mariadb1

#zip local folder for volume files
tar cvfz volume-backup.tar.gz $VFOLDER

#copy the zip file to volume-backup container.
#zip file must be in current folder.
docker run -d -v $(pwd):/temp --name volume-backup ubuntu \
       bash -c "cd / && cp /temp/volume-backup.tar.gz ."


#commit for pushing into REPO
docker commit volume-backup $REPO/volume-backup:$TAG

#check gz files in this container
#docker run --rm -it --entrypoint bash --name check-volume-backup \
        $REPO/volume-backup:$TAG

#push into REPO
docker push $REPO/volume-backup:$TAG

다른 서버에서

#pull the image in another server
docker pull $REPO/volume-backup:$TAG

#restore files in another server filesystem
docker run --rm -v $VFOLDER:$VFOLDER --name volume-backup $REPO/volume-backup:$TAG \
       bash -c "cd / && tar xvfz volume-backup.tar.gz"

이 볼륨 폴더를 사용하는 이미지를 실행하십시오.
하나의 런 이미지와 하나의 볼륨 zip 파일이 모두있는 이미지를 쉽게 만들 수 있습니다.
그러나 다양한 이유로 (이미지 크기, 항목 명령 등) 권장하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.