docker_volume_backup.sh 1.0 KB

12345678910111213141516171819202122232425262728293031323334
  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=$HOME/logs/docker_volume_backup.log
  7. DATE=`date +"%Y%m%d_%H%M%S"`
  8. RETENTION=$((14*24*60)) # 2 weeks
  9. KEEP=7
  10. mkdir -p $HOME/logs
  11. echo "--------------------------$DATE------------------------" >> $LOG_FILE
  12. echo "[BEGIN] Backup docker volume" >> $LOG_FILE
  13. # list and iterate volume
  14. volumes=( `docker volume ls | awk '{print $2}' | tail -n +2` )
  15. for x in "${volumes[@]}"; do
  16. cmd="docker run --rm -v $x:/src -v $SAVE_DIR:/backup ubuntu tar --ignore-failed-read -jpcf /backup/${x}_${DATE}.tar.bz2 /src"
  17. echo $cmd >> $LOG_FILE
  18. eval $cmd >> $LOG_FILE 2>&1
  19. done
  20. # Clean up
  21. 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
  22. echo "[Finish] Backup docker volume" >> $LOG_FILE
  23. echo "--------------------------$DATE------------------------" >> $LOG_FILE
  24. exit 0