Предполагая, что проект был зарезервирован с помощью следующего скрипта:
И у меня есть сжатый tar-архив с полной резервной копией, есть ли какой-нибудь «однострочный» способ успешно восстановить и запустить проект на чистой машине?
1 ответ
Стандартный сценарий восстановления Docker «ой, я потерял все свои контейнеры» должен быть примерно
# Get a copy of the repository with docker-compose.yml
git clone git@github.com:...
# Unpack a backup specifically of the bind-mounted
# data directories
tar xzf data-backup.tar.gz
# Recreate all of the containers from scratch
docker-compose up -d --build
Для этого необходимо убедиться, что все данные в вашем приложении хранятся где-то за пределами отдельных контейнеров Docker. В настройке Docker Compose это означает использование директив volumes:
для хранения данных в другом месте. Типичная практика заключается в том, чтобы хранить как можно больше данных в базах данных и вообще не иметь постоянных данных в контейнерах, отличных от баз данных. Если вы беспокоитесь о потере всего дерева /var/lib/docker
, отдайте предпочтение привязке монтирования к именованным томам и используйте любое обычное решение для резервного копирования, которое вы обычно используете для резервного копирования соответствующих каталогов хоста.
Сценарий, который вы показываете, пытается сохранить ряд вещей, которые просто не нуждаются в резервном копировании:
- Если вы сохраняете каталог данных контейнера базы данных в смонтированном привязке хост-каталоге, вам не нужно отдельно делать резервную копию на уровне базы данных (хотя это и не помешает).
docker inspect
— крайне низкоуровневый диагностический инструмент, и обычно его запускать бесполезно; из него ничего нельзя восстановить- Вам не нужно
docker save
образы, потому что они находятся во внешнем реестре Docker (Docker Hub, AWS ECR, ...), и независимо от того, вы проверили их файлы Docker в системе управления версиями и можете их восстановить. - Вам не нужно
docker export
отдельные контейнеры, потому что они не хранят изменяемые данные, и вам в любом случае нужно очень регулярно их уничтожать.
Единственное, что он делает, — это использует хорошо известные внутренние детали Docker для резервного копирования содержимого именованных томов. Ручной доступ к файлам в /var/lib/docker
обычно не является лучшей практикой, и фактический формат файлов не гарантируется. Документация Docker обсуждает резервное копирование и восстановление именованных томов< /a> более переносимым способом (но я считаю, что монтирование с привязкой гораздо удобнее).
Похожие вопросы
Новые вопросы
bash
Этот тег предназначен для вопросов о сценариях, написанных для командной оболочки Bash. Сценарии оболочки с синтаксисом или другими ошибками, пожалуйста, проверьте их на https://shellcheck.net, прежде чем публиковать здесь. Вопросы об интерактивном использовании Bash, скорее всего, будут актуальны на Unix & Linux Stack Exchange или Super User, чем на Stack Overflow.