2020-12-23 18:39:02 +05:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
|
|
|
# The Docker Image Mirror script.
|
|
|
|
WHAT_TO_MIRROR=()
|
2022-06-27 02:06:11 +05:00
|
|
|
DESTINATION_REGISTRY=${REGISTRY}
|
2022-06-27 02:00:19 +05:00
|
|
|
DESTINATION_PROJECT=${DESTINATION_REGISTRY}/containers/mirror
|
2022-06-27 00:10:08 +05:00
|
|
|
USER=${REGISTRY_USER}
|
|
|
|
PASSWORD=${REGISTRY_PASSWORD}
|
2020-12-23 18:39:02 +05:00
|
|
|
|
|
|
|
function mirror() {
|
2022-06-27 12:53:36 +05:00
|
|
|
local image=$1
|
|
|
|
local os_and_arch=$2
|
2020-12-23 18:39:02 +05:00
|
|
|
image_name=$(echo "${image}" | cut -d":" -f 1)
|
|
|
|
image_version=$(echo "${image}" | cut -d":" -f 2)
|
|
|
|
|
2022-06-27 13:07:04 +05:00
|
|
|
echo -n "Mirroring ${image} for '${os_and_arch}'... "
|
|
|
|
|
|
|
|
|
2022-06-27 12:53:36 +05:00
|
|
|
if ! docker pull --platform="${os_and_arch}" "${image}" &> /dev/null; then
|
2022-06-27 00:12:17 +05:00
|
|
|
echo "PULL FAILED"
|
2022-06-27 13:07:04 +05:00
|
|
|
if [ "${os_and_arch/linux\/amd64//}" != "${os_and_arch}" ] ; then
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
return
|
2020-12-23 18:39:02 +05:00
|
|
|
fi
|
|
|
|
|
2022-06-27 01:29:22 +05:00
|
|
|
# shellcheck disable=SC1083
|
|
|
|
image_hash=$(docker images -a | grep "^${image_name}" | grep "${image_version}" | awk {' print $3 '})
|
2022-06-27 13:07:04 +05:00
|
|
|
echo -n "${image_hash} for '${os_and_arch}' received, retag as '${DESTINATION_PROJECT}/${image}'... "
|
|
|
|
|
2020-12-23 18:39:02 +05:00
|
|
|
|
2022-06-27 12:33:03 +05:00
|
|
|
if ! docker tag "${image_hash}" "${DESTINATION_PROJECT}/${image}" &> /dev/null; then
|
2022-06-27 00:12:17 +05:00
|
|
|
echo "TAGGING FAILED"
|
2022-06-27 00:08:44 +05:00
|
|
|
exit 1
|
2020-12-23 18:39:02 +05:00
|
|
|
fi
|
|
|
|
|
|
|
|
echo -n "pushing... "
|
2022-06-27 12:33:03 +05:00
|
|
|
if ! docker push "${DESTINATION_PROJECT}/${image}" &> /dev/null; then
|
2022-06-27 00:12:17 +05:00
|
|
|
echo "FAILED"
|
2022-06-27 00:08:44 +05:00
|
|
|
exit 1
|
2020-12-23 18:39:02 +05:00
|
|
|
fi
|
|
|
|
|
|
|
|
echo "OK"
|
|
|
|
|
2022-06-27 12:33:03 +05:00
|
|
|
docker image rm "${image}" &> /dev/null
|
|
|
|
docker image rm "${DESTINATION_PROJECT}/${image}" &> /dev/null
|
2020-12-23 18:39:02 +05:00
|
|
|
}
|
|
|
|
|
2022-06-27 12:33:03 +05:00
|
|
|
# Starting Docker daemon.
|
|
|
|
/usr/local/bin/dockerd --data-root=/var/lib/docker &
|
|
|
|
|
|
|
|
# Wait for it.
|
|
|
|
echo "Waiting for Docker daemon to start..."
|
|
|
|
while true; do
|
|
|
|
if docker ps &> /dev/null; then
|
|
|
|
break
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
# Load shell files and execute them to get list of mirrorred images.
|
|
|
|
MIRROR_CONFIGS=$(ls ./images/*.sh)
|
|
|
|
# shellcheck disable=SC2068
|
|
|
|
for file in ${MIRROR_CONFIGS[@]}; do
|
|
|
|
echo "Importing ${file}..."
|
|
|
|
# shellcheck disable=SC2086,SC2207,SC2206
|
|
|
|
WHAT_TO_MIRROR=( ${WHAT_TO_MIRROR[@]} $(bash ${file}) )
|
|
|
|
done
|
|
|
|
|
|
|
|
echo "Images to mirror: ${WHAT_TO_MIRROR[*]}"
|
|
|
|
|
2022-06-26 23:53:26 +05:00
|
|
|
# Login to registry.
|
2022-06-27 00:13:31 +05:00
|
|
|
echo "Logging into '${DESTINATION_REGISTRY}' as '${USER}'..."
|
2022-06-27 00:10:08 +05:00
|
|
|
docker login -u "${USER}" -p "${PASSWORD}" "${DESTINATION_REGISTRY}"
|
2022-06-26 23:53:26 +05:00
|
|
|
|
2020-12-23 18:39:02 +05:00
|
|
|
# Mirror images.
|
2022-06-26 23:53:26 +05:00
|
|
|
for image in "${WHAT_TO_MIRROR[@]}"; do
|
2022-06-27 12:53:36 +05:00
|
|
|
mirror "${image}" linux/amd64
|
2022-06-27 13:07:04 +05:00
|
|
|
#mirror "${image}" linux/arm64
|
2020-12-23 18:39:02 +05:00
|
|
|
done
|