diff options
Diffstat (limited to 'docker_tools/docker_backup_crazy.sh')
| -rwxr-xr-x | docker_tools/docker_backup_crazy.sh | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/docker_tools/docker_backup_crazy.sh b/docker_tools/docker_backup_crazy.sh new file mode 100755 index 0000000..a921795 --- /dev/null +++ b/docker_tools/docker_backup_crazy.sh @@ -0,0 +1,57 @@ +#!/bin/bash + +# Please read the README.md distributed along this script + +CONTAINERS=`docker ps --format '{{.Names}}'` + +echo "" +echo " == BACKUP RUNNING DOCKER BINDS & VOLUMES (v0.1) == " +echo "" + +for c in $CONTAINERS; do + + IMAGE=`docker inspect -f '{{.Config.Image}}' $c` + VOLUMES=`docker inspect -f '{{range .Mounts}}{{if eq .Type "volume"}}{{println .Name}}{{end}}{{end}}' $c` + BINDS=`docker inspect -f '{{range .Mounts}}{{if eq .Type "bind"}}{{println .Source}}{{end}}{{end}}' $c` + TIMESTAMP=`date +"%Y%m%d_%H%M%S"` + ENVIRONMENT=`docker inspect -f '{{ range .Config.Env }}--{{println .}}{{end}}' $c` + + echo " + Backing up container $c (running docker image $IMAGE)" + FILENAME=${TIMESTAMP}_${c}_env.txt + echo " +--> backing up environment variables to file: $FILENAME" + echo $ENVIRONMENT > $FILENAME + + + for v in $VOLUMES; do + FILENAME=${TIMESTAMP}_${c}_volume_${v}.tar.gz + echo " +--> backing up volume: $v to file: $FILENAME" + docker run --rm -it -v $v:/IN:ro -v `pwd`:/OUT bash tar -C /IN -czf /OUT/$FILENAME . + done + + COUNT=0 + + for b in $BINDS; do + ((COUNT++)) + FILENAME=${TIMESTAMP}_${c}_bind_${COUNT}.tar.gz + + if [[ -d "$b" ]] + then + echo " |--> backing up bind (directory) ($COUNT): $b to file: $FILENAME" + docker run --rm -it -v $b:/IN:ro -v `pwd`:/OUT bash tar -C /IN -czf /OUT/$FILENAME . + fi + + if [[ -f "$b" ]] + then + echo " |--> backing up bind (file) ($COUNT): $b to file: $FILENAME" + docker run --rm -it -v $(dirname $b):/IN:ro -v `pwd`:/OUT bash tar -C /IN -czf /OUT/$FILENAME $(basename $b) + fi + + done + + echo '' + +done + + + + |
