Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save ricardomiguelfaria/5932b33403dba3b5323cf0695e8f446a to your computer and use it in GitHub Desktop.
Save ricardomiguelfaria/5932b33403dba3b5323cf0695e8f446a 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 -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
#!/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