Forked from ricardomiguelfaria/backup_all_docker_images.sh
Created
July 24, 2019 18:55
-
-
Save neumachen/805959ab4e8a26d4d70e19e4c4d202dd to your computer and use it in GitHub Desktop.
A bash script to backup all docker images to files
This file contains 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 characters
#!/usr/bin/sh | |
if [[ $# -eq 0 ]]; then | |
echo "Usage: $0 <backup_dir>" | |
exit | |
fi | |
destination=$1 | |
if ! type "pv" > /dev/null; then | |
echo 'pv' command not found on your system, install it to get a nice progress indicator... | |
else | |
PV=" pv " | |
fi | |
docker images | awk -v destination="$destination" -v PV="$PV" '{ | |
if ($1 != "REPOSITORY") | |
{ | |
original = $1; | |
size = $5; | |
gsub("/","_",$1); | |
normalised_container_name = $1 | |
print "Container: "original" => "destination"/"normalised_container_name".tgz"; | |
system("docker save "original" | "PV" | gzip -c > "destination"/"normalised_container_name".tgz") | |
}; | |
}' | |
containers=$(ls $destination/*.tgz) | |
for container in $containers | |
do | |
normalised_container_name=${container//\//_} | |
echo "Container: $container => $1/$normalised_container_name.tgz" | |
if [[ -s $1/$normalised_container_name.tgz ]]; then | |
echo "File $1/$normalised_container_name already exists with filesize > 0, skipping backup..." | |
continue | |
fi | |
done | |
This file contains 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 characters
#!/usr/bin/sh | |
if [[ $# -eq 0 ]]; then | |
echo "Usage: $0 <backup_dir>" | |
exit | |
fi | |
containers=$(ls $1/*.tgz) | |
if ! type "pv" > /dev/null; then | |
echo 'pv' command not found on your system, install it to get a nice progress indicator... | |
else | |
PV=" pv " | |
fi | |
for container in $containers | |
do | |
stripped_container=$(basename $container .tgz) | |
echo "Container: $container => ${stripped_container//_/\/}" | |
gzip -d -c $container | $PV | docker load | |
done | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment