Skip to content

Instantly share code, notes, and snippets.

@dieterrosch
Last active August 11, 2023 19:48
Show Gist options
  • Save dieterrosch/0c8d37201480394fca7567a1cdd5e758 to your computer and use it in GitHub Desktop.
Save dieterrosch/0c8d37201480394fca7567a1cdd5e758 to your computer and use it in GitHub Desktop.
A bash script to backup all docker images to files
#!/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 '{
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")
};
}'
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
#!/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