Я использовал эту пачку Docker-изображений / WordPress, чтобы продемонстрировать сайт Wordpress. Недавно я обнаружил, что изображение использует объемы для MySQL-данных.
Таким образом, проблема заключается в следующем: если я хочу сделать резервную копию и восстановить контейнер, я могу попытаться зафиксировать образ, а затем удалить контейнер и создать новый контейнер из зафиксированного образа. Но если я сделаю это, том будет удален, и все мои данные исчезнут.
Должен быть какой-то простой способ сделать резервную копию моего контейнера плюс его объемные данные, но я нигде не могу его найти.
backup
docker
linux-containers
pguardiario
источник
источник
Ответы:
Как объясняется в руководстве пользователя докера, тома данных предназначены для сохранения данных вне файловой системы контейнера. Это также облегчает обмен данными между несколькими контейнерами.
Хотя Docker никогда не удалит данные в томах (если только вы не удалите связанный контейнер с ними
docker rm -v
), тома, на которые не ссылается ни один контейнер Docker , называются висячими томами . От этих свисающих томов трудно избавиться и труднее получить доступ.Это означает, что, как только последний контейнер, использующий том, будет удален, том данных будет зависать, и его содержимое становится труднодоступным.
Чтобы предотвратить эти висячие тома, нужно создать дополнительный докер-контейнер, используя том данных, который вы хотите сохранить; так что всегда будет хотя бы тот докер контейнер, ссылающийся на том. Таким образом, вы можете удалить Docker-контейнер, на котором запущено приложение WordPress, без потери легкости доступа к содержимому тома данных.
Такие контейнеры называются контейнерами с объемом данных .
резервное копирование образов докера
Чтобы создать резервные копии образов Docker, используйте команду docker save, которая создаст архив tar, который впоследствии можно будет использовать для создания нового образа docker с помощью команды загрузки docker .
резервные док-контейнеры
Вы можете сделать резервную копию контейнера Docker различными способами
Имейте в виду, что эти команды будут только создавать резервные копии файловой системы многоуровневого контейнера Docker. Это исключает объемы данных .
тома данных резервного копирования
Для резервного копирования тома данных вы можете запустить новый контейнер, используя том, для которого вы хотите выполнить резервное копирование, и выполнить команду tar, чтобы создать архив содержимого тома, как описано в руководстве пользователя докера .
В вашем конкретном случае, объем данных используется для хранения данных для сервера MySQL. Поэтому, если вы хотите экспортировать архив tar для этого тома, вам сначала нужно остановить сервер MySQL. Для этого вам придется остановить контейнер WordPress.
резервное копирование данных MySQL
Другим способом является удаленное подключение к серверу MySQL для создания дампа базы данных с помощью команды mysqldump . Однако, чтобы это работало, ваш сервер MySQL должен быть настроен на прием удаленных подключений, а также иметь пользователя, которому разрешено подключаться удаленно. Это может не относиться к используемому вами образу WordPress Docker.
редактировать
Docker недавно представил плагины томов Docker, которые позволяют делегировать обработку томов плагинам, реализованным производителями.
У
docker run
команды есть новое поведение для-v
опции. Теперь можно передать ему имя тома . Созданные таким образом тома названы и на них легче ссылаться позже, что облегчает проблемы с висячими томами .Редактировать 2
Docker ввел
docker volume prune
команду, чтобы легко удалить все висячие тома.источник
Data volumes are designed to persist data, independent of the container’s life cycle. Docker therefore never automatically delete volumes when you remove a container, nor will it “garbage collect” volumes that are no longer referenced by a container.
так что контейнеры только с данными унаследованыmysqldump
. Просто поместите в контейнер, выбросьте его, а затем скопируйтеdocker cp
.data only container obsolete?
Совсем нет. Контейнер данных только дает вам контейнерdocker exec data-container tar -czf snapshot.tgz /data
затемdocker cp data-container:snapshot.tgz ./snapshot.tgz
и тому подобное. Если вы хотите, чтобы контейнер был долгоживущим, то сделайте его команду такой, как будтоtail -f /dev/null
он никогда не завершается, используя минимальные ресурсы.ОБНОВЛЕНИЕ 2
Необработанный bash-скрипт резервного копирования одного тома:
Необработанный bash-скрипт восстановления одного тома:
Использование может быть таким:
Предположения следующие: файл резервной копии называется backup.tar, он находится в том же каталоге, что и сценарий резервного копирования и восстановления, имя тома в контейнерах одинаковое.
ОБНОВИТЬ
Мне кажется, что резервное копирование томов из контейнеров не отличается от резервного копирования томов из контейнеров данных.
Тома - это не что иное, как пути, связанные с контейнером, поэтому процесс такой же.
Я не знаю, работает ли docker-backup и для тех же контейнеров, но вы можете использовать:
и:
КОНЕЦ ОБНОВЛЕНИЯ
Доступен этот замечательный инструмент, который позволяет создавать резервные копии и восстанавливать контейнеры томов Docker:
https://github.com/discordianfish/docker-backup
если у вас есть контейнер, связанный с некоторыми объемами контейнеров, как это:
Вы можете сделать резервную копию всех томов, как это:
и восстановить так:
Или вы можете следовать официальным путем:
Как перенести тома только для данных с одного хоста на другой?
источник
unknown shorthand flag: 'r' in -rm.
должно ли это быть--rm
? (Docker версия 18.09.5, сборка e8ff056)Если вам нужно только сделать резервную копию подключенных томов, вы можете просто скопировать папки с вашего Dockerhost .
На Ubuntu
Вы можете найти все папки с томами здесь:
/var/lib/docker/volumes/
вы можете копировать их и архивировать в любое место.На MAC
Это не так просто, как в Ubuntu. Вам нужно скопировать файлы с ВМ.
Вот скрипт того, как скопировать все папки с томами с виртуальной машины (на которой работает сервер Docker) на вашу локальную машину. Мы предполагаем, что ваша виртуальная машина с докером называется default .
Он собирается создать папку ./backup_volumes в вашем текущем каталоге и скопировать все тома в эту папку.
Вот скрипт, как скопировать все сохраненные тома из вашего локального каталога ( ./backup_volumes ) на компьютер Dockerhost
Теперь вы можете проверить, работает ли он:
источник
/var/lib/docker/volumes
под Ubuntu?Допустим, ваш том называется
data_volume
. Вы можете использовать следующие команды для резервного копирования и восстановления тома в образ докера с именемdata_image
:Для резервного копирования:
Восстановить:
источник
Я знаю, что это старо, но я понимаю, что не существует хорошо документированного решения для передачи контейнера данных (в качестве резервной копии) в концентратор докеров. Я только что опубликовал короткий пример того, как это сделать, по адресу https://dzone.com/articles/docker-backup-your-data-volumes-to-docker-hub.
Ниже приводится нижняя строка
В руководстве по Docker предлагается локально выполнять резервное копирование и восстановление тома данных. Мы собираемся использовать эту технику, добавив еще несколько строк, чтобы эта резервная копия была перенесена в докер-концентратор для простого восстановления в будущем в любом месте, которое мы хотим. Итак, начнем. Вот следующие шаги:
Резервное копирование тома данных из контейнера данных с именем data-container-to-backup
Разверните этот файл tar в новый контейнер, чтобы мы могли зафиксировать его как часть его образа
Зафиксируйте и нажмите на изображение с нужным тегом ($ VERSION)
Наконец, давайте уберемся
Теперь в нашем репозитории есть образ с именем data-backup, который представляет собой просто файловую систему с файлами и папками резервных копий. Чтобы использовать этот образ (он же восстановить из резервной копии), мы делаем следующее:
Запустите контейнер данных с образом резервной копии данных
Запустите ваш образ whatEver с томами из конрайнера данных
Это оно.
Я был удивлен, что нет документации для этой работы. Я надеюсь, что кто-то найдет это полезным. Я знаю, что мне понадобилось время, чтобы подумать об этом.
источник
Если ваш проект использует docker-compose, вот подход для резервного копирования и восстановления ваших томов.
докер-compose.yml
По сути, вы добавляете
db-backup
иdb-restore
обслуживаете ваш файл docker-compose.yml и адаптируете его под имя вашего тома. Мой том названdbdata
в этом примере.Избегайте коррупции
Для обеспечения согласованности данных остановите контейнер базы данных перед резервным копированием или восстановлением.
Резервное копирование
Резервное копирование в пункт назначения по умолчанию (
backup/dbdata.tar.bz2
):Или, если вы хотите указать альтернативное имя цели, выполните:
Восстановление
Чтобы восстановить из
backup/dbdata.tar.bz2
, выполните:Или восстановить из определенного файла, используя:
Я адаптировал команды из https://loomchild.net/2017/03/26/backup-restore-docker-named-volumes/ для создания этого подхода.
источник
Следующая команда запустит tar в контейнере со всеми подключенными именованными томами данных и перенаправит вывод в файл:
Обязательно протестируйте полученный архив на случай, если что-то пошло не так:
источник
Если вам просто нужна простая резервная копия в архив, вы можете попробовать мою маленькую утилиту: https://github.com/loomchild/volume-backup
пример
Резервное копирование:
будет архивировать том, названный
some_volume
в/tmp/archive1.tar.bz2
файл архиваВосстановить:
будет вытирать и восстановление тома с именем
some_volume
из/tmp/archive1.tar.bz2
архива.Дополнительная информация: https://medium.com/@loomchild/backup-restore-docker-named-volumes-350397b8e362
источник
Я создал инструмент для организации и запуска резервного копирования данных и контейнеров mysql, который называется docker-backup . На док-станции даже есть готовое изображение .
Это в основном написано на Bash, так как это в основном оркестровка. Он использует
duplicity
для фактического резервного двигателя. В настоящее время вы можете сделать резервную копию на FTP (S) и Amazon S3.Конфигурация довольно проста: напишите файл конфигурации в YAML, описывающий, что делать резервные копии и где, и вот, пожалуйста!
Для контейнеров данных он автоматически монтирует тома, совместно используемые вашим контейнером, для резервного копирования и обработки. Для контейнеров mysql он связывает их и выполняет mysqldump, связанный с вашим контейнером, и обрабатывает результат.
Я написал это, потому что я использую Docker-Cloud, который не соответствует последним версиям Docker-Engine, и потому что я хотел использовать Docker, не включая в свои приложения какие-либо процессы резервного копирования.
источник
Если вы хотите выполнить полное резервное копирование, вам необходимо выполнить несколько шагов:
Обратите внимание, что выполнение Docker-фиксации контейнера для изображения НЕ включает тома, прикрепленные к контейнеру (см. Документацию Docker-фиксации ).
« Операция фиксации не будет включать никаких данных, содержащихся в томах, смонтированных внутри контейнера ».
источник
Если вам нравится вводить тайные операторы из командной строки, вам понравятся эти методы резервного копирования контейнеров вручную. Имейте в виду, что более быстрый и эффективный способ резервного копирования контейнеров также эффективен. Я написал инструкции здесь: https://www.morpheusdata.com/blog/2017-03-02-how-to-create-a-docker-backup-with-morpheus
Шаг 1. Добавление хоста Docker в любое облако. Как объяснено в учебном руководстве на сайте поддержки Morpheus, вы можете добавить хост Docker в выбранное вами облако за считанные секунды. Начните с выбора инфраструктуры на главной навигационной панели Morpheus. Выберите «Хосты» в верхней части окна «Инфраструктура» и нажмите кнопку «+ Контейнерные хосты» в правом верхнем углу.
Для резервного копирования хоста Docker в облако через Morpheus перейдите на экран «Инфраструктура» и откройте меню «+ Container Hosts».
Выберите тип хоста контейнера в меню, выберите группу, а затем введите данные в пять полей: Имя, Описание, Видимость, Выберите облако и Введите теги (необязательно). Нажмите Далее, а затем настройте параметры хоста, выбрав тарифный план. Обратите внимание, что поля «Объем», «Память» и «Количество ЦП» будут видны только в том случае, если в выбранном плане включены пользовательские параметры.
Здесь вы можете добавить и размер томов, установить объем памяти и количество процессоров, а также выбрать сеть. Вы также можете настроить имя пользователя и пароль ОС, имя домена и имя хоста, которое по умолчанию является именем контейнера, которое вы ввели ранее. Нажмите кнопку «Далее», а затем добавьте все рабочие процессы автоматизации (необязательно). Наконец, просмотрите настройки и нажмите «Завершить», чтобы сохранить их.
Шаг 2. Добавление интеграции реестра Docker в публичные или частные облака Адам Хикс в другом учебном пособии Morpheus описывает, как просто интегрироваться с частным реестром Docker. (Не требуется дополнительная настройка, чтобы использовать Morpheus для предоставления изображений общедоступному концентратору Docker с помощью общедоступного API Docker.)
Выберите «Интеграции» на вкладке «Администратор» главной панели навигации, а затем нажмите кнопку «+ Новая интеграция» в правой части экрана. В открывшемся окне Интеграция выберите Репозиторий Docker в раскрывающемся меню Тип, введите имя и добавьте конечную точку API частного реестра. Укажите имя пользователя и пароль для реестра, который вы используете, и нажмите кнопку «Сохранить изменения».
Интеграция реестра Docker с частным облаком с помощью диалогового окна «Новая интеграция» Morpheus.
Чтобы подготовить интеграцию, которую вы только что создали, выберите Docker в разделе «Тип» в диалоговом окне «Создать экземпляр», выберите реестр в раскрывающемся меню «Реестр Docker» на вкладке «Конфигурация», а затем продолжите подготовку, как и в любом контейнере Docker.
Шаг 3. Управление резервными копиями. После того, как вы добавили хост Docker и интегрировали реестр, резервное копирование будет настроено и выполнено автоматически для каждого предоставленного вами экземпляра. Поддержка Morpheus предоставляет инструкции для просмотра резервных копий, создания резервной копии экземпляра и создания резервной копии сервера.
источник
Если у вас такой простой случай, как у меня, вы можете сделать следующее:
ADD folder destination
Например, если у вас есть данные с томов в вашем домашнем каталоге, например,
/home/mydata
вы можете выполнить следующее:Где ваш DOCKERFILE указывает на такой файл:
Остальные вещи унаследованы от базового образа. Теперь вы можете отправить это изображение в облако докеров, и ваши пользователи получат доступ к данным непосредственно в своих контейнерах.
источник
docker cp
.Проблема : вы хотите сделать резервную копию вашего образа контейнера С томами данных в нем, но эта опция не из коробки, прямой и простой способ будет скопировать путь к томам и сделать резервную копию образа докера, перезагрузить его и связать его оба вместе. но это решение кажется неуклюжим, а не устойчивым и обслуживаемым - вам нужно будет создать задание cron, которое будет выполнять этот процесс каждый раз.
Решение : Использование dockup - образа Docker для резервного копирования томов контейнера Docker и загрузки его на s3 (Docker + Backup = dockup). dockup будет использовать ваши учетные данные AWS для создания нового сегмента с именем в соответствии с переменной среды, получит настроенные тома и будет помечен как tar, gzipped, с отметкой времени и загружен в корзину S3.
Шаги :
docker-compose.yml
и присоедините к немуenv.txt
файл конфигурации. Данные должны быть загружены в специальное защищенное хранилище s3 и готовы к перезагрузке при выполнении DRP. чтобы проверить, какой путь к томам настроить, запуститеdocker inspect <service-name>
и найдите тома :Отредактируйте содержимое файла конфигурации
env.txt
и поместите его в путь проекта:Запустите док-контейнер
источник
Это способ резервного копирования томов.
Если у вас есть докер реестра ниже, этот метод очень полезен.
Это использует реестр Docker для перемещения файла ZIP легко.
На другом сервере
Запустите ваше изображение, которое использует эту папку тома.
Вы можете легко создать изображение, содержащее как одно изображение, так и один том.
Но я не рекомендую по разным причинам (размер изображения, команда ввода, ..).
источник