scripts/docker/container.backup

97 lines
2.7 KiB
Bash
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/sh
# Purpose {{{
## Backup data of a Docker container.
## To do that, the script will:
## 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} ."
# }}}
## 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
## }}}
# }}}
# Get container service name {{{
ct_service_name=$(find /etc/systemd -type f -iname "*${ct_name}*.service" -printf "%f\n")
## If no specific systemd service exists, the docker.service will be used
if [ "${ct_service_name}" = "" ]; then
ct_service_name="docker.service"
[ "${DEBUG}" -eq "0" ] && printf '\e[1;35m%-6s\e[m\n' "DEBUG: Service name — No specific service found for ${ct_name} container, the ${ct_service_name} will be stopped."
else
[ "${DEBUG}" -eq "0" ] && printf '\e[1;35m%-6s\e[m\n' "DEBUG: Service name — Service name of the container to backup: ${ct_service_name} ."
fi
# }}}
exit 0