自定义shell工具函数之pull_image()

这是一个名为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 ""
}

这个函数的功能是:

  1. 获取传入的镜像名称,并存储在image变量中。
  2. 获取DOCKER_IMAGE_MIRROR的配置或环境变量,并根据其值设置DOCKER_IMAGE_PREFIX变量。
  3. 获取IMAGE_PULL_POLICY的配置或环境变量。
  4. 使用docker image inspect命令检查镜像是否存在,如果存在则将exits设置为0,否则设置为1。
  5. 如果镜像存在且IMAGE_PULL_POLICY不等于"Always",则打印消息并返回。
  6. 如果需要拉取镜像,则根据DOCKER_IMAGE_PREFIX的值执行docker pull命令,并进行相应的标记和删除操作。
  7. 最后打印空行。

总体来说,这个函数的作用是根据配置和环境变量的设置来拉取镜像,并根据需要进行相应的操作。

相关推荐
运维行者_5 分钟前
理解应用性能监控
大数据·服务器·网络·数据库·人工智能·网络协议·安全
代码AC不AC9 分钟前
【Linux】 信号 及 信号产生
linux·信号·信号产生
zt1985q14 分钟前
本地部署搜索引擎 Yacy 并实现外部访问
运维·服务器·网络·网络协议·搜索引擎
不做无法实现的梦~14 分钟前
桌面图标无法隐藏的解决办法
运维·服务器
量子炒饭大师15 分钟前
【Linux系统编程】Cyberpunk在霓虹丛林中构建堡垒 ——【基础开发工具(1)】一文带你初步了解 软件包管理器 并 快速上手 yum和apt 工具
java·linux·运维·apt·yum·软件包管理器
号码认证服务21 分钟前
企业固话号码认证能覆盖哪些手机品牌?支持华为、小米、OPPO、vivo等机型
服务器·网络·经验分享·python·华为·智能手机·云计算
Azure DevOps24 分钟前
在Azure DevOps Server中实现用户端原地址透传(X-Forward-For)
运维·microsoft·azure·devops
草莓熊Lotso24 分钟前
【CMake】 工程实战:可执行文件从编译、链接到安装全流程深度拆解
linux·运维·服务器·网络·c++·cmake
正点原子26 分钟前
【正点原子Linux连载】 第五章 字符设备驱动开发 摘自【正点原子】ATK-DLRK3568嵌入式Linux驱动开发指南
linux·运维·驱动开发
路由侠内网穿透26 分钟前
本地部署开源 HTTP 服务器 OpenLiteSpeed 并实现外部访问
运维·服务器·网络·网络协议·http·开源