docker_volume_backup.sh 1.0 KB

1234567891011121314151617181920212223242526272829303132
  1. #!/bin/bash
  2. # Usage: ./docker_volume_backup.sh $SAVE_DIR
  3. # Or: curl -s https://git.immiles.com/miles/scripts/raw/master/docker_volume_backup.sh | bash -s $SAVE_DIR
  4. #set -ex
  5. SAVE_DIR=$1
  6. LOG_FILE=$SAVE_DIR/docker_volume_backup.log
  7. DATE=`date +"%Y%m%d_%H%M%S"`
  8. RETENTION=$((14*24*60)) # 2 weeks
  9. KEEP=7
  10. echo "--------------------------$DATE------------------------" >> $LOG_FILE
  11. echo "[BEGIN] Backup docker volume" >> $LOG_FILE
  12. # list and iterate volume
  13. volumes=( `docker volume ls | awk '{print $2}' | tail -n +2` )
  14. for x in "${volumes[@]}"; do
  15. cmd="docker run --rm -it -v $x:/src -v $SAVE_DIR:/backup alpine tar -jpcf --ignore-failed-read /backup/$x_$DATE.tar.bz2 /src"
  16. echo $cmd >> $LOG_FILE
  17. eval $cmd
  18. done
  19. # Clean up
  20. 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
  21. echo "[Finish] Backup docker volume" >> $LOG_FILE
  22. echo "--------------------------$DATE------------------------" >> $LOG_FILE
  23. exit 0