Я использую Docker для развертывания некоторых сервисов на сервере CentOS 6.4 и пытаюсь понять, как правильно создавать резервные копии данных, которые они генерируют.
Например, одна из служб - это веб-приложение, в которое пользователи могут загружать файлы. Для этого контейнера у меня есть /files
том, резервную копию которого я хочу сделать. Крепления хоста выглядят так, как будто они несколько осуждаются, потому что такое крепление никоим образом не является портативным - как сказано в это сообщение в блоге и документация докеров для томов.
Я знаю из того же сообщения в блоге, что не необходимость монтирование хоста для доступа к файлам в томе, я могу использовать docker inspect
чтобы узнать, где находятся файлы.
Но вот моя проблема: я думал о резервном копировании только докер-файлов, необходимых для создания контейнеров и связанных с ними томов. В вероятном случае, если мне придется восстановить все из резервной копии, как мне узнать, какой каталог тома соответствует какому контейнеру? Перестройка контейнера приводит к изменению идентификатора и пути к тому, поэтому мне понадобится дополнительная информация для их сопоставления. Что еще, если что-нибудь, мне нужно сделать резервную копию, чтобы действительно все восстановить?
Ты прав. Поскольку у вас может быть несколько контейнеров с отдельными томами, вам нужно отслеживать, какой том какому контейнеру соответствует. Как это сделать, зависит от ваших настроек: я использую имя -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