Бэкап и восстановление сервера

Предварительные условия

  • Установка сервера была произведенена с использованием томов.

  • Требуется пользователь с возможностью выполнять команды от имени 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}}' eraer
volume_name:rtest_era_vol_1s1srv_zone, volume_mount_point:/var/lib/docker/volumes/rtest_era_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/era_supv_vol.tgz  -C /var/lib/docker/volumes/era_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_eraer_backup.tar" r/r:20191031_r_backup
Восстановление

1. Создать docker тома для платформы, для каждого выполнить следующую команду.

$ sudo docker volume create <volume_name> (1)
1 <volume_name> – имя тома.

Например:

$ sudo docker volume create rtest_era_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_era_vol_1s1srv_zone
/var/lib/docker/volumes/rtest_era_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_era_vol_1s1srv_zone.tgz -C /var/lib/docker/volumes/rtest_era_vol_1s1srv_zone/_data

4. Загрузить образ из бэкапа.

$ sudo docker load -i <backup_image_filename>.tar (1)
1 <backup_image_filename> – имя файла содержащего образ.
$ sudo docker load -i 20191031_eraer_backup.tar

5. Запустить контейнер из нового образа.

$ sudo docker run --name <container_name> \ (1)
                  -v <era_volume_name>:/var/lib/era \ (2)
                  -v <era_supv_volume_name>:/etc/supervisor/conf.d \ (3)
                  -v <era_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 <era_volume_name> – том для рабочей директории платформы.
3 <era_supv_volume_name> – том для конфигураций supervisord.
4 <era_var_log_volume_name> – том для логов системы.
5 <image_name> – имя образа.
6 <image_tag> –тэг образа.

Например:

$ sudo docker run --name eraplatform \
-v eratest_era_vol_1s1srv_zone:/var/lib/era \
-v eratest_supervisor_vol_1s1srv_zone:/etc/supervisor/conf.d \
-v eratest_var_log_vol_1s1srv_zone:/var/log \
--tmpfs /run:rw,noexec,nosuid,size=4096k \
-ditP \
--restart unless-stopped \
--cap-add=NET_ADMIN \
--network host \
era:20191031__backup

Проверка результата