Бэкап и восстановление сервера
Предварительные условия
-
Установка сервера была произведенена с использованием томов.
-
Требуется пользователь с возможностью выполнять команды от имени root.
Операции
Бэкап и восстановление PostgreSQL выходит за рамки данной инструкции.
1. Узнать имя контейнера.
$ sudo docker ps -a
В результате будут отображены все созданные контейнеры, среди них нужно выбрать целевой.
2. Узнать имена томов используемые контейнером и их точки монтирования.
$ sudo docker inspect -f '{{range .Mounts}}volume_name:{{.Name}}, volume_mount_point:{{.Source}}{{printf "\n"}}{{end}}' <container_name> (1)
1 | <container_name> – имя контейнера. |
Например:
$ sudo docker inspect -f '{{range .Mounts}}volume_name:{{.Name}}, volume_mount_point:{{.Source}}{{printf "\n"}}{{end}}' rosteller
volume_name:rtest_rostell_vol_1s1srv_zone, volume_mount_point:/var/lib/docker/volumes/rtest_rostell_vol_1s1srv_zone/_data (1) (2)
volume_name:rtest_supervisor_vol_1s1srv_zone, volume_mount_point:/var/lib/docker/volumes/rtest_supervisor_vol_1s1srv_zone/_data
volume_name:rtest_var_log_vol_1s1srv_zone, volume_mount_point:/var/lib/docker/volumes/rtest_var_log_vol_1s1srv_zone/_data
1 | volume_name – имя тома. |
2 | volume_mount_point – точка монтирования тома на файловой системе сервера. |
з. Заархивировать содержимое каждого тома
$ sudo tar -zcvf <backup_dir>/<volume_name>.tgz -C <volume_mount_point> .
Например:
$ sudo tar -zcvf /tmp/backups/rostell_supv_vol.tgz -C /var/lib/docker/volumes/rostell_supv_vol/_data .
4. Сохраняем контейнер в образ.
$ sudo docker container commit \
--pause \
<container_name> \ (1)
<image_name>:<image_tag> (2) (3)
1 | <container_name> – имя контейнера. |
2 | <image_name> – имя нового образа. |
3 | <image_tag> – тэг нового образа. |
Например:
$ sudo docker container commit --pause rtest_master_1s1srv_zone r/r:20191031_r_backup
5. Сохраняем новый образ в файл.
$ sudo docker image save \
--output="<file_name>.tar" \ (1)
<image_name>:<image_tag> (2) (3)
1 | <file_name> – имя файла в который будут сохранены данные. |
2 | <image_name> – имя нового образа. |
3 | <image_tag> – тэг нового образа. |
Например:
sudo docker image save --output="20191031_rosteller_backup.tar" r/r:20191031_r_backup
1. Создать docker тома для платформы, для каждого выполнить следующую команду.
$ sudo docker volume create <volume_name> (1)
1 | <volume_name> – имя тома. |
Например:
$ sudo docker volume create rtest_rostell_vol_1s1srv_zone
2. Узнать точки монтирования созданных томов.
$ sudo docker volume inspect -f '{{ .Mountpoint }}' <volume_name>
<volume_mount_point> (1)
1 | volume_mount_point – точка монтирования тома на файловой системе сервера. |
Например:
$ sudo docker volume inspect -f '{{ .Mountpoint }}' rtest_rostell_vol_1s1srv_zone
/var/lib/docker/volumes/rtest_rostell_vol_1s1srv_zone/_data
3. Разархивировать информацию из бэкапа в созданный том, повторив операцию для каждого бэкапа.
$ tar -zxvf \
<backup_folder_path>/<volume_filename>.tgz \ (1) (2)
-C <new_volume_mount_point> (3)
1 | <backup_folder_path> – путь до директории с файлом бэкапа тома. |
2 | <volume_filename> – имя файла с бэкапом тома. |
3 | <new_volume_mount_point> – точка монтирования нового тома. |
Например:
$ sudo tar -zxvf rtest_rostell_vol_1s1srv_zone.tgz -C /var/lib/docker/volumes/rtest_rostell_vol_1s1srv_zone/_data
4. Загрузить образ из бэкапа.
$ sudo docker load -i <backup_image_filename>.tar (1)
1 | <backup_image_filename> – имя файла содержащего образ. |
$ sudo docker load -i 20191031_rosteller_backup.tar
5. Запустить контейнер из нового образа.
$ sudo docker run --name <container_name> \ (1)
-v <r_volume_name>:/var/lib/rostell \ (2)
-v <r_supv_volume_name>:/etc/supervisor/conf.d \ (3)
-v <r_var_log_volume_name>:/var/log \ (4)
--tmpfs /run:rw,noexec,nosuid,size=4096k
-ditP
--restart unless-stopped
--cap-add=NET_ADMIN
--network host
<image_name>:<image_tag> (5) (6)
1 | <container_name> – имя создаваемого контейнера. |
2 | <r_volume_name> – том для рабочей директории платформы. |
3 | <r_supv_volume_name> – том для конфигураций supervisord. |
4 | <r_var_log_volume_name> – том для логов системы. |
5 | <image_name> – имя образа. |
6 | <image_tag> –тэг образа. |
Например:
$ sudo docker run --name rplatform \
-v rtest_rostell_vol_1s1srv_zone:/var/lib/rostell \
-v rtest_supervisor_vol_1s1srv_zone:/etc/supervisor/conf.d \
-v rtest_var_log_vol_1s1srv_zone:/var/log \
--tmpfs /run:rw,noexec,nosuid,size=4096k \
-ditP \
--restart unless-stopped \
--cap-add=NET_ADMIN \
--network host \
r/r:20191031_r_backup