forked from ArchiveBox/ArchiveBox
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdocker_layers.sh
More file actions
executable file
·48 lines (41 loc) · 1.47 KB
/
docker_layers.sh
File metadata and controls
executable file
·48 lines (41 loc) · 1.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#!/usr/bin/env bash
# This script takes a single Docker image tag (e.g. "ubuntu:latest") as input
# and shows the contents of the filesystem for each layer in the image.
if [ $# -ne 1 ]; then
echo "Usage: $0 <image_tag>"
exit 1
fi
IMAGE=$1
# TMPDIR=$(mktemp -d)
mkdir -p "$PWD/tmp"
TMPDIR="$PWD/tmp"
# Save the Docker image to a tar archive
echo "Saving Docker image '$IMAGE'..."
if ! docker save "$IMAGE" | pv > "${TMPDIR}/image.tar"; then
echo "Failed to save image '$IMAGE'. Make sure the image exists and Docker is running."
rm -rf "${TMPDIR}"
exit 1
fi
cd "${TMPDIR}" || exit 1
# Extract the top-level metadata of the image tar
echo "Extracting image metadata..."
pwd
tar -xzf image.tar
chmod -R 777 .
cd blobs/sha256 || exit 1
# Typically, the saved image will contain multiple directories each representing a layer.
# Each layer directory should have a 'layer.tar' file that contains the filesystem for that layer.
for LAYERFILE in ./*; do
if [ -f "${LAYERFILE}" ]; then
mv "${LAYERFILE}" "${LAYERFILE}.tar"
mkdir -p "${LAYERFILE}"
tar -xzf "${LAYERFILE}.tar" -C "${LAYERFILE}"
rm "${LAYERFILE}.tar"
echo "-----------------------------------------------------------------"
echo "Contents of layer: ${LAYERFILE%/}"
echo "-----------------------------------------------------------------"
# List the files in the layer.tar without extracting
tree -L 2 "${LAYERFILE}"
echo
fi
done