|
|
|
@ -56,10 +56,20 @@ function app::dlt::isolate() {
|
|
|
|
|
tar xf "../to_image/${raw_layer}"
|
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
# Create a tarball w/ the isolated files (special find magic to avoid the leading ./ on paths)
|
|
|
|
|
# DOCKER BACKGROUND: When you export an image layer to a tarball, Docker creates
|
|
|
|
|
# special "whiteout" placeholder files to represent files that were deleted in that
|
|
|
|
|
# layer. These files are prefixed with `.wh.`.
|
|
|
|
|
# Due to our shenanigans, we need to handle these manually since we're importing the
|
|
|
|
|
# tarball directly in as a single image, so the whiteout files are ever removed.
|
|
|
|
|
# Instead, let's extract them to a list so we can rm them manually during the build step.
|
|
|
|
|
g::info 'Building white-out list'
|
|
|
|
|
find . -name '.wh.*' > ../whiteout.list
|
|
|
|
|
xargs -a ../whiteout.list rm -f
|
|
|
|
|
|
|
|
|
|
# Create a tarball w/ the isolated files
|
|
|
|
|
g::info 'Creating archive'
|
|
|
|
|
tar cf ../isolated.tar .
|
|
|
|
|
cd ..
|
|
|
|
|
find isolated/ \( -type f -o -type d \) -printf "%P\n" | tar cf isolated.tar -C isolated/ -T -
|
|
|
|
|
|
|
|
|
|
# Do a bit of cleanup
|
|
|
|
|
rm -rf to_image from_image isolated
|
|
|
|
@ -72,7 +82,7 @@ function app::dlt::isolate() {
|
|
|
|
|
docker image import isolated.tar "$as_image" > /dev/null
|
|
|
|
|
else
|
|
|
|
|
g::info "Creating image $as_image on top of $from_image"
|
|
|
|
|
dkr::import_fs_as_layer isolated.tar "$from_image" "$as_image"
|
|
|
|
|
dkr::import_fs_as_layer isolated.tar "$from_image" "$as_image" whiteout.list
|
|
|
|
|
fi
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|