Як я можу створити резервну копію Docker-контейнера з його томами даних?


152

Я використовую цю докер -образ tutum / wordpress для демонстрації веб-сайту Wordpress. Нещодавно я з’ясував, що зображення використовує томи для MySQL-даних.

Отже, проблема полягає в наступному: Якщо я хочу створити резервну копію та відновити контейнер, я можу спробувати зробити зображення, а потім пізніше видалити контейнер та створити новий контейнер із зробленого зображення. Але якщо я це зробити, том видаляється, і всі мої дані втрачаються.

Має бути якийсь простий спосіб створити резервну копію мого контейнера плюс його дані про обсяг, але я його не можу знайти ніде.


Перевірте цей скрипт, який я написав, який створює резервну копію абсолютно всього в докерському проекті, включаючи названі та неназвані томи, зображення, конфігурацію, журнали, кореневу файлову систему контейнерів, бази даних тощо: docker-compose-backup.sh .
Nick Sweeting

Відповіді:


141

якщо я хочу повернути контейнер, я можу спробувати зробити зображення, а потім пізніше видалити контейнер і створити новий контейнер із зробленого зображення. Але якщо я це зробити, том видаляється, і всі мої дані втрачаються

Як пояснює посібник користувача докера, обсяги даних мають намір зберігати дані поза файловою системою контейнера. Це також полегшує обмін даними між кількома контейнерами.

Хоча Docker ніколи не видаляє дані в томах (якщо ви не видалите пов'язаний контейнер з docker rm -v), томи, на які не посилається жоден контейнер докера, називаються звисаючими томами . Ці звисаючі томи важко позбутися і важко отримати доступ.

Це означає, що як тільки видаляється останній контейнер з томом, об'єм даних стає звисаючим, а його вміст важко доступний.

Щоб уникнути цих висячих томів, фокус полягає в створенні додаткового контейнера докера, використовуючи об'єм даних, який ви хочете залишити; так що завжди буде принаймні той контейнер докера, що посилається на том. Таким чином ви можете видалити контейнер докера, у якому запущено додаток Wordpress, не втрачаючи зручності доступу до вмісту цього обсягу даних.

Такі контейнери називаються контейнерами обсягу даних .

Має бути простий спосіб створити резервну копію мого контейнера плюс дані про обсяг, але я його не можу ніде знайти.

резервні зображення докера

Для резервного копіювання зображень докера використовуйте команду docker save, яка створить архів tar, який можна буде використовувати згодом для створення нового зображення докера за допомогою команди завантаження docker .

резервні докер-контейнери

Можна створити резервну копію докерного контейнера різними способами

  • здійснюючи новий докер образ на основі стану поточного докер контейнера з допомогою докер фіксації команди
  • шляхом експорту файлової системи контейнера докер у архів tar, використовуючи команду експорту докера . Пізніше можна створити нове зображення докера з цього архіву tar, за допомогою команди імпорту докер .

Майте на увазі, що ці команди створюють резервну копію файлової системи з шаром контейнера докера. Це виключає обсяги даних .

обсяги даних резервного докера

Для резервного копіювання обсягу даних ви можете запустити новий контейнер, використовуючи том, який потрібно створити для резервного копіювання та виконати команду tar для створення архіву вмісту томів, як описано в посібнику користувача докера .

У вашому конкретному випадку об'єм даних використовується для зберігання даних на сервері MySQL. Отож, якщо ви хочете експортувати архів смоли для цього тома, вам потрібно спочатку зупинити сервер MySQL. Для цього вам доведеться зупинити контейнер для WordPress.

резервне копіювання даних MySQL

Інший спосіб - віддалене підключення до сервера MySQL для отримання дампа бази даних за допомогою команди mysqldump . Однак для того, щоб це працювало, ваш сервер MySQL повинен бути налаштований на прийняття віддалених з'єднань, а також мати користувача, якому дозволяється віддалено підключатися. Можливо, це не так із зображенням докера Wordpress, який ви використовуєте.


Редагувати

Нещодавно Docker представив плагіни томів Docker, які дозволяють делегувати обробку томів плагінам, реалізованим постачальниками.

docker runКоманда має нову поведінку для -vваріанту. Тепер можна передавати йому ім'я тома . Томи, створені таким чином, називаються і легко посилаються згодом, полегшуючи проблеми, що звисають .

Редагувати 2

Докер ввів docker volume pruneкоманду легко видалити всі звисаючі томи.


34
Насправді мені більше цікаво зробити контейнер, який я можу легко переміщати, я не розумію сенсу контейнера, який неможливо перемістити.
pguardiario

У такому випадку слід переглянути інструменти, які допомагають керувати обсягом даних Docker для вас, наприклад, Flocker
Thomasleveil

9
Docker не видаляє томи даних автоматично. 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. тож спадщиною є лише контейнери з даними
Андрій Зарубін

2
вам не потрібно віддалене з'єднання для mysqldump. Просто вкладіть в контейнер, скиньте його та скопіюйте docker cp.
джиггуньєр

@AndriiZarubin re: 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яке ніколи не виходить, використовуючи мінімальні ресурси.
Джессі Чисгольм

31

ОНОВЛЕННЯ 2

Сирий скрипт резервного копіювання одного обсягу:

#!/bin/bash
# This script allows you to backup a single volume from a container
# Data in given volume is saved in the current directory in a tar archive.
CONTAINER_NAME=$1
VOLUME_NAME=$2

usage() {
  echo "Usage: $0 [container name] [volume name]"
  exit 1
}

if [ -z $CONTAINER_NAME ]
then
  echo "Error: missing container name parameter."
  usage
fi

if [ -z $VOLUME_NAME ]
then
  echo "Error: missing volume name parameter."
  usage
fi

sudo docker run --rm --volumes-from $CONTAINER_NAME -v $(pwd):/backup busybox tar cvf /backup/backup.tar $VOLUME_NAME

Сирий скрипт відновлення однотомного відновлення:

#!/bin/bash
# This script allows you to restore a single volume from a container
# Data in restored in volume with same backupped path
NEW_CONTAINER_NAME=$1

usage() {
  echo "Usage: $0 [container name]"
  exit 1
}

if [ -z $NEW_CONTAINER_NAME ]
then
  echo "Error: missing container name parameter."
  usage
fi

sudo docker run --rm --volumes-from $NEW_CONTAINER_NAME -v $(pwd):/backup busybox tar xvf /backup/backup.tar

Використання може бути таким:

$ volume_backup.sh old_container /srv/www
$ sudo docker stop old_container && sudo docker rm old_container
$ sudo docker run -d --name new_container myrepo/new_container
$ volume_restore.sh new_container

Припущення: файл резервного копіювання називається backup.tar, він знаходиться в тому ж каталозі, що і сценарій резервного копіювання та відновлення, ім'я тома однакове між контейнерами.

ОНОВЛЕННЯ

Мені здається, що обсяги резервного копіювання з контейнерів не відрізняються від обсягів резервного копіювання з контейнерів даних.

Томи - це не що інше, як шляхи, пов'язані з контейнером, тому процес той самий.

Я не знаю, чи працює резервна копія докера також для тих же томів контейнерів, але ви можете використовувати:

sudo docker run --rm --volumes-from yourcontainer -v $(pwd):/backup busybox tar cvf /backup/backup.tar /data

і:

sudo docker run --rm --volumes-from yournewcontainer -v $(pwd):/backup busybox tar xvf /backup/backup.tar

ОНОВЛЕННЯ КІНЦЯ

Доступний цей приємний інструмент, який дозволяє створювати резервні копії та відновлення контейнерів томів докера:

https://github.com/discordianfish/docker-backup

якщо у вас є контейнер, пов’язаний з деякими томами контейнерів, подібними до цього:

$ docker run --volumes-from=my-data-container --name my-server ...

ви можете створити резервну копію всіх томів так:

$ docker-backup store my-server-backup.tar my-server

і відновити так:

$ docker-backup restore my-server-backup.tar

Або ви можете слідувати офіційним шляхом:

Як перенести томи, що містять лише дані, з одного хоста на інший?


Ні, це не ситуація "- обсяги - від", скоріше обсяги визначені в докерфілі, саме тому дані не зберігаються. Якщо ви подивитесь на dockerfile для тутум / лампи, ви побачите, що я маю на увазі.
pguardiario

Відповідь, яку я вже дав, є корисною для будь-якого типу томів, тому що томи є томами, а контейнери - контейнерами, різниці немає, якщо ви використовуєте контейнер як контейнер даних з точки зору томів
tommasop

Обсяг, визначений у dockerfile, знищується, коли контейнер знищений. Тому немає можливості повернути ці дані, коли ви переміщуєте контейнер.
pguardiario

ви повинні дістати дані перед переміщенням контейнера, а потім перезапустити контейнер і повернути дані назад
tommasop

1
Я отримую помилку: unknown shorthand flag: 'r' in -rm.чи має бути --rm? (Docker версія 18.09.5, збірка e8ff056)
Kuga

22

Якщо вам потрібно зробити резервне копіювання змонтованих томів, ви можете просто скопіювати папки зі свого Dockerhost .

Примітка. Якщо ви перебуваєте на Ubuntu , Dockerhost - це ваша локальна машина. Якщо ви перебуваєте на Mac , Dockerhost - це ваша віртуальна машина.

На Ubuntu

Ви можете знайти всі папки з томами тут: /var/lib/docker/volumes/таким чином ви можете скопіювати їх і архівувати, куди захочете.

На MAC

Це не так просто, як на Ubuntu. Вам потрібно скопіювати файли з VM.

Ось сценарій того, як скопіювати всі папки з томами з віртуальної машини (де працює сервер Docker) на локальну машину. Ми припускаємо, що ваша докер-машина VM назвала за замовчуванням .

docker-machine ssh default sudo cp -v -R /var/lib/docker/volumes/ /home/docker/volumes

docker-machine ssh default sudo chmod -R 777 /home/docker/volumes

docker-machine scp -R default:/home/docker/volumes ./backup_volumes

docker-machine ssh default sudo rm -r /home/docker/volumes

Він створить папку ./backup_volumes у вашому поточному каталозі та скопіює всі томи до цієї папки.

Ось сценарій, як скопіювати всі збережені томи з локального каталогу ( ./backup_volumes ) на машину Dockerhost

docker-machine scp -r ./backup_volumes default:/home/docker

docker-machine ssh default sudo mv -f /home/docker/backup_volumes /home/docker/volumes

docker-machine ssh default sudo chmod -R 777 /home/docker/volumes

docker-machine ssh default sudo cp -v -R /home/docker/volumes /var/lib/docker/

docker-machine ssh default sudo rm -r /home/docker/volumes

Тепер ви можете перевірити, чи працює він:

docker volume ls

Чи потрібно нам відключити контейнер, щоб зробити резервну копію цієї папки /var/lib/docker/volumesпід Ubuntu?
onknows

2
Немає необхідності. Ви можете скопіювати цю папку будь-коли.
Андрій Двояк

4
Технічно так, ви можете, але ви стикаєтеся з проблемами корупції даних, оскільки копія не є атомною, і може бути одночасно записується до тома, я б краще зупинити контейнер спочатку.
Алессандро С.

13

Скажімо, ваше ім'я тома - це data_volume. Ви можете використовувати наступні команди для резервного копіювання та відновлення гучності до та з зображення докерного імені data_image:

Для резервного копіювання:

docker run --rm --mount source=data_volume,destination=/data alpine tar -c -f- data | docker run -i --name data_container alpine tar -x -f-
docker container commit data_container data_image
docker rm data_container

Відновити:

docker run --rm data_image tar -c -f- data | docker run -i --rm --mount source=data_volume,destination=/data alpine tar -x -f-

Це резервне копіювання в реальному часі?
Кан Ендрю

2
Оскільки однаковий об'єм можна встановити на декількох докерах, так, це резервне копіювання в режимі реального часу. Напр. об'єм, встановлений на контейнері Mysql, можна створити резервну копію (за умови відсутності пошкодження даних). Але для служб, які потрібно припинити, боячись пошкодження даних, це не реально.
Сахіл Ахуджа

9

Я знаю, що це старе, але я розумію, що не існує добре задокументованого рішення для переміщення контейнера даних (як резервного копіювання) до хаба докер. Я щойно опублікував короткий приклад того, як це зробити на https://dzone.com/articles/docker-backup-your-data-volumes-to-docker-hub

Далі йде нижня лінія

У підручнику докера пропонується резервне копіювання та відновлення обсягу даних на локальному рівні. Ми будемо використовувати цю техніку, додамо ще кілька рядків, щоб цю резервну копію вдавити до хаба докера для легкого відновлення в будь-якому місці, де ми захочемо. Отже, давайте почнемо. Це наступні кроки:

Резервне копіювання обсягу даних з контейнера даних, який називається контейнером даних для резервного копіювання

docker run --rm --volumes-from data-container-backup --name tmp-backup -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /folderToBackup

Розгорніть цей файл tar на новий контейнер, щоб ми могли скористатися ним як частиною його зображення

docker run -d -v $(pwd):/backup --name data-backup ubuntu /bin/sh -c "cd / && tar xvf /backup/backup.tar"

Введіть зображення та натисніть зображення потрібним тегом ($ VERSION)

docker commit data-backup repo/data-backup:$VERSION
docker push repo/data-backup:$VERSION

Нарешті, давайте почистимо

docker rm data-backup
docker rmi $(docker images -f "dangling=true" -q)

Тепер у нашому репо є зображення з назвою резервного копіювання даних, це просто файлова система з файлами та папками резервного копіювання. Для того щоб використовувати це зображення (він також відновити з резервної копії), ми робимо наступне:

Запустіть контейнер даних із зображенням резервного копіювання даних

run -v /folderToBackup --entrypoint "bin/sh" --name data-container repo/data-backup:${VERSION}

Запустіть своє зображення WhatEver з томами з перетворювача даних

docker run --volumes-from=data-container repo/whatEver

Це воно.

Я був здивований, що для цієї роботи немає документації. Я сподіваюся, що хтось знайде це корисним. Я знаю, що мені знадобилося певний час подумати над цим.


8

Якщо ваш проект використовує docker-compose, ось такий підхід до резервного копіювання та відновлення обсягів.

docker-compose.yml

В основному ви додаєте db-backupі db-restoreпослуги у файл docker-compose.yml і адаптуєте його до назви вашого обсягу. Мій том названий dbdataу цьому прикладі.

version: "3"

services:
  db:
    image: percona:5.7
    volumes:
      - dbdata:/var/lib/mysql

  db-backup:
    image: alpine    
    tty: false
    environment:
      - TARGET=dbdata
    volumes:
      - ./backup:/backup
      - dbdata:/volume
    command: sh -c "tar -cjf /backup/$${TARGET}.tar.bz2 -C /volume ./"

  db-restore:
    image: alpine    
    environment:
      - SOURCE=dbdata
    volumes:
      - ./backup:/backup
      - dbdata:/volume
    command: sh -c "rm -rf /volume/* /volume/..?* /volume/.[!.]* ; tar -C /volume/ -xjf /backup/$${SOURCE}.tar.bz2"

Уникайте корупції

Для узгодженості даних зупиніть контейнер db перед тим, як створити резервну копію чи відновлення

docker-compose stop db

Резервне копіювання

Щоб створити резервну копію до призначення за замовчуванням ( backup/dbdata.tar.bz2):

docker-compose run --rm db-backup

Або, якщо ви хочете вказати альтернативне цільове ім'я, зробіть:

docker-compose run --rm -e TARGET=mybackup db-backup

Відновлення

Щоб відновити з backup/dbdata.tar.bz2, виконайте:

docker-compose run --rm db-restore

Або відновити з певного файлу, використовуючи:

docker-compose run --rm -e SOURCE=mybackup db-restore

Я адаптував команди https://loomchild.net/2017/03/26/backup-restore-docker-named-volumes/, щоб створити такий підхід.


5

Наступна команда запустить tar у контейнер із встановленими всіма названими томами даних та перенаправить вихід у файл:

docker run --rm `docker volume list -q | egrep -v '^.{64}$' | awk '{print "-v " $1 ":/mnt/" $1}'` alpine tar -C /mnt -cj . > data-volumes.tar.bz2

Переконайтесь, що протестуйте отриманий архів, якщо щось пішло не так:

tar -tjf data-volumes.tar.bz2

4

Якщо вам просто потрібна проста копія в архіві, ви можете спробувати мою маленьку утиліту: https://github.com/loomchild/volume-backup

Приклад

Резервне копіювання:

docker run -v some_volume:/volume -v /tmp:/backup --rm loomchild/volume-backup backup archive1

буде архівувати том, названий some_volumeдля /tmp/archive1.tar.bz2архівного файлу

Відновлення:

docker run -v some_volume:/volume -v /tmp:/backup --rm loomchild/volume-backup restore archive1

буде витирати і відновлення томи з ім'ям some_volumeз /tmp/archive1.tar.bz2архіву.

Більше інформації: https://medium.com/@loomchild/backup-restore-docker-named-volumes-350397b8e362


Я створив подібний інструмент github.com/01e9/docker-backup Він створює архіви резервного копіювання і додає їх до каталогу синхронізації Resilio
Олег

2

Я створив інструмент для оркестрування та запуску резервного копіювання даних та контейнерів mysql, просто названий docker-backup . На док-хабі є навіть готове до використання зображення .

В основному це написано на Bash, оскільки це в основному оркестрація. Він використовується duplicityдля фактичного резервного двигуна. Наразі можна створити резервну копію на FTP (S) та Amazon S3.

Конфігурація досить проста: напишіть файл конфігурації в YAML, описуючи, що робити резервну копію і куди, і ось ви йдете!

Для контейнерів даних він автоматично монтує обсяги, які спільно використовує ваш контейнер, для резервного копіювання та обробки. Для контейнерів mysql вони пов'язують їх і виконують mysqldump, що входить у комплект із вашим контейнером, і обробляє результат.

Я написав це через те, що я використовую Docker-Cloud, який не в курсі останніх версій докер-двигуна, і тому, що я хотів прийняти спосіб Docker, не включаючи жодного процесу резервного копіювання всередину своїх контейнерів додатків.


2

Якщо ви хочете зробити повне резервне копіювання, вам потрібно буде виконати кілька кроків:

  1. Зафіксуйте контейнер до зображення
  2. Збережіть зображення
  3. Створіть резервну копію об'єму контейнера, створивши файл смоли місця монтажу тома в контейнері.
  4. Повторіть кроки 1-3 для контейнера бази даних.

Зауважте, що виконання лише Docker-фіксації контейнера на зображення НЕ включає томи, приєднані до контейнера (див. Документацію до фіксації Docker ).

" Операція фіксації не буде включати будь-які дані, що містяться в томах, встановлених всередині контейнера. "


1

Якщо вам подобається вводити таємні оператори з командного рядка, вам сподобаються ці ручні методи резервного копіювання контейнерів. Майте на увазі, існує швидший і ефективніший спосіб резервного копіювання контейнерів, який так само ефективний. Я написав тут інструкції: https://www.morpheusdata.com/blog/2017-03-02-how-to-create-a-docker-backup-with-morpheus

Крок 1. Додайте хостинг Docker до будь-якої хмари Як пояснено в підручнику на сайті підтримки Morpheus, ви можете додати хоста Docker до вибраної хмари за лічені секунди. Почніть з вибору інфраструктури на головній панелі навігації Morpheus. Виберіть хости вгорі вікна інфраструктури та натисніть кнопку "+ хости контейнерів" у верхньому правому куті.

Щоб створити резервну копію хоста Docker у хмарі через Morpheus, перейдіть до екрана інфраструктури та відкрийте меню "+ Hosts of Consts".

Виберіть у меню тип хоста контейнера, виберіть групу та введіть дані у п’ять полів: Ім'я, Опис, Видимість, Виберіть хмару та Введіть теги (необов’язково). Клацніть Далі, а потім налаштуйте параметри хоста, вибравши план обслуговування. Зауважте, що поля гучності, пам’яті та підрахунку процесора будуть видимими лише у тому випадку, якщо в обраному вами плані встановлені спеціальні параметри.

Тут ви додаєте та розмір об'ємів, встановлюєте розмір пам’яті та кількість процесора та вибираєте мережу. Ви також можете налаштувати ім’я користувача та пароль ОС, ім'я домену та ім'я хоста, що за замовчуванням - це ім'я контейнера, яке ви ввели раніше. Клацніть Далі, а потім додайте всі робочі потоки автоматизації (необов’язково) .Зазвичай перегляньте свої налаштування та натисніть Завершити, щоб зберегти їх.

Крок 2: Додайте інтеграцію реєстру докера до публічних чи приватних хмар Адам Хікс описує в іншому підручнику Morpheus, як просто інтегруватися з приватним реєстром Docker. (Ніякої додаткової конфігурації не потрібно, щоб використовувати Morpheus для надання зображень у загальнодоступному центрі Docker за допомогою відкритого API Docker.)

Виберіть "Інтеграції" на вкладці "Адміністратор" на головній панелі навігації, а потім виберіть кнопку "+ Нова інтеграція" в правій частині екрана. У вікні інтеграції, що з’явиться, виберіть Док-сховище у спадному меню Тип, введіть ім’я та додайте кінцеву точку API приватного реєстру. Введіть ім’я користувача та пароль для використовуваного реєстру та натисніть кнопку Зберегти зміни.

Інтегруйте реєстр Docker із приватною хмарою за допомогою діалогового вікна «Нова інтеграція» Morpheus.

Щоб забезпечити інтеграцію, яку ви тільки що створили, виберіть Докер у розділі Тип у діалоговому вікні Створити екземпляр, виберіть реєстр у спадному меню Докер-реєстр на вкладці Налаштування, а потім продовжіть створення, як і будь-який контейнер Докера.

Крок 3: Управління резервними копіями Після того, як ви додали хост Docker та інтегрували реєстр, резервна копія буде налаштована та виконана автоматично для кожного наданого вами екземпляра. Підтримка Morpheus надає інструкції щодо перегляду резервних копій, створення резервної копії екземпляра та створення резервної копії сервера.


0

Якщо у вас справа така проста, як у мене, ви можете зробити наступне:

  1. Створіть Dockerfile, який розширює базове зображення вашого контейнера
  2. Я припускаю, що ваші томи відображені у вашій файловій системі, тому ви можете просто додати ці файли / папки до зображення, використовуючи ADD folder destination
  3. Готово!

Наприклад, якщо у вас є дані з томів вашого домашнього каталогу, наприклад, /home/mydataви можете запустити наступне:

DOCKERFILE=/home/dockerfile.bk-myimage
docker build --rm --no-cache -t $IMAGENAME:$TAG -f $DOCKERFILE /home/pirate

Де ваш DOCKERFILE вказує на такий файл:

FROM user/myimage
MAINTAINER Danielo Rodríguez Rivero <example@gmail.com>

WORKDIR /opt/data
ADD mydata .

Решта матеріалів успадковується від базового зображення. Тепер ви можете натиснути це зображення на докерну хмару, і ваші користувачі матимуть доступні дані безпосередньо на своїх контейнерах


який сенс у використанні гучності, якщо ви просто збираєтеся вкласти її в зображення в підсумку.
jiggunjer

@jiggunjer, що має об'єм, дозволяє перекрити дані в контейнері
Danielo515,

Я також можу змінити дані без гучності, використовуючи docker cp.
jiggunjer

0

Проблема : Ви хочете створити резервну копію контейнера зображень із об'ємами даних у ньому, але ця опція не виходить з поля, прямого і тривіального способу буде скопіювати шлях томів та створити резервну копію зображення докера ', перезавантажте його та зв’яжіть обидва разом. але це рішення здається незграбним, а не стійким і ремонтом. Вам потрібно створити роботу з кроном, яка б робила цей потік кожного разу.

Рішення : Використання dockup - зображення Docker для резервного копіювання томів Docker-контейнерів та завантаження його в s3 (Docker + Backup = dockup). dockup використовуватиме ваші облікові дані AWS для створення нового відра з назвою відповідно до змінної середовища, отримує налаштовані томи і буде розміщуватися з табелями, gzipped, відмічатися часом та завантажуватися у відро S3.

Кроки :

  1. конфігуруйте docker-compose.ymlта додайте env.txtдо нього файл конфігурації. Дані слід завантажити у виділене захищене відро s3 та готові до перезавантаження при виконанні DRP. для того, щоб перевірити, який шлях до томів для налаштування запуску docker inspect <service-name>та розміщення томів :

"Томи": {"/ etc / service-example": {}, "/ service-example": {}},

  1. Відредагуйте вміст конфігураційного файла env.txtта розмістіть його на шляху проекту:

    AWS_ACCESS_KEY_ID=<key_here>
    AWS_SECRET_ACCESS_KEY=<secret_here>
    AWS_DEFAULT_REGION=us-east-1
    BACKUP_NAME=service-backup
    PATHS_TO_BACKUP=/etc/service-example /service-example
    S3_BUCKET_NAME=docker-backups.example.com
    RESTORE=false
    
  2. Запустіть контейнер для док-станції

$ docker run --rm \
--env-file env.txt \
--volumes-from <service-name> \
--name dockup tutum/dockup:latest
  1. Після цього перевірте, чи містить ваше відроток s3 відповідні дані

-1

Це спосіб резервного копіювання тома-папки.
Якщо у вас є інфрачервоний реєстр докер, цей метод дуже корисний.
Це використовує реєстр докер для легкого переміщення zip-файлу.

#volume folder backup script. !/bin/bash

#common bash variables. set these variable before running scripts
REPO=harbor.otcysk.org:20443/levee
VFOLDER=/data/mariadb
TAG=mariadb1

#zip local folder for volume files
tar cvfz volume-backup.tar.gz $VFOLDER

#copy the zip file to volume-backup container.
#zip file must be in current folder.
docker run -d -v $(pwd):/temp --name volume-backup ubuntu \
       bash -c "cd / && cp /temp/volume-backup.tar.gz ."


#commit for pushing into REPO
docker commit volume-backup $REPO/volume-backup:$TAG

#check gz files in this container
#docker run --rm -it --entrypoint bash --name check-volume-backup \
        $REPO/volume-backup:$TAG

#push into REPO
docker push $REPO/volume-backup:$TAG

На іншому сервері

#pull the image in another server
docker pull $REPO/volume-backup:$TAG

#restore files in another server filesystem
docker run --rm -v $VFOLDER:$VFOLDER --name volume-backup $REPO/volume-backup:$TAG \
       bash -c "cd / && tar xvfz volume-backup.tar.gz"

Запустіть своє зображення, використовуючи цю папку томів.
Ви можете легко створити зображення, що має як один запуск зображення, так і один об'ємний поштовий файл.
Але я не рекомендую з різних причин (розмір зображення, команда введення, ..).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.