#!/bin/bash # Usage: ./docker_volume_backup.sh $SAVE_DIR # Or: curl -s https://git.immiles.com/miles/scripts/raw/master/docker_volume_backup.sh | bash -s $SAVE_DIR #set -ex SAVE_DIR=$1 LOG_FILE=$HOME/logs/docker_volume_backup.log DATE=`date +"%Y%m%d_%H%M%S"` RETENTION=$((14*24*60)) # 2 weeks KEEP=7 mkdir -p $HOME/logs echo "--------------------------$DATE------------------------" >> $LOG_FILE echo "[BEGIN] Backup docker volume" >> $LOG_FILE # list and iterate volume volumes=( `docker volume ls | awk '{print $2}' | tail -n +2` ) for x in "${volumes[@]}"; do cmd="docker run --rm -v $x:/src -v $SAVE_DIR:/backup ubuntu tar --ignore-failed-read -jpcf /backup/${x}_${DATE}.tar.bz2 /src" echo $cmd >> $LOG_FILE eval $cmd >> $LOG_FILE 2>&1 done # Clean up find $SAVE_DIR -name "*.tar.bz2" -type f -printf '%T@ %p\n' -mmin +$RETENTION | sort -nr | tail -n +$KEEP | awk '{ print $2 }' | xargs -r rm >> $LOG_FILE 2>&1 echo "[Finish] Backup docker volume" >> $LOG_FILE echo "--------------------------$DATE------------------------" >> $LOG_FILE exit 0