full_backup_docker/full_backup_docker.sh
grimhilt 248363fea0 mtp
2023-01-23 21:40:05 +01:00

65 lines
2.2 KiB
Bash

BACKUP_DIR='/docker/backup'
ALL_CONTAINER=$(docker ps --format '{{.Names}}')
ALL_PROJECTS=$(for i in $ALLCONTAINER; do docker inspect --format '{{ index .Config.Labels "com.docker.compose.project.working_dir"}}' $i; done | sort -u)
EXPORT_DIR='./export'
for project in $ALL_PROJECTS; do
PROJECT_NAME=${project##*/}
#todo loop
read -p "Stop docker $PROJECT_NAME (y/n)?" choice
case "$choice" in
y|Y ) docker stop $PROJECT_NAME;;
n|N ) continue;;
* ) echo "invalid";;
esac
mkdir $EXPORT_DIR/$PROJECT_NAME
echo "Exporting docker-compose.yml"
cp $project/docker-compose.yml $EXPORT_DIR/$PROJECT_NAME
ALL_IMAGES="todo"
for j in $ALL_IMAGES; do
#save
ALL_VOLUMES=$(docker inspect -f '{{index .Mounts 0}}' $j)
for k in $ALL_VOLUMES; do
#save
done
done
docker start $PROJECT_NAME
#zip everything
done
ALL_CONTAINER=$(docker ps --format '{{.Names}}')
ALL_PROJECTS=$(for i in $ALL_CONTAINER; do docker inspect --format '{{ index .Config.Labels "com.docker.compose.project.working_dir"}}' $i; done | sort -u)
EXPORT_DIR='./export'
for project in $ALL_PROJECTS; do
PROJECT_NAME=${project##*/}
echo -e '\n project: '$project
# all images
while read -r image; do
echo 'img: '$image
done < <(grep -Po "(?<=image: ).*$" $project/docker-compose.yml)
# all container name
while read -r name; do
echo 'container: '$name
while read -r volume; do
echo "vol: "$volume
done < <(docker inspect --format="{{.Mounts}}" $name | grep '[\{.+\}]*')
done < <(grep -Po '(?<=container_name: ).*$' $project/docker-compose.yml)
done
# test multi volumes
# postgres
# jisti using config env
docker inspect --format="{{.Mounts}}" synapse
[{bind /etc/localtime /etc/localtime ro false rprivate} {volume nextcloud_nextcloud /var/lib/docker/volumes/nextcloud_nextcloud/_data /var/www/html local rw true } {bind /docker/nextcloud/app/config /var/www/html/config rw true rprivate} {bind /docker/nextcloud/app/custom_apps /var/www/html/custom_apps rw true rprivate} {bind /media/nextcloud /var/www/html/data rw true rprivate} {bind /docker/nextcloud/app/themes /var/www/html/themes rw true rprivate}]