#!/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 ## }}} # }}} exit 0