Docker-registry+Docker-registry UI 自动拉取镜像到Docker-registry

💥 原因:

  • 最近docker 镜像貌似都拉取不了了,用其他镜像源又网速慢。
  • 所有自己搭建私有docker镜像源,然后自己拉取,自己更新

✅ 搭建私用dockers镜像,并自动更新最新镜像到Docker-registry。

✅ 自动更新最新镜像到Docker-registry脚本。

✅ 使用方法:

  • 在脚本跟目录创建image_list.txt,并把镜像名称写入
  • 更新镜像脚本填入REGISTRY_URL,USERNAME,PASSWORD
  • 执行更新docker 最新镜像,并同步到私用镜像服务(Docker-registry)
#!/bin/bash

# 设置变量
REGISTRY_URL="docker.xxxx.cn"
IMAGE_LIST="image_list.txt"
# 替换为私有镜像仓库用户名
USERNAME="替换为私有镜像仓库用户名"  
# 替换为私有镜像仓库密码或访问令牌
PASSWORD="替换为私有镜像仓库密码或访问令牌"  

# 检查镜像列表文件是否存在
if [ ! -f "$IMAGE_LIST" ]; then
    echo e "\e[1;31m[ERROR]\e[0m 镜像列表文件不存在:$IMAGE_LIST"
    exit 1
fi


# 函数:获取镜像版本号
get_image_version() {
    local image="$1"
    # 使用docker inspect获取镜像版本号
    docker image inspect --format='{{index .RepoDigests 0}}' "$image" | cut -d '@' -f 2
}

# 创建本地镜像的镜像标签
while IFS= read -r image; do
    # 检查是否为空行或注释行
    if [[ -z "$image" || "$image" =~ ^# ]]; then
        continue
    fi

    # 精确查询本地是否存在该镜像并且版本是最新的
    if docker images --format '{{.Repository}}:{{.Tag}}' | grep -q "^$image\$"; then
        echo -e "\e[1;33m[WARNING]\e[0m 本地已存在最新版本的镜像:$image"
    else
        # 拉取最新版本的镜像
        echo -e "\e[1;32m[INFO]\e[0m 拉取最新版本的镜像:$image"
        docker pull "$image"
    fi

done < "$IMAGE_LIST"

# 登录私有镜像仓库
echo "登录私有镜像仓库:$REGISTRY_URL"
docker login -u "$USERNAME" -p "$PASSWORD" "$REGISTRY_URL"

# 推送镜像到私有镜像仓库
while IFS= read -r image; do
    # 检查是否为空行或注释行
    if [[ -z "$image" || "$image" =~ ^# ]]; then
        continue
    fi

    private_image="$REGISTRY_URL/$image"
    
    # 创建镜像标签并输出
    docker tag "$image" "$private_image"
    echo -e "\e[1;32m[INFO]\e[0m 创建镜像标签:$private_image"

    # 推送镜像到私有镜像仓库
    echo -e "\e[1;32m[INFO]\e[0m 推送镜像到私有镜像仓库:$private_image"
    docker push "$private_image"

    # 检查推送结果
    if [ $? -eq 0 ]; then
        echo -e "\e[1;32m[INFO]\e[0m 镜像推送成功:$private_image"
    else
        echo -e "\e[1;31m[ERROR]\e[0m 镜像推送失败:$private_image"
        continue
    fi

    # 删除本地镜像标签
    docker rmi "$private_image"
done < "$IMAGE_LIST"

# 脚本执行完毕,删除本地创建的镜像标签
echo -e "\e[1;31m[警告]\e[0m 脚本执行完毕,删除本地创建的镜像标签。"
docker logout "$REGISTRY_URL"



知识共享许可协议本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。

相关推荐

APITable修改默认端口

APITable老是忘记密码,不得不重新部署,然而apitable端口443和80端口被其他服务占用了。要改下端口。 配置文件在apita ...

暂无评论

目录展开