2014-11-22 5 views
5

suggested strategy для управления и резервного копирования данных в докер выглядит примерно так:«Официальная» стратегия резервного копирования докеров - как насчет согласованности?

docker run --name mysqldata -v /var/lib/mysql busybox true 
docker run --name mysql --volumes-from mysqldata mysql 
docker run --volumes-from mysqldata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /var/lib/mysql 

Однако, когда я резервного копирования погонных контейнеры таким образом, я не буду получать последовательную резервную копию, я бы? Я знаю инструменты вроде mysqldump, но что делать, если мне нужно сделать резервную копию, например, папку, в которую файлы постоянно добавляются и удаляются?

ответ

1

Основная проблема, с которой вы сталкиваетесь, т. Е. Резервное копирование изменяемых файлов, не зависит от докеров. Используйте инструмент, например rsnapshot или dirvish, чтобы сделать резервные копии в томе, а затем используйте описанный выше подход, чтобы переместить эти резервные копии куда-нибудь более безопасным, как Amazon s3 или ледник, исходя из вашего требования к надежности.

Если вы монтируете тома из другого контейнера или хоста vm с помощью ключа -v, изменения в файлах отражаются во всех контейнерах (или хосте vm) более или менее в режиме реального времени. (Существует некоторая задержка из-за AUFS, которую докер использует поверх хостов fs, но ее не очень). Если контейнер резервного копирования работает постоянно, он может продолжать делать резервные копии, и файлы всегда будут отражать последние файлы, видимые контейнером mysql.

Редактировать: Для наглядности.

+0

_ «сделать резервные копии в томе» _ Но эти резервные копии не будут согласованы, верно? Что я имею в виду: вы не можете делать непротиворечивые резервные копии внутри контейнера. Вы должны сделать снимок (lvm/btrfs)/var/lib/docker/volume/XYZ и выполнить резервное копирование на главной машине. – S1lentSt0rm

+0

Объемы разделяются между бегущими контейнерами в реальном (ish) -time. Вы даже можете установить их из файловой системы хоста. используя -v/host_fs/location:/container_fs/location. Все изменения файлов в томе должны быть доступны для всех контейнеров и хоста одновременно. –

+1

Я знаю об этом. Проблема в том, что мне нужны резервные копии _consistent_: мгновенное копирование состояния файловой системы _atomically_ в один момент времени и резервное копирование данных из этого моментального снимка только для чтения. Я не знаю, как это сделать в контейнере, так как для этого мне нужно использовать lvm или btrfs-tools. С описанным выше подходом никто не мешает файловой системе изменять во время резервного копирования. – S1lentSt0rm

Смежные вопросы