DEV Community

Danil Poletavkin
Danil Poletavkin

Posted on • Edited on

Docker Volume Backup & Restore

Backup

Перейти в папку, в которой мы ожидаем появления архива и выполнить следующую команду

docker run --rm --volume [имя volume, который мы хотим архивировать]:/data --volume $(pwd):/backup ubuntu tar cvf /backup/backup.tar /data
Enter fullscreen mode Exit fullscreen mode

Пояснение

1) Запустить контейнер
docker run
2) image будет удалён после запуска контейнера
--rm
3) монтировать нужный нам volume в папку data внутри создаваемого контейнера
имя этой папки может быть любым
--volume [имя volume, который мы хотим архивировать]:/data
4) связать текущую папку $(pwd) с папкой backup внутри создаваемого контейнера
текущая папка - это место, где мы ожидаем появления архива backup.tar
имя папки backup может быть любым
то есть данные из папки backup, расположенной внутри контейнера будут появляться в текущей папке
--volume $(pwd):/backup
5) имя image контейнера, который создаётся
не обязательно использовать именно ubuntu, это может быть любой образ
нам всего лишь нужно скопировать данные из существующего volume, где располагаются наши данные в новый volume
ubuntu
6) архивировать то, что находится в папке data в архив c именем backup.tar
архив backup.tar появляется в папке backup внутри контейнера, и, так как мы связали в команде 4 папку backup внутри контейнера с текущей директорией, файл backup.tar появится в текущей директории
tar cvf /backup/backup.tar /data

Restore

Перейти в папку, в которой находится файл .tar с резервной копией базы данных и выполнить следующую команду

docker run --rm --volume some_docker_project-backup:/extracted_backup --volume $(pwd):/data ubuntu tar xvf /data/backup.tar -C /extracted_backup --strip 1
Enter fullscreen mode Exit fullscreen mode

Пояснение

1) Запустить контейнер
docker run
2) image будет удалён после запуска контейнера
--rm
3) связать новый volume some_docker_project-backup с папкой extracted_backup внутри контейнера
новый volume - это тот, который потом планируется использовать в качестве источника данных в файле docker-compose. В файле docker-compose имя volume указывается без префикса имя проекта, а имя проекта добавляется в процессе выполнения команды docker-compose up (для смены имени проекта по-умолчанию нужно использовать параметр --project-name)
поэтому здесь имя нового volume включает в себя префикс some_docker_project - это как раз имя проекта docker-compose
папка extracted_backup - это папка внутри контейнера, имя папки может быть любым
--volume some_docker_project-backup:/extracted_backup
4) связать текущую папку с папкой data внутри контейнера.
текущая папка - это та папка, в которой находится архив .tar с резервной копией базы данных
--volume $(pwd):/data
5) имя запускаемого образа
не обязательно использовать именно ubuntu, это может быть любой образ
ubuntu
6) разархивировать файл .tar в папку extracted_backup внутри контейнера, которую ранее мы связывали с новым volume. В результате появится новый volume с данными из архива, которые были извлечены в папку extracted_backup внутри контейнера
tar xvf /data/backup.tar -C /extracted_backup --strip 1

Top comments (0)