这是一个名为pull_image的Shell脚本函数。让我来解释一下这个函数的功能:
bash
function pull_image() {
image=$1
DOCKER_IMAGE_MIRROR=$(get_config_or_env 'DOCKER_IMAGE_MIRROR')
if [[ "${DOCKER_IMAGE_MIRROR}" == "1" ]]; then
if [[ "$(uname -m)" == "x86_64" ]]; then
DOCKER_IMAGE_PREFIX="swr.cn-north-1.myhuaweicloud.com"
fi
if [[ "$(uname -m)" == "aarch64" ]]; then
DOCKER_IMAGE_PREFIX="swr.cn-north-4.myhuaweicloud.com"
fi
if [[ "$(uname -m)" == "loongarch64" ]]; then
DOCKER_IMAGE_PREFIX="swr.cn-southwest-2.myhuaweicloud.com"
fi
else
DOCKER_IMAGE_PREFIX=$(get_config_or_env 'DOCKER_IMAGE_PREFIX')
fi
IMAGE_PULL_POLICY=$(get_config_or_env 'IMAGE_PULL_POLICY')
if docker image inspect -f '{{ .Id }}' "$image" &> /dev/null; then
exits=0
else
exits=1
fi
if [[ "$exits" == "0" && "$IMAGE_PULL_POLICY" != "Always" ]]; then
echo "[${image}] exist, pass"
return
fi
echo "[${image}] pulling"
if [[ -n "${DOCKER_IMAGE_PREFIX}" && $(image_has_prefix "${image}") == "0" ]]; then
docker pull "${DOCKER_IMAGE_PREFIX}/${image}"
docker tag "${DOCKER_IMAGE_PREFIX}/${image}" "${image}"
docker rmi -f "${DOCKER_IMAGE_PREFIX}/${image}"
else
docker pull "${image}"
fi
echo ""
}
这个函数的功能是:
- 获取传入的镜像名称,并存储在image变量中。
- 获取DOCKER_IMAGE_MIRROR的配置或环境变量,并根据其值设置DOCKER_IMAGE_PREFIX变量。
- 获取IMAGE_PULL_POLICY的配置或环境变量。
- 使用docker image inspect命令检查镜像是否存在,如果存在则将exits设置为0,否则设置为1。
- 如果镜像存在且IMAGE_PULL_POLICY不等于"Always",则打印消息并返回。
- 如果需要拉取镜像,则根据DOCKER_IMAGE_PREFIX的值执行docker pull命令,并进行相应的标记和删除操作。
- 最后打印空行。
总体来说,这个函数的作用是根据配置和环境变量的设置来拉取镜像,并根据需要进行相应的操作。