summaryrefslogtreecommitdiff
path: root/docker_tools/docker_backup_crazy.sh
blob: a9217953baeff3219773c1c4b30e1e273fcd73ab (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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