-
-
Save viiftw/8ab7bea10e350c352e5294d70819e77b to your computer and use it in GitHub Desktop.
Revisions
-
pirate revised this gist
Nov 15, 2020 . 1 changed file with 1 addition and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -32,7 +32,7 @@ echo "[+] Backing up $project_name project to $backup_dir" mkdir -p "$backup_dir" echo " - Saving docker-compose.yml config" cp "$project_dir/docker-compose.yml" "$backup_dir/docker-compose.yml" # Optional: run a command inside the contianer to dump your application's state/database to a stable file -
pirate revised this gist
Sep 2, 2020 . 1 changed file with 43 additions and 20 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,16 +1,28 @@ #!/usr/bin/env bash ### Bash Environment Setup # http://redsymbol.net/articles/unofficial-bash-strict-mode/ # https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html # set -o xtrace set -o errexit set -o errtrace set -o nounset set -o pipefail IFS=$'\n' # Fully backup a docker-compose project, including all images, named and unnamed volumes, container filesystems, config, logs, and databases. project_dir="${1:-$PWD}" if [ -f "$project_dir/docker-compose.yml" ]; then echo "[i] Found docker-compose config at $project_dir/docker-compose.yml" else echo "[X] Could not find a docker-compose.yml file in $project_dir" exit 1 fi project_name=$(basename "$project_dir") backup_time=$(date +"%Y-%m-%d_%H-%M") backup_dir="$project_dir/data/backups/$backup_time" # Source any needed environment variables [ -f "$project_dir/docker-compose.env" ] && source "$project_dir/docker-compose.env" [ -f "$project_dir/.env" ] && source "$project_dir/.env" @@ -19,31 +31,46 @@ backup_dir="$project_dir/data/backups/$backup_time" echo "[+] Backing up $project_name project to $backup_dir" mkdir -p "$backup_dir" echo " - Saving docker-compose.yml config" cp "$project_dir/docker-compose.yml" > "$backup_dir/docker-compose.yml" # Optional: run a command inside the contianer to dump your application's state/database to a stable file echo " - Saving application state to ./dumps" mkdir -p "$backup_dir/dumps" # your database/stateful service export commands to run inside docker go here, e.g. # docker-compose exec postgres env PGPASSWORD="$POSTGRES_PASSWORD" pg_dump -U "$POSTGRES_USER" "$POSTGRES_DB" | gzip -9 > "$backup_dir/dumps/$POSTGRES_DB.sql.gz" # docker-compose exec redis redis-cli SAVE # docker-compose exec redis cat /data/dump.rdb | gzip -9 > "$backup_dir/dumps/redis.rdb.gz" # Optional: pause the containers before backing up to ensure consistency # docker-compose pause for service_name in $(docker-compose config --services); do image_id=$(docker-compose images -q "$service_name") image_name=$(docker image inspect --format '{{json .RepoTags}}' "$image_id" | jq -r '.[0]') container_id=$(docker-compose ps -q "$service_name") service_dir="$backup_dir/$service_name" echo "[*] Backing up ${project_name}__${service_name} to ./$service_name..." mkdir -p "$service_dir" # save image echo " - Saving $image_name image to ./$service_name/image.tar" docker save --output "$service_dir/image.tar" "$image_id" if [[ -z "$container_id" ]]; then echo " - Warning: $service_name has no container yet." echo " (has it been started at least once?)" continue fi # save config echo " - Saving container config to ./$service_name/config.json" docker inspect "$container_id" > "$service_dir/config.json" # save logs echo " - Saving stdout/stderr logs to ./$service_name/docker.{out,err}" docker logs "$container_id" > "$service_dir/docker.out" 2> "$service_dir/docker.err" # save data volumes @@ -54,10 +81,6 @@ for service_name in $(docker-compose config --services); do mkdir -p $(dirname "$volume_dir") cp -a -r "$source" "$volume_dir" done # save container filesystem echo " - Saving container filesystem to ./$service_name/container.tar" -
pirate revised this gist
Jul 3, 2019 . 1 changed file with 0 additions and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -27,7 +27,6 @@ docker-compose config > "$backup_dir/docker-compose.yml" || exit 1 echo " - Saving database dumps to ./dumps" mkdir -p "$backup_dir/dumps" # your database/stateful service export commands go here, e.g. # docker-compose exec postgresql env PGPASSWORD="$POSTGRES_PASSWORD" pg_dump -U "$POSTGRES_USER" "$POSTGRES_DB" | gzip -9 > "$backup_dir/dumps/$POSTGRES_DB.sql.gz" for service_name in $(docker-compose config --services); do -
pirate revised this gist
Jul 3, 2019 . 1 changed file with 12 additions and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -8,6 +8,14 @@ project_name=$(basename "$project_dir") backup_time=$(date +"%Y-%m-%d_%H-%M") backup_dir="$project_dir/data/backups/$backup_time" # Optionally pause the containers # docker-compose pause # Source any needed environment variables [ -f "$project_dir/docker-compose.env" ] && source "$project_dir/docker-compose.env" [ -f "$project_dir/.env" ] && source "$project_dir/.env" echo "[+] Backing up $project_name project to $backup_dir" mkdir -p "$backup_dir" @@ -20,7 +28,7 @@ echo " - Saving database dumps to ./dumps" mkdir -p "$backup_dir/dumps" # your database/stateful service export commands go here, e.g. # docker-compose exec database pg_dump -U nextcloud nextcloud | gzip -9 > "$backup_dir/dumps/nextcloud.sql.gz" # docker-compose exec postgresql env PGPASSWORD="$POSTGRES_PASSWORD" pg_dump -U "$POSTGRES_USER" "$POSTGRES_DB" | gzip -9 > "$backup_dir/dumps/$POSTGRES_DB.sql.gz" for service_name in $(docker-compose config --services); do container_id=$(docker-compose ps -q "$service_name") @@ -65,3 +73,6 @@ echo "[*] Compressing backup folder to $backup_dir.tar.gz" tar -zcf "$backup_dir.tar.gz" --totals "$backup_dir" && rm -Rf "$backup_dir" echo "[√] Finished Backing up $project_name to $backup_dir.tar.gz." # Resume the containers if paused above # docker-compose unpause -
pirate revised this gist
Jul 3, 2019 . 1 changed file with 1 addition and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -62,6 +62,6 @@ for service_name in $(docker-compose config --services); do done echo "[*] Compressing backup folder to $backup_dir.tar.gz" tar -zcf "$backup_dir.tar.gz" --totals "$backup_dir" && rm -Rf "$backup_dir" echo "[√] Finished Backing up $project_name to $backup_dir.tar.gz." -
pirate revised this gist
Jul 3, 2019 . 1 changed file with 5 additions and 4 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,25 +1,26 @@ #!/usr/bin/env bash # Fully backup a docker-compose project, including all images, named and unnamed volumes, container filesystems, config, logs, and databases. project_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && cd .. && pwd )" cd "$project_dir" project_name=$(basename "$project_dir") backup_time=$(date +"%Y-%m-%d_%H-%M") backup_dir="$project_dir/data/backups/$backup_time" echo "[+] Backing up $project_name project to $backup_dir" mkdir -p "$backup_dir" echo " - Saving config to ./docker-compose.yml" docker-compose config > "$backup_dir/docker-compose.yml" || exit 1 # save database dump files echo " - Saving database dumps to ./dumps" mkdir -p "$backup_dir/dumps" # your database/stateful service export commands go here, e.g. # docker-compose exec database pg_dump -U nextcloud nextcloud | gzip -9 > "$backup_dir/dumps/nextcloud.sql.gz" for service_name in $(docker-compose config --services); do container_id=$(docker-compose ps -q "$service_name") -
pirate revised this gist
Jul 3, 2019 . 1 changed file with 28 additions and 24 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,62 +1,66 @@ #!/usr/bin/env bash # Fully backup a docker-compose project, including all images, named and unnamed volumes, container filesystems, config, logs, and databases. project_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && cd .. && pwd )" cd "$project_dir" project_name=$(basename "$project_dir") backup_time=$(date +"%Y-%m-%d_%H-%M") backup_dir="$project_dir/data/backups/$backup_time" echo "[+] Backing up $project_name docker-compose project to $backup_dir..." mkdir -p "$backup_dir" echo " - Saving config to ./docker-compose.yml" docker-compose config > "$backup_dir/docker-compose.yml" || exit 1 # save database dump files echo " - Saving database dumps to $backup_dir/dumps" mkdir -p "$backup_dir/dumps" # your database/stateful service export commands go here, e.g. #docker-compose exec database pg_dump -U nextcloud nextcloud | gzip -9 > "$backup_dir/dumps/nextcloud.sql.gz" for service_name in $(docker-compose config --services); do container_id=$(docker-compose ps -q "$service_name") image_name=$(docker inspect -f "{{ .Config.Image }}" "$container_id") image_id=$(docker image ls -q "$image_name") service_dir="$backup_dir/$service_name" echo "[*] Backing up ${project_name}__${service_name} to ./$service_name..." mkdir -p "$service_dir" # save config echo " - Saving config to ./$service_name/config.json" docker inspect "$container_id" > "$service_dir/config.json" # save logs echo " - Saving logs to ./$service_name/docker.out/err" docker logs "$container_id" > "$service_dir/docker.out" 2> "$service_dir/docker.err" # save data volumes mkdir -p "$service_dir/volumes" for source in $(docker inspect -f '{{range .Mounts}}{{println .Source}}{{end}}' "$container_id"); do volume_dir="$service_dir/volumes$source" echo " - Saving $source volume to ./$service_name/volumes$source" mkdir -p $(dirname "$volume_dir") cp -a -r "$source" "$volume_dir" done # save image echo " - Saving $image_name image to ./$service_name/image.tar" docker save --output "$service_dir/image.tar" "$image_id" # save container filesystem echo " - Saving container filesystem to ./$service_name/container.tar" docker export --output "$service_dir/container.tar" "$container_id" # save entire container root dir echo " - Saving container root to $service_dir/root" cp -a -r "/var/lib/docker/containers/$container_id" "$service_dir/root" done echo "[*] Compressing backup folder to $backup_dir.tar.gz" tar --totals -zcf "$backup_dir.tar.gz" "$backup_dir" && rm -Rf "$backup_dir" echo "[√] Finished Backing up $project_name to $backup_dir.tar.gz." -
pirate created this gist
Jul 3, 2019 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,62 @@ #!/usr/bin/env bash # Fully backup a docker-compose project, including all images, named and unnamed volumes, container filesystems, config, logs, and databases. project_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && cd .. && pwd )" cd "$project_dir" project_name=$(basename "$project_dir") backup_time=$(date +"%Y-%m-%d_%H:%M") backup_dir="$project_dir/data/backups/$backup_time" echo "[+] Backing up $project_name docker-compose project to $backup_dir..." mkdir -p "$backup_dir" # save database dump file echo " - Saving database dumps to $backup_dir/databases" mkdir -p "$backup_dir/databases" # your database/stateful service export commands go here, e.g. #docker-compose exec database pg_dump -U nextcloud nextcloud | gzip -9 > "$backup_dir/databases/nextcloud.sql.gz" echo " - Saving config to $backup_dir/docker-compose.yml" docker-compose config > "$backup_dir/docker-compose.yml" for service_name in $(docker-compose config --services); do container_id=$(docker-compose ps -q "$service_name") image_name=$(docker inspect -f "{{ .Config.Image }}" "$container_id") image_id=$(docker image ls -q "$image_name") service_dir="$backup_dir/$service_name" echo "[*] Backing up ${project_name}__${service_name} to $service_dir..." mkdir -p "$service_dir" # save image echo " - Saving $image_name image to $service_dir/image.tar" docker save --output "$service_dir/image.tar" "$image_id" # save container filesystem echo " - Saving container filesystem to $service_dir/container.tar" docker export --output "$service_dir/container.tar" "$container_id" # save data volumes mkdir -p "$service_dir/volumes" for source in $(docker inspect -f '{{range .Mounts}}{{println .Source}}{{end}}' "$container_id"); do volume_dir="$service_dir/volumes$source" echo " - Saving $source volume to $volume_dir" mkdir -p $(dirname "$volume_dir") cp -a -r "$source" "$volume_dir" done # save logs echo " - Saving logs to $service_dir/docker.out/err" docker logs "$container_id" > "$service_dir/docker.out" 2> "$service_dir/docker.err" # save config echo " - Saving config to $service_dir/config.json" docker inspect "$container_id" > "$service_dir/config.json" # save entire container root dir echo " - Saving container root to $service_dir/root" cp -a -r "/var/lib/docker/containers/$container_id" "$service_dir/root" done echo "[√] Finished Backing up $project_name to $backup_dir."