|
@@ -0,0 +1,32 @@
|
|
|
|
+#!/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=$SAVE_DIR/docker_volume_backup.log
|
|
|
|
+DATE=`date +"%Y%m%d_%H%M%S"`
|
|
|
|
+
|
|
|
|
+RETENTION=$((14*24*60)) # 2 weeks
|
|
|
|
+KEEP=7
|
|
|
|
+
|
|
|
|
+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 -it -v $x:/src -v $SAVE_DIR:/backup alpine tar -jpcf /backup/$x_$DATE.tar.bz2 /src"
|
|
|
|
+ echo $cmd >> $LOG_FILE
|
|
|
|
+ eval $cmd
|
|
|
|
+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
|