Резервное копирование и восстановление тома Docker

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

Например, одна из служб представляет собой веб-приложение, в которое пользователи могут загружать файлы. Для этого контейнера у меня есть /files том, который я хочу создать резервную копию. Хост-монтирует, похоже, что к ним относятся несколько неодобрительно, потому что такое монтирование никоим образом не является портативным - как сказано в это сообщение в блоге и документация docker для томов.

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

Но вот в чем моя проблема: я думал о резервном копировании только файлов dockerfile, необходимых для создания контейнеров и связанных с ними томов. В вероятном случае, если мне придется восстанавливать все из резервной копии, как мне узнать, какой каталог тома соответствует какому контейнеру? Перестройка контейнера приводит к изменению идентификатора и пути к тому, поэтому мне потребуется дополнительная информация, чтобы сопоставить их. Что еще, если вообще что-нибудь, я должен сделать резервную копию, чтобы иметь возможность действительно все восстановить?

Ты прав. Поскольку у вас может быть несколько контейнеров с отдельными томами, вам необходимо отслеживать, какой том соответствует какому контейнеру.Как это сделать, зависит от вашей настройки: я использую name -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 -

Итак, это означает, что вам нужно создать резервную копию:

  • Файл Dockerfile
  • объем
  • путь к объему в контейнере
  • имя контейнера, к которому принадлежит том

Обновление: Тем временем я создал инструмент для резервного копирования контейнеров и их томов (контейнеров) (container(s)): https://github.com/discordianfish/docker-backup и образ резервной копии, который может создавать резервные копии и отправлять их на s3: https://github.com/discordianfish/docker-lloyd

В более новом докере (протестирован в 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