scripts/docker/container.backup

85 lines
2.1 KiB
Plaintext
Raw Normal View History

#!/bin/sh
# Purpose {{{
## Backup data of a Docker container.
## To do that, the script will:
2019-10-17 15:49:42 +02:00
## Try to stop the corresponding container (or docker if no related service is found)
## Make a archive of the container's data to a backup path
## Clean old backup
## Restart the container service (or docker.service)
# }}}
# How-to use {{{
## The container and it's data directory should have the same name.
# }}}
# Vars {{{
DEBUG=0
# }}}
# Tests {{{
# Expect at least 1 argument and 3 maximum {{{
case $# in
1 )
ct_name="${1}"
## Absolut path to the container data
docker_data_path="/srv/docker"
## Absolut path to store the archives.
## A sub-directory will be created for the container
docker_backup_path="/mnt/backup/docker"
;;
2 )
ct_name="${1}"
docker_data_path="${2}"
docker_backup_path="/mnt/backup/docker"
;;
3 )
ct_name="${1}"
docker_data_path="${2}"
docker_backup_path="${3}"
;;
* )
cat << HELP
container.backup --
Backup data of a given Docker container.
EXAMPLE:
- Backup data of FIRST_DOCK container
container.backup FIRST_DOCK
HELP
exit 1
;;
esac
[ "${DEBUG}" -eq "0" ] && printf '\e[1;35m%-6s\e[m\n' "DEBUG: Args management — Container name to backup: ${ct_name} ."
[ "${DEBUG}" -eq "0" ] && printf '\e[1;35m%-6s\e[m\n' "DEBUG: Args management — Path to Docker data: ${docker_data_path} ."
[ "${DEBUG}" -eq "0" ] && printf '\e[1;35m%-6s\e[m\n' "DEBUG: Args management — Path to store the backup: ${docker_backup_path} ."
# }}}
2019-10-17 15:49:42 +02:00
## Ensure Docker data directory exists {{{
if [ ! -d "${docker_data_path}" ]; then
printf '\e[0;31m%-6s\e[m\n' "Docker data directory doesn't seems available: ${docker_data_path} ."
exit 1
fi
## }}}
## Ensure backup directory exists {{{
if [ ! -d "${docker_backup_path}" ]; then
printf '\e[0;31m%-6s\e[m\n' "Backup directory doesn't seems available: ${docker_backup_path} ."
exit 1
fi
## }}}
## Ensure container data directory exists {{{
if [ ! -d "${docker_data_path}/${ct_name}" ]; then
printf '\e[0;31m%-6s\e[m\n' "Container directory doesn't seems available: ${docker_data_path}/${ct_name} ."
exit 1
fi
## }}}
# }}}
exit 0