Я использую 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