Контейнери одноразові, а томи - ні: там бази даних, завантажені файли, дані Redis. Резервна копія контейнерної інфраструктури - це насамперед копія томів і конфігурації.
Копія тому через тимчасовий контейнер (з документації Docker):
docker run --rm \
-v app_storage:/data:ro \
-v "$PWD":/backup \
alpine tar czf /backup/storage-$(date +%F).tar.gz -C /data .
Відновлення - зворотна операція в новий том.
Бази даних - не копіювати файли працюючої бази. Копія каталогу даних PostgreSQL чи MySQL під час роботи може бути неузгодженою й непридатною до відновлення. Правильно:
- логічний дамп засобами бази:
docker exec db pg_dump -Fc app > app.dump,mysqldump --single-transaction; - фізичні бекапи з WAL/binlog (pgBackRest, WAL-G, Percona XtraBackup) - для великих баз і відновлення на момент часу;
- або зупинка бази на час копіювання файлів - якщо простій допустимий.
Що ще входить у «відновити все»:
- конфігурація: Compose-файли, змінні оточення, секрети (у сховищі секретів, а не лише на сервері);
- образи: у реєстрі за незмінними тегами - щоб розгорнути ту саму версію;
- файли користувачів: краще одразу в об'єктному сховищі (S3, R2) з версіонуванням, а не в томі на одному сервері;
- інфраструктура як код: як заново створити сервер, мережу, DNS.
Правило 3-2-1: щонайменше 3 копії, на 2 різних типах носіїв, 1 - поза основною площадкою (інший провайдер чи регіон). Плюс незмінні копії (object lock), які не може видалити зловмисник чи програма-вимагач із доступом до сервера.
Плануючи відновлення, визначають:
- RPO - скільки даних допустимо втратити (година? хвилина?) - визначає частоту копій;
- RTO - за скільки часу треба відновитися - визначає підхід (запасний сервер, автоматизація).
Найважливіше - перевіряти відновлення. Регулярно (наприклад, щомісяця) розгортати копію в окремому середовищі й перевіряти, що застосунок працює. Неперевірена резервна копія часто виявляється порожньою, неповною чи без ключа розшифрування саме тоді, коли вона потрібна.
Моніторинг бекапів: сповіщення, якщо копія не створилася чи її розмір різко змінився.
Докладніше в документації: Томи: резервне копіювання й відновлення