From e9a6f4dddae332526d927fd447104cf5f24bdc00 Mon Sep 17 00:00:00 2001 From: AnthonyAxenov Date: Thu, 20 Feb 2025 10:22:25 +0800 Subject: [PATCH] docker-volume-snapshot --- tools/docker-volume-snapshot.sh | 47 +++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 tools/docker-volume-snapshot.sh diff --git a/tools/docker-volume-snapshot.sh b/tools/docker-volume-snapshot.sh new file mode 100644 index 0000000..d620032 --- /dev/null +++ b/tools/docker-volume-snapshot.sh @@ -0,0 +1,47 @@ +#!/usr/bin/env bash +# Original filename: docker-volume-snapshot +# Author: Juned Khatri +# License: MIT +# Repo: https://github.com/junedkhatri31/docker-volume-snapshot + +set -e -o pipefail + +programname=`basename "$0"` + +display_usage() { + echo "usage: $programname (create|restore) source destination" + echo " create create snapshot file from docker volume" + echo " restore restore snapshot file to docker volume" + echo " source source path" + echo " destination destination path" + echo + echo "Tip: Supports tar's compression algorithms automatically" + echo " based on the file extention, for example .tar.gz" + echo + echo "Examples:" + echo "docker-volume-snapshot create xyz_volume xyz_volume.tar" + echo "docker-volume-snapshot create xyz_volume xyz_volume.tar.gz" + echo "docker-volume-snapshot restore xyz_volume.tar xyz_volume" + echo "docker-volume-snapshot restore xyz_volume.tar.gz xyz_volume" +} + +case "$1" in + "create") + if [[ -z "$2" || -z "$3" ]]; then display_usage; exit 1; fi + directory=`dirname "$3"` + if [ "$directory" == "." ]; then directory=$(pwd); fi + filename=`basename "$3"` + docker run --rm -v "$2:/source" -v "$directory:/dest" busybox tar cvaf "/dest/$filename" -C /source . + ;; + "restore") + if [[ -z "$2" || -z "$3" ]]; then display_usage; exit 1; fi + directory=`dirname "$2"` + if [ "$directory" == "." ]; then directory=$(pwd); fi + filename=`basename "$2"` + docker run --rm -v "$3:/dest" -v "$directory:/source" busybox tar xvf "/source/$filename" -C /dest + ;; + *) + display_usage + exit 1 # Command to come out of the program with status 1 + ;; +esac