Администрирование
Раздел описывает операции сопровождения развёртывания, не относящиеся к повседневной работе с моделью в конфигураторе.
Резервное копирование всех работающих Docker-контейнеров
Для переноса или аварийного восстановления всей текущей Docker-развёртки
предусмотрены shell-скрипты в admin_scripts/docker/:
running_containers_backup.sh— создаёт единый.tar.gzархив всех контейнеров изdocker psи их хранилищ;running_containers_restore.sh— загружает образы, восстанавливает хранилища и запускает контейнеры из архива.
Скрипты работают по текущему состоянию Docker, а не по списку compose-файлов. Поэтому в архив попадают не только контейнеры Пересвета, но и дополнительные контейнеры, запущенные в рамках проекта.
Что попадает в архив
running_containers_backup.sh сохраняет:
committed-образы всех работающих контейнеров;
данные всех Docker volumes, смонтированных в эти контейнеры;
данные bind mount-путей с хоста (если не задан
--no_bind_mounts=1);docker inspectmetadata контейнеров, образов, volumes и сетей;сгенерированный
sh-фрагмент с командами повторного запуска контейнеров.
По умолчанию перед копированием хранилищ контейнеры останавливаются и после
копирования запускаются обратно. Это уменьшает риск неконсистентного архива
для PostgreSQL, LDAP, RabbitMQ и других сервисов с записью на диск. Режим
--skip_stop=1 оставляет контейнеры работающими, но архив может оказаться
логически неконсистентным.
Создание архива
Запускать из корня репозитория:
./admin_scripts/docker/running_containers_backup.sh
Основные параметры:
Параметр |
Назначение |
По умолчанию |
|---|---|---|
|
Каталог для итогового архива: относительно корня репозитория или абсолютный путь. |
|
|
Имя итогового |
|
|
Образ для архивации Docker volumes. |
|
|
|
|
|
|
|
|
|
|
Пример с явным именем архива:
./admin_scripts/docker/running_containers_backup.sh \
--archive_name=project_runtime_backup.tar.gz
Восстановление
./admin_scripts/docker/running_containers_restore.sh \
--archive=backups/docker_runtime/project_runtime_backup.tar.gz
При восстановлении:
images загружаются через
docker load;отсутствующие Docker volumes создаются автоматически;
если Docker volume уже существует, скрипт спрашивает, перезаписать его содержимое или пропустить восстановление этого volume;
если bind mount-путь уже существует, скрипт спрашивает, перезаписать его содержимое или пропустить восстановление этого bind mount;
пользовательские Docker networks из архива создаются по имени, если их ещё нет;
контейнеры запускаются из committed-образов с сохранёнными mount, port, hostname, restart policy и network-параметрами, которые удалось восстановить через Docker CLI.
Параметры восстановления:
Параметр |
Назначение |
По умолчанию |
|---|---|---|
|
Обязательный. Путь к архиву |
(нет) |
|
Образ для очистки и распаковки хранилищ. |
|
|
|
|
|
|
|
|
|
|
Предупреждение
Архив содержит Docker metadata, переменные окружения контейнеров и данные bind mounts. Храните его как конфиденциальный файл.
Примечание
Скрипт восстановления не заменяет исходные compose-файлы. Он нужен для разворачивания сохранённого runtime-состояния. Сложные параметры Docker networks (например, статические IPAM-настройки) сохраняются в metadata, но автоматически восстанавливаются только имена сетей.
Резервное копирование и восстановление OpenLDAP
Каталог OpenLDAP в контейнере хранит рабочие данные в каталоге
/var/lib/ldap. В файлах Docker Compose этот путь монтируется во
внешний том Docker (или в каталог на хосте при bind mount):
docker/compose/docker-compose.ldap.one_app.yml— томldap_data_one_app;docker/compose/docker-compose.ldap.yml— томldap_data.
Имя тома в среде Docker обычно имеет вид
<имя_проекта_compose>_<ключ_тома>, например compose_ldap_data_one_app.
Проверка: docker volume ls | grep ldap.
Скрипты расположены в admin_scripts/ldap/:
ldap_volume_backup.sh— создание архива;ldap_volume_restore.sh— восстановление из архива;resolve_ldap_storage.py— вспомогательный модуль для shell-скриптов: поcompose_fileвызываетсяdocker compose … config --format jsonи определяется монтирование/var/lib/ldapу сервиса (именованный том или bind mount); требуютсяdockerиpython3вPATH.
Запуск из корня репозитория
Скрипты ldap_volume_backup.sh и ldap_volume_restore.sh нужно
запускать из корня репозитория (того каталога, где лежат docker/compose/,
admin_scripts/ и т.д.). Текущий каталог проверяется по pwd -P и
должен совпадать с корнем, вычисленным по расположению скрипта. При запуске
из другого каталога скрипт завершится с сообщением об ошибке.
Исключение: вызов только -h или --help — справка выводится из любого
каталога, проверка корня не выполняется.
Пример:
cd /путь/к/peresvet
./admin_scripts/ldap/ldap_volume_backup.sh
Формат параметров
Все параметры задаются в виде --имя=значение; имена только в нижнем
регистре. Исключение: справка — -h или --help (без =), только
отдельным аргументом.
Логические значения для флагов skip_stop, skip_compose_stop,
assume_yes: истина — 1, true, yes, YES; всё остальное
интерпретируется как ложь (в т.ч. 0 и пустая строка).
Приоритет выбора цели бэкапа/восстановления: если задан
ldap_docker_volume, используется именованный Docker-том (полное имя);
иначе, если задан ldap_data_dir, используется каталог на хосте; иначе
цель определяется по compose_file (сервис ldap_service, монтирование
/var/lib/ldap).
Параметры: ldap_volume_backup.sh
Параметр |
Назначение |
По умолчанию |
|---|---|---|
|
Путь к compose-файлу с сервисом LDAP: относительно корня репозитория
или абсолютный. По нему вызывается |
|
|
Имя проекта Docker Compose (флаг |
(пусто) |
|
Имя сервиса в compose, у которого ищется том на |
|
|
Каталог для создаваемых |
|
|
Принудительно: полное имя Docker-тома с данными LDAP (игнорируется разбор compose для выбора цели). |
(пусто) |
|
Принудительно: каталог на хосте с данными LDAP (bind mount). Не
используется, если задан |
(пусто) |
|
Образ для контейнера |
|
|
При |
|
|
При |
|
Параметры: ldap_volume_restore.sh
Параметр |
Назначение |
По умолчанию |
|---|---|---|
|
Обязательный. Путь к файлу архива |
(нет) |
|
Как в бэкапе: для |
|
|
Как в бэкапе (флаг |
(пусто) |
|
Как в бэкапе. |
|
|
Как в бэкапе: принудительный том для распаковки архива. |
(пусто) |
|
Как в бэкапе: принудительный каталог на хосте. |
(пусто) |
|
Образ для |
|
|
При |
|
|
При |
|
|
При |
|
Примеры
Создание бэкапа (остановка ldap через compose по умолчанию, архив в
backups/ldap/):
./admin_scripts/ldap/ldap_volume_backup.sh
С явными параметрами:
cd /путь/к/peresvet
./admin_scripts/ldap/ldap_volume_backup.sh \
--compose_file=docker/compose/docker-compose.ldap.one_app.yml \
--compose_project_name=myproj \
--backup_dir=backups/ldap
Восстановление без запроса подтверждения:
cd /путь/к/peresvet
./admin_scripts/ldap/ldap_volume_restore.sh \
--assume_yes=1 \
--archive=backups/ldap/ИМЯ_АРХИВА.tar.gz
Вспомогательный resolve_ldap_storage.py
Основной интерфейс для администратора — shell-скрипты выше. Python-скрипт
вызывается ими автоматически. При ручной отладке аргументы позиционные
(не в формате --имя=значение):
compose_file— абсолютный или относительный путь к compose-файлу;compose_project_name(необязательно) — имя проекта дляdocker compose -p; пустая строка означает вызов без-p;ldap_service(необязательно) — имя сервиса, по умолчаниюldap.
Переменная окружения RESOLVE_CWD: рабочий каталог для docker compose
(оболочечные скрипты передают корень репозитория).
Стандартный вывод: одна строка из двух полей, разделённых символом
табуляции: режим volume и полное имя Docker-тома, либо режим bind
и абсолютный путь на хосте.
Предупреждение
Убедитесь, что архив соответствует той же развёртке (образ и схема LDAP),
что и целевое окружение. Конфигурация slapd в образе задаётся при
сборке; в типовом compose в том сохраняется прежде всего содержимое
/var/lib/ldap.