Я использую Docker для развертывания некоторых служб на сервере CentOS 6.4 и пытаюсь выяснить, как правильно создавать резервные копии данных, которые они генерируют.
Например, одна из служб - это веб-приложение, в которое пользователи могут загружать файлы. Для этого контейнера у меня есть /files
том, который я хочу сделать резервную копию. Монтирование хоста выглядит так, как будто его не одобряют, потому что такое монтирование никоим образом не переносимо - как сказано в этом сообщении в блоге и документации докера для томов .
Из того же поста в блоге я знаю, что мне не нужно подключать хост для доступа к файлам в томе, я могу использовать, docker inspect
чтобы узнать, где находятся файлы.
Но вот моя проблема: я думал о резервном копировании только докер-файлов, необходимых для создания контейнеров, и томов, связанных с ними. В том случае, если мне придется восстановить все из резервной копии, как мне узнать, какой каталог томов соответствует какому контейнеру? Перестройка контейнера приводит к изменению идентификатора и пути тома, поэтому мне потребуется дополнительная информация для их сопоставления. Что еще, если что, я должен сделать резервную копию, чтобы иметь возможность восстановить все?
docker inspect
встроенную в шаблонирования так:VOLUME=$( docker inspect -f '{{index .Volumes "/path/in/container"}}' "${NAME}-data" )
. Вероятно, также целесообразно напомнить людям, что они не должны создавать резервные копии файлов, когда они активно используются (например, базы данных).Volumes
ушел и естьMounts
вместо этого с другой структурой. Нам нужно проделать еще немного работы,range
чтобы найти интересующую нас точку монтированияVOLUME=$(docker inspect --format '{{ range .Mounts }}{{ if eq .Destination "/path/in/container" }}{{ .Source }}{{ end }}{{ end }}' "${NAME}-data")
В более новом Docker (протестирован в
1.9.1, build 9894698
) вы можете использоватьcp
команду .Вот пример, как скопировать каталог из контейнера на хост:
Вот пример, как скопировать каталог из контейнера в
tar
файл:Последний, но не менее важный пример, как скопировать каталог из контейнера в
tar.gz
файл:источник
docker cp
отправляет все по сети. Это то, чего вы хотите избежать, особенно если ваш том Docker уже является томом btrfs.docker cp
будет неплохо.