Я в некотором роде «унаследовал» докеризованную серверную среду, и теперь мне нужно реализовать концепцию резервного копирования - особенно для контейнера Owncloud, который хранит пользовательские файлы внутри тома докера. В документации docer [1] говорится, что «тома имеют несколько преимуществ по сравнению с привязками» и, следовательно, «являются предпочтительным механизмом». Одно из перечисленных преимуществ состоит в том, что «легче создавать резервные копии томов», и в документации предлагается следующая команда для создания резервной копии тома tar:
$ docker run --rm --volumes-from dbstore -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata
Однако, особенно для резервного копирования (я использую резервное копирование borg для синхронизации файлов хоста с удаленным репозиторием), я вижу несколько недостатков в этом способе:
Я относительно новичок в докере, поэтому, возможно, я еще не получил полного обзора экосистемы докера. Но, насколько мне известно, для этой ситуации я думаю, что, в частности, лучшим решением будет привязка. К тому же я все равно не пользуюсь другими преимуществами объемов. Или я что-то упускаю? Есть ли недостатки в использовании крепления для привязки?
Как насчет резервного копирования / var / lib / docker / volume / напрямую?
В процессе поиска я нашел это сообщение в блоге owncloud [2], в котором предлагается выполнить резервное копирование / var / lib / docker / volume / owncloud_files / _data напрямую. Мне это кажется не самым чистым способом.
Однако, имея дело с нынешней ситуацией, я пока думаю пойти этим путем. Это безопасно? (Конечно, в отношении необходимых мер предосторожности для согласованности, например, выключение контейнера базы данных, режим обслуживания owncloud и т. Д. - которые, я думаю, необходимы в любом случае для упомянутых здесь решений !?)
К тому же я все равно не пользуюсь другими преимуществами объемов. Или я что-то упускаю? Есть ли недостатки в использовании крепления для привязки?
Кажется, я понимаю, что Docker хочет, чтобы вы забыли о существовании хоста; и на самом деле, иногда у вас не будет к нему доступа, поэтому тома - наиболее очевидный способ сохранить данные.
Привязка монтирования - это путь на хосте, поэтому вы должны каким-то образом «управлять» им (выделять пространство, монтировать раздел ...) вне из Докера. Возможно, у вас уже есть система для этого, например, плейбук Ansible, который устанавливает Docker, docker-compose и загружает docker-compose.yml
к серверу. Но если вы этого не сделаете, или вы просто укажете docker-compose
удаленному демону Docker, ну, вы захотите использовать только это, и ничего больше: тогда вам понадобятся данные в томах.
Как насчет резервного копирования / var / lib / docker / volume / напрямую?
Я согласен, что это не очень хорошая идея: это собственное пространство Docker, я бы не стал его трогать, как я бы не копировал из /var/lib/postgresql
на работающем экземпляре.
Или я что-то упускаю?
Почему бы тебе не убежать borg
вместо того tar
внутри вашего временного контейнера?