Перейти к содержимому
Главная страница » Резервное копирование Volume в Docker

Резервное копирование Volume в Docker

Чтобы не потерять данные накопленные в процессе работы, необходимо создавать резервные копии контейнеров Docker, а самое главное томов (volumes) Docker, которые сохраняют данные контейнера. Обычно резервная копия контейнера создается с помощью docker commit. Это позволит создать новый образ из контейнера, а затем эти образы можно отправить в реестры Docker для хранения снимков состояния контейнера.

Однако проблема этого метода заключается в том, что он создаёт резервную копию только контейнера, но не включает резервную копию подключённого тома, и пользователям приходится создавать резервную копию тома отдельно.

Чтобы полностью создать резервную копию и восстановить Docker, выполните следующие действия:

Поскольку docker commit не включает резервное копирование тома Docker. 
Поэтому пользователям необходимо создавать резервные копии тома отдельно. 
Для этого выполните следующие действия.

Создайте новый контейнер

Чтобы создать резервную копию тома, сначала создайте новый контейнер. Например, мы создали контейнер «backup-cont». Здесь опция «-v» используется для подключения внешнего тома к контейнеру Docker:

docker run -d -v demo-vol:/usr/share/nginx/ --name backup-cont demo-img

Создайте резервную копию тома

Теперь создайте резервную копию тома Docker, подключенного к контейнеру backup-cont, с помощью приведенной ниже команды. В указанной команде мы создадим файл backup.tar в текущем открытом каталоге:

docker run --rm --volumes-from backup-cont -v $(pwd):/backup nginx tar cvf /backup/backup.tar /usr/share/nginx

В этой команде

  • —rm: Автоматически удаляет контейнер при его извлечении.
  • -v my_volume:/data: Это позволяет подключить том к /data внутри контейнера.
  • -v $(pwd):/backup: Монтирует текущий каталог в /backup в контейнере, где находится файл резервной копии.
  • tar cvf /backup/backup.tar /data: Это создает архив в формате tar из каталога /data с данными тома и помещает его в /backup.

Для подтверждения выведите список файлов и папок в рабочем каталоге. 
Здесь вы можете видеть, что мы создали резервную копию тома в файле backup.tar:

dir

Восстановите volume

Чтобы восстановить том Docker в среде Docker, используйте следующую команду. Эта команда восстановит том из файла backup.tar, созданного на предыдущем шаге:

docker run --rm --volumes-from backup-cont -v %cd%:/backup bash -c "cd /usr/share/nginx && tar xvf /backup/backup.tar"

Резервное копирование с помощью Docker-volume-backup

В открытом доступе есть проект Docker-volume-backup (https://github.com/offen/docker-volume-backup), значительно упрощающий резервное копирование томов Docker. Данный легкий образ (около 15 мб) позволяет подключаться к любому volume в docker и выполнять резервное копирование файлов в локальную директорию, S3-совместимое хранилище (AWS S3, MimIO, Ceph и т.д.), или отправить сохранить его на удаленное устройства через WebDAV или по SSH.

Чтобы быстро выполнить однократное резервное копирование данных из тома docker, можно выполнить:

docker run --rm \
 -v data:/backup/data \
 --env AWS_ACCESS_KEY_ID="" \
 --env AWS_SECRET_ACCESS_KEY="" \
 --env AWS_S3_BUCKET_NAME="" \
 --entrypoint backup \
 offen/docker-volume-backup:v2

Если нужно выполнить резервное копирование по SSH:

     
     
docker run --rm \
 -v data:/backup/data \
 --env SSH_HOST_NAME="backupsrv1.local" \
 --env SSH_PORT=2222 \
 --env SSH_REMOTE_PATH="/mnt/backup/" \
 --env SSH_USER="user"
 --env SSH_PASSWORD="password"
 --entrypoint backup \
 offen/docker-volume-backup:v2

Можно собрать отдельный образ для резервного копирования через docker-compose:

version: '3'
services:
  backup:
    image: offen/docker-volume-backup:latest
    environment:
      BACKUP_CRON_EXPRESSION: "0 * * * *"
      BACKUP_PRUNING_PREFIX: backup-
      BACKUP_RETENTION_DAYS: 7
      AWS_BUCKET_NAME: backup-bucket
      AWS_ACCESS_KEY_ID: 
      AWS_SECRET_ACCESS_KEY: 
    volumes:
      - data:/backup/my-app-backup:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
volumes:
  data:

Перед бэкапом можно выполнить произвольные команды внутри контейнера. Например, сделать дамп базы данных (например, если вы выполняете бэкап Zabbix Server) или ещё что-то.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *