Skip to content

Instantly share code, notes, and snippets.

@aputs
Last active October 29, 2016 23:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save aputs/c2944bf68dac20367545 to your computer and use it in GitHub Desktop.
Save aputs/c2944bf68dac20367545 to your computer and use it in GitHub Desktop.
#!/bin/bash
set -e
set -o pipefail
function list_tars {
ROOT=$1
TAG=${2:-latest}
BASE=$(sed -e 's/.*{\(".*"\)}.*/\1/g' "${ROOT}/repositories" | sed 's/"//g' | awk -v RS=',' -F: '/^'${TAG}'/ {print $2}')
CUR=$BASE
while [[ -f "${ROOT}/${CUR}/json" ]]; do
PARENT=$(sed -e 's/.*{\(".*"\)}.*/\1/g' ${ROOT}/${CUR}/json | sed 's/"//g' | awk -v RS=',' -F: '/^parent/ {print $2}')
if [[ "${PARENT}" != "" ]]; then
echo ${PARENT}
fi
CUR=${PARENT}
done | tac
echo ${BASE}
}
[[ "$1" == "" ]] && {
echo "please provide docker image to squash!"
exit -1
}
[[ "$2" == "" ]] && {
echo "please provide out folder!"
exit -1
}
OUT=$2
ROOT="${OUT}/.out"
TAG=":${3:-latest}"
mkdir -p "${ROOT}"
docker pull $1$TAG
docker save $1$TAG | tar -C "${ROOT}" -xf-
for p in $(list_tars ${ROOT} $3); do
f="${ROOT}/${p}/layer.tar"
if [[ -f "${f}" ]]; then
tar --numeric-owner -C "${OUT}" -xf "${f}"
fi
done
rm -fr "${ROOT}"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment