Как я могу сделать резервную копию Docker-контейнера с его объемами данных?

152

Я использовал эту пачку Docker-изображений / WordPress, чтобы продемонстрировать сайт Wordpress. Недавно я обнаружил, что изображение использует объемы для MySQL-данных.

Таким образом, проблема заключается в следующем: если я хочу сделать резервную копию и восстановить контейнер, я могу попытаться зафиксировать образ, а затем удалить контейнер и создать новый контейнер из зафиксированного образа. Но если я сделаю это, том будет удален, и все мои данные исчезнут.

Должен быть какой-то простой способ сделать резервную копию моего контейнера плюс его объемные данные, но я нигде не могу его найти.

pguardiario
источник
Посмотрите этот сценарий, который я написал и который поддерживает абсолютно все в проекте Docker, включая именованные и безымянные тома, изображения, конфигурацию, журналы, корневую файловую систему контейнера, базы данных и многое другое: docker-compose-backup.sh .
Ник Свитинг

Ответы:

142

Если я хочу вернуть контейнер, я могу попытаться зафиксировать изображение, а затем удалить контейнер и создать новый контейнер из зафиксированного изображения. Но если я сделаю это, том будет удален и все мои данные исчезнут

Как объясняется в руководстве пользователя докера, тома данных предназначены для сохранения данных вне файловой системы контейнера. Это также облегчает обмен данными между несколькими контейнерами.

Хотя Docker никогда не удалит данные в томах (если только вы не удалите связанный контейнер с ними docker rm -v), тома, на которые не ссылается ни один контейнер Docker , называются висячими томами . От этих свисающих томов трудно избавиться и труднее получить доступ.

Это означает, что, как только последний контейнер, использующий том, будет удален, том данных будет зависать, и его содержимое становится труднодоступным.

Чтобы предотвратить эти висячие тома, нужно создать дополнительный докер-контейнер, используя том данных, который вы хотите сохранить; так что всегда будет хотя бы тот докер контейнер, ссылающийся на том. Таким образом, вы можете удалить Docker-контейнер, на котором запущено приложение WordPress, без потери легкости доступа к содержимому тома данных.

Такие контейнеры называются контейнерами с объемом данных .

Должен быть какой-то простой способ сделать резервную копию моего контейнера плюс объемные данные, но я нигде не могу его найти.

резервное копирование образов докера

Чтобы создать резервные копии образов Docker, используйте команду docker save, которая создаст архив tar, который впоследствии можно будет использовать для создания нового образа docker с помощью команды загрузки docker .

резервные док-контейнеры

Вы можете сделать резервную копию контейнера Docker различными способами

  • совершая новый докер образ на основе состояния текущего докер контейнера с помощью докер фиксации команды
  • экспортируя файловую систему контейнера docker в виде архива tar с помощью команды экспорта docker . Позже вы сможете создать новый образ Docker из этого архива tar с помощью команды импорта Docker .

Имейте в виду, что эти команды будут только создавать резервные копии файловой системы многоуровневого контейнера Docker. Это исключает объемы данных .

тома данных резервного копирования

Для резервного копирования тома данных вы можете запустить новый контейнер, используя том, для которого вы хотите выполнить резервное копирование, и выполнить команду tar, чтобы создать архив содержимого тома, как описано в руководстве пользователя докера .

В вашем конкретном случае, объем данных используется для хранения данных для сервера MySQL. Поэтому, если вы хотите экспортировать архив tar для этого тома, вам сначала нужно остановить сервер MySQL. Для этого вам придется остановить контейнер WordPress.

резервное копирование данных MySQL

Другим способом является удаленное подключение к серверу MySQL для создания дампа базы данных с помощью команды mysqldump . Однако, чтобы это работало, ваш сервер MySQL должен быть настроен на прием удаленных подключений, а также иметь пользователя, которому разрешено подключаться удаленно. Это может не относиться к используемому вами образу WordPress Docker.


редактировать

Docker недавно представил плагины томов Docker, которые позволяют делегировать обработку томов плагинам, реализованным производителями.

У docker runкоманды есть новое поведение для -vопции. Теперь можно передать ему имя тома . Созданные таким образом тома названы и на них легче ссылаться позже, что облегчает проблемы с висячими томами .

Редактировать 2

Docker ввел docker volume pruneкоманду, чтобы легко удалить все висячие тома.

Thomasleveil
источник
34
На самом деле меня больше интересует создание контейнера, который я могу легко перемещать, я не понимаю смысла контейнера, который не может быть перемещен.
pguardiario
В этом случае вам следует обратиться к инструментам, которые помогают вам управлять объемом данных Docker, таким как 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. так что контейнеры только с данными унаследованы
Андрей Зарубин
2
вам не нужно удаленное соединение для mysqldump. Просто поместите в контейнер, выбросьте его, а затем скопируйте docker cp.
Jiggunjer
@AndriiZarubin re: 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

КОНЕЦ ОБНОВЛЕНИЯ

Доступен этот замечательный инструмент, который позволяет создавать резервные копии и восстанавливать контейнеры томов Docker:

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

Или вы можете следовать официальным путем:

Как перенести тома только для данных с одного хоста на другой?

tommasop
источник
Нет, это не ситуация "--volumes-from", а тома, определенные в докер-файле, из-за которого данные не сохраняются. Если вы посмотрите на докер-файл для пачки / лампы, вы поймете, что я имею в виду.
pguardiario
Ответ, который я уже дал, хорош для любого типа тома, потому что тома - это тома, а контейнеры - это контейнеры. Нет никакой разницы, если вы используете контейнер в качестве контейнера данных с точки зрения томов
Tommasop
Том, определенный в файле Docker, уничтожается при уничтожении контейнера. Таким образом, невозможно вернуть эти данные при перемещении контейнера.
Пгуардиарио
вам нужно вытащить данные перед перемещением контейнера, затем перезапустить контейнер и вернуть данные обратно
Tommasop 14.10.14
1
Я получаю ошибку: unknown shorthand flag: 'r' in -rm.должно ли это быть --rm? (Docker версия 18.09.5, сборка e8ff056)
Kuga
22

Если вам нужно только сделать резервную копию подключенных томов, вы можете просто скопировать папки с вашего Dockerhost .

Примечание. Если вы используете Ubuntu , Dockerhost - это ваш локальный компьютер. Если вы работаете на Mac , Dockerhost - это ваша виртуальная машина.

На Ubuntu

Вы можете найти все папки с томами здесь: /var/lib/docker/volumes/вы можете копировать их и архивировать в любое место.

На MAC

Это не так просто, как в Ubuntu. Вам нужно скопировать файлы с ВМ.

Вот скрипт того, как скопировать все папки с томами с виртуальной машины (на которой работает сервер Docker) на вашу локальную машину. Мы предполагаем, что ваша виртуальная машина с докером называется 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под Ubuntu?
onknows
2
Нет необходимости, вы можете скопировать эту папку в любое время.
Андрей Двояк
4
Технически да, вы можете, но вы подвержены проблемам повреждения данных, так как копия не атомарна, и могут быть параллельные записи на том, я бы предпочел сначала остановить контейнер.
Алессандро С.
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-
Сахил Ахаджа
источник
Это резервное копирование в реальном времени?
Кан Эндрю
2
Поскольку один и тот же том может быть смонтирован на нескольких докерах, да, это резервное копирование в реальном времени. Например. Том, смонтированный на контейнере Mysql, может быть зарезервирован (при условии отсутствия повреждения данных). Но для служб, которые должны быть остановлены из-за страха повреждения данных, нет, это не в режиме реального времени.
Сахил Ахаджа
9

Я знаю, что это старо, но я понимаю, что не существует хорошо документированного решения для передачи контейнера данных (в качестве резервной копии) в концентратор докеров. Я только что опубликовал короткий пример того, как это сделать, по адресу https://dzone.com/articles/docker-backup-your-data-volumes-to-docker-hub.

Ниже приводится нижняя строка

В руководстве по Docker предлагается локально выполнять резервное копирование и восстановление тома данных. Мы собираемся использовать эту технику, добавив еще несколько строк, чтобы эта резервная копия была перенесена в докер-концентратор для простого восстановления в будущем в любом месте, которое мы хотим. Итак, начнем. Вот следующие шаги:

Резервное копирование тома данных из контейнера данных с именем 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)

Теперь в нашем репозитории есть образ с именем data-backup, который представляет собой просто файловую систему с файлами и папками резервных копий. Чтобы использовать этот образ (он же восстановить из резервной копии), мы делаем следующее:

Запустите контейнер данных с образом резервной копии данных

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

Запустите ваш образ whatEver с томами из конрайнера данных

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

Это оно.

Я был удивлен, что нет документации для этой работы. Я надеюсь, что кто-то найдет это полезным. Я знаю, что мне понадобилось время, чтобы подумать об этом.

г-звезда
источник
8

Если ваш проект использует docker-compose, вот подход для резервного копирования и восстановления ваших томов.

докер-compose.yml

По сути, вы добавляете db-backupи db-restoreобслуживаете ваш файл docker-compose.yml и адаптируете его под имя вашего тома. Мой том назван 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"

Избегайте коррупции

Для обеспечения согласованности данных остановите контейнер базы данных перед резервным копированием или восстановлением.

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/ для создания этого подхода.

jdhildeb
источник
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
Konrad
источник
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

loomchild
источник
Я создал аналогичный инструмент github.com/01e9/docker-backup. Он создает архивы резервных копий и добавляет их в каталог синхронизации Resilio
Олег
2

Я создал инструмент для организации и запуска резервного копирования данных и контейнеров mysql, который называется docker-backup . На док-станции даже есть готовое изображение .

Это в основном написано на Bash, так как это в основном оркестровка. Он использует duplicityдля фактического резервного двигателя. В настоящее время вы можете сделать резервную копию на FTP (S) и Amazon S3.

Конфигурация довольно проста: напишите файл конфигурации в YAML, описывающий, что делать резервные копии и где, и вот, пожалуйста!

Для контейнеров данных он автоматически монтирует тома, совместно используемые вашим контейнером, для резервного копирования и обработки. Для контейнеров mysql он связывает их и выполняет mysqldump, связанный с вашим контейнером, и обрабатывает результат.

Я написал это, потому что я использую Docker-Cloud, который не соответствует последним версиям Docker-Engine, и потому что я хотел использовать Docker, не включая в свои приложения какие-либо процессы резервного копирования.

Арно де Моухи
источник
2

Если вы хотите выполнить полное резервное копирование, вам необходимо выполнить несколько шагов:

  1. Зафиксируйте контейнер для изображения
  2. Сохранить изображение
  3. Сделайте резервную копию тома контейнера, создав файл tar для точки монтирования тома в контейнере.
  4. Повторите шаги 1-3 для контейнера базы данных.

Обратите внимание, что выполнение Docker-фиксации контейнера для изображения НЕ включает тома, прикрепленные к контейнеру (см. Документацию Docker-фиксации ).

« Операция фиксации не будет включать никаких данных, содержащихся в томах, смонтированных внутри контейнера ».

eaglet3d
источник
1

Если вам нравится вводить тайные операторы из командной строки, вам понравятся эти методы резервного копирования контейнеров вручную. Имейте в виду, что более быстрый и эффективный способ резервного копирования контейнеров также эффективен. Я написал инструкции здесь: https://www.morpheusdata.com/blog/2017-03-02-how-to-create-a-docker-backup-with-morpheus

Шаг 1. Добавление хоста Docker в любое облако. Как объяснено в учебном руководстве на сайте поддержки Morpheus, вы можете добавить хост Docker в выбранное вами облако за считанные секунды. Начните с выбора инфраструктуры на главной навигационной панели Morpheus. Выберите «Хосты» в верхней части окна «Инфраструктура» и нажмите кнопку «+ Контейнерные хосты» в правом верхнем углу.

Для резервного копирования хоста Docker в облако через Morpheus перейдите на экран «Инфраструктура» и откройте меню «+ Container Hosts».

Выберите тип хоста контейнера в меню, выберите группу, а затем введите данные в пять полей: Имя, Описание, Видимость, Выберите облако и Введите теги (необязательно). Нажмите Далее, а затем настройте параметры хоста, выбрав тарифный план. Обратите внимание, что поля «Объем», «Память» и «Количество ЦП» будут видны только в том случае, если в выбранном плане включены пользовательские параметры.

Здесь вы можете добавить и размер томов, установить объем памяти и количество процессоров, а также выбрать сеть. Вы также можете настроить имя пользователя и пароль ОС, имя домена и имя хоста, которое по умолчанию является именем контейнера, которое вы ввели ранее. Нажмите кнопку «Далее», а затем добавьте все рабочие процессы автоматизации (необязательно). Наконец, просмотрите настройки и нажмите «Завершить», чтобы сохранить их.

Шаг 2. Добавление интеграции реестра Docker в публичные или частные облака Адам Хикс в другом учебном пособии Morpheus описывает, как просто интегрироваться с частным реестром Docker. (Не требуется дополнительная настройка, чтобы использовать Morpheus для предоставления изображений общедоступному концентратору Docker с помощью общедоступного API Docker.)

Выберите «Интеграции» на вкладке «Администратор» главной панели навигации, а затем нажмите кнопку «+ Новая интеграция» в правой части экрана. В открывшемся окне Интеграция выберите Репозиторий Docker в раскрывающемся меню Тип, введите имя и добавьте конечную точку API частного реестра. Укажите имя пользователя и пароль для реестра, который вы используете, и нажмите кнопку «Сохранить изменения».

Интеграция реестра Docker с частным облаком с помощью диалогового окна «Новая интеграция» Morpheus.

Чтобы подготовить интеграцию, которую вы только что создали, выберите Docker в разделе «Тип» в диалоговом окне «Создать экземпляр», выберите реестр в раскрывающемся меню «Реестр Docker» на вкладке «Конфигурация», а затем продолжите подготовку, как и в любом контейнере Docker.

Шаг 3. Управление резервными копиями. После того, как вы добавили хост Docker и интегрировали реестр, резервное копирование будет настроено и выполнено автоматически для каждого предоставленного вами экземпляра. Поддержка Morpheus предоставляет инструкции для просмотра резервных копий, создания резервной копии экземпляра и создания резервной копии сервера.

thelefty07
источник
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 .

Остальные вещи унаследованы от базового образа. Теперь вы можете отправить это изображение в облако докеров, и ваши пользователи получат доступ к данным непосредственно в своих контейнерах.

Danielo515
источник
какой смысл в использовании тома, если вы собираетесь в конечном итоге просто вставить его в изображение.
Jiggunjer
@jiggunjer, имеющий том, позволяет переопределять данные в контейнере
Danielo515,
Я могу переопределить данные без тома, используя docker cp.
Jiggunjer
0

Проблема : вы хотите сделать резервную копию вашего образа контейнера С томами данных в нем, но эта опция не из коробки, прямой и простой способ будет скопировать путь к томам и сделать резервную копию образа докера, перезагрузить его и связать его оба вместе. но это решение кажется неуклюжим, а не устойчивым и обслуживаемым - вам нужно будет создать задание cron, которое будет выполнять этот процесс каждый раз.

Решение : Использование dockup - образа Docker для резервного копирования томов контейнера Docker и загрузки его на s3 (Docker + Backup = dockup). dockup будет использовать ваши учетные данные AWS для создания нового сегмента с именем в соответствии с переменной среды, получит настроенные тома и будет помечен как tar, gzipped, с отметкой времени и загружен в корзину 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 содержит соответствующие данные.
avivamg
источник
-1

Это способ резервного копирования томов.
Если у вас есть докер реестра ниже, этот метод очень полезен.
Это использует реестр Docker для перемещения файла ZIP легко.

#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"

Запустите ваше изображение, которое использует эту папку тома.
Вы можете легко создать изображение, содержащее как одно изображение, так и один том.
Но я не рекомендую по разным причинам (размер изображения, команда ввода, ..).

Myeongsik Joo
источник