Loading backup/Dockerfile +1 −0 Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ FROM docker.io/library/alpine:3.14 RUN echo 'https://dl-cdn.alpinelinux.org/alpine/edge/testing' >> /etc/apk/repositories && \ echo 'https://dl-cdn.alpinelinux.org/alpine/edge/community' >> /etc/apk/repositories && \ apk add --update --no-cache \ findutils \ skopeo \ reg \ ; Loading backup/backup +4 −1 Original line number Diff line number Diff line Loading @@ -17,6 +17,8 @@ then exit 1 fi command -v skopeo >/dev/null || { echo 'skopeo is missing.' >&2; exit 2; } registry="$1" dest="$2" Loading Loading @@ -44,6 +46,7 @@ NR>2 { } } END { exit retruncode if ( exitcode == 1) print "Backup failed for some images." exit exitcode } ' backup/restore +61 −0 Original line number Diff line number Diff line #!/bin/sh set -eu usage() { echo "$0: BACKUP_SOURCE REGISTRY_DOMAIN" } if [ "${1:-}" = -h ] || [ "${1:-}" = --help ] then usage exit 0 fi if [ "$#" -ne 2 ] then usage exit 1 fi command -v skopeo >/dev/null || { echo 'skopeo is missing.' >&2; exit 2; } src="$1" registry="$2" # There's an assumption here that filenames don't have spaces (or other such # characters) as the image format prohibits that and I don't want to deal with # such issues right now. images="$(find "$src" -maxdepth 1 -mindepth 1 -type d -printf '%f\n')" if [ -z "$images" ] then echo 'No images found,' >&2 exit 3 fi returncode=0 for image in $images do tags="$(find "$src/$image" -maxdepth 1 -mindepth 1 -type f -name '*.tar' -printf '%f\n' | sed 's/\.tar$//g')" if [ -z "$tags" ] then echo "No tags found for image $image, skipping." >&2 continue fi for tag in $tags do echo "Restoring $image:$tag" >&2 if skopeo copy "docker-archive://$src/$image/$tag.tar" "docker://$registry/$image:$tag" then echo "Restore finished successfully." >&2 else echo "Restore failed, continuing with other image." >&2 returncode=1 fi done done if [ "$returncode" -gt 0 ] then echo 'Restoration failed for some images.' fi exit "$returncode" Loading
backup/Dockerfile +1 −0 Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ FROM docker.io/library/alpine:3.14 RUN echo 'https://dl-cdn.alpinelinux.org/alpine/edge/testing' >> /etc/apk/repositories && \ echo 'https://dl-cdn.alpinelinux.org/alpine/edge/community' >> /etc/apk/repositories && \ apk add --update --no-cache \ findutils \ skopeo \ reg \ ; Loading
backup/backup +4 −1 Original line number Diff line number Diff line Loading @@ -17,6 +17,8 @@ then exit 1 fi command -v skopeo >/dev/null || { echo 'skopeo is missing.' >&2; exit 2; } registry="$1" dest="$2" Loading Loading @@ -44,6 +46,7 @@ NR>2 { } } END { exit retruncode if ( exitcode == 1) print "Backup failed for some images." exit exitcode } '
backup/restore +61 −0 Original line number Diff line number Diff line #!/bin/sh set -eu usage() { echo "$0: BACKUP_SOURCE REGISTRY_DOMAIN" } if [ "${1:-}" = -h ] || [ "${1:-}" = --help ] then usage exit 0 fi if [ "$#" -ne 2 ] then usage exit 1 fi command -v skopeo >/dev/null || { echo 'skopeo is missing.' >&2; exit 2; } src="$1" registry="$2" # There's an assumption here that filenames don't have spaces (or other such # characters) as the image format prohibits that and I don't want to deal with # such issues right now. images="$(find "$src" -maxdepth 1 -mindepth 1 -type d -printf '%f\n')" if [ -z "$images" ] then echo 'No images found,' >&2 exit 3 fi returncode=0 for image in $images do tags="$(find "$src/$image" -maxdepth 1 -mindepth 1 -type f -name '*.tar' -printf '%f\n' | sed 's/\.tar$//g')" if [ -z "$tags" ] then echo "No tags found for image $image, skipping." >&2 continue fi for tag in $tags do echo "Restoring $image:$tag" >&2 if skopeo copy "docker-archive://$src/$image/$tag.tar" "docker://$registry/$image:$tag" then echo "Restore finished successfully." >&2 else echo "Restore failed, continuing with other image." >&2 returncode=1 fi done done if [ "$returncode" -gt 0 ] then echo 'Restoration failed for some images.' fi exit "$returncode"