【Docker镜像转存阿里云脚本】

2024-09-03 07:04

本文主要是介绍【Docker镜像转存阿里云脚本】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

脚本

#!/bin/bash# 设置环境变量
ALIYUN_REGISTRY="镜像仓库地址"
ALIYUN_NAME_SPACE="命名空间"
ALIYUN_REGISTRY_USER="用户名"
ALIYUN_REGISTRY_PASSWORD="密码"# 文件路径
IMAGES_FILE_PATH="./images.txt"
READY_IMAGE_FILE="./ready_image.txt"
TEMP_IMAGE_FILE="./temp_images.txt"# 清理上次运行生成的临时文件
echo "清理临时文件..."
rm -f "$TEMP_IMAGE_FILE"# 重启Docker服务
echo "重启Docker服务..."
sudo service docker restart# 设置Docker Buildx
echo "设置Docker Buildx..."
docker buildx create --use# 登录阿里云Docker镜像仓库
echo "登录阿里云Docker镜像仓库..."
docker login -u "$ALIYUN_REGISTRY_USER" -p "$ALIYUN_REGISTRY_PASSWORD" "$ALIYUN_REGISTRY" || {echo "登录失败,请检查用户名和密码。"exit 1
}# 检查并创建 ready_image.txt 文件
touch "$READY_IMAGE_FILE"# 过滤需要处理的镜像,忽略注释行和空行
echo "过滤需要处理的镜像..."
grep -Fvx -f "$READY_IMAGE_FILE" "$IMAGES_FILE_PATH" | grep -Ev '^\s*$|^\s*#' > "$TEMP_IMAGE_FILE"# 检查 temp_images.txt 是否为空
if [ ! -s "$TEMP_IMAGE_FILE" ]; thenecho "没有需要处理的镜像。"exit 0
fi# 统计待处理的镜像数量
total=$(grep -c . "$TEMP_IMAGE_FILE")
current=0echo "开始处理未处理的镜像,共计 $total 个镜像..."
while IFS= read -r image_name || [ -n "$image_name" ]; docurrent=$((current + 1))echo "处理镜像 $current/$total: $image_name"# 拉取镜像echo "拉取镜像: $image_name"docker pull "$image_name"echo "镜像已拉取: $image_name"# 处理镜像信息platform=$(echo "$image_name" | awk -F'--platform[ =]' '{print $2}' | awk '{print $1}')if [[ -n "$platform" && "$platform" == *"/"* ]]; thenplatform_prefix="${platform//\//_}_"elseplatform_prefix=""fiimage=$(echo "$image_name" | awk '{print $NF}')image_name_tag=$(echo "$image" | awk -F'/' '{print $NF}' | awk -F'@' '{print $1}')image_name=$(echo "$image_name_tag" | awk -F':' '{print $1}')name_space=$(echo "$image" | awk -F'/' '{print $(NF-1)}')name_space_prefix=""if [[ -n "${duplicate_images[$image_name]}" && -n "$name_space" ]]; thenname_space_prefix="${name_space}_"fi# 构建新镜像标签new_image="$ALIYUN_REGISTRY/$ALIYUN_NAME_SPACE/${platform_prefix}${name_space_prefix}${image_name_tag}"echo "镜像重命名:$new_image"# 推送镜像echo "推送镜像: $new_image"docker tag "$image" "$new_image"docker push "$new_image"echo "镜像已推送: $new_image"# 清理镜像echo "清理镜像: $new_image"docker rmi "$new_image"echo "镜像已清理: $new_image"# 记录已处理的镜像echo "$image_name" >> "$READY_IMAGE_FILE"echo "完成镜像处理 $current/$total: $image_name"echo "----------------------------------------"done < "$TEMP_IMAGE_FILE"# 清理临时文件
rm -f "$TEMP_IMAGE_FILE"
echo "清理原始镜像"
docker image prune -a -fecho "所有镜像处理完成,共计 $total 个镜像。"

镜像列表示例

# MySQL
mysql
mysql:5.7
mysql:8

这篇关于【Docker镜像转存阿里云脚本】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1132356

相关文章

redis中使用lua脚本的原理与基本使用详解

《redis中使用lua脚本的原理与基本使用详解》在Redis中使用Lua脚本可以实现原子性操作、减少网络开销以及提高执行效率,下面小编就来和大家详细介绍一下在redis中使用lua脚本的原理... 目录Redis 执行 Lua 脚本的原理基本使用方法使用EVAL命令执行 Lua 脚本使用EVALSHA命令

Windows Docker端口占用错误及解决方案总结

《WindowsDocker端口占用错误及解决方案总结》在Windows环境下使用Docker容器时,端口占用错误是开发和运维中常见且棘手的问题,本文将深入剖析该问题的成因,介绍如何通过查看端口分配... 目录引言Windows docker 端口占用错误及解决方案汇总端口冲突形成原因解析诊断当前端口情况解

Java使用ANTLR4对Lua脚本语法校验详解

《Java使用ANTLR4对Lua脚本语法校验详解》ANTLR是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件,下面就跟随小编一起看看Java如何使用ANTLR4对Lua脚本... 目录什么是ANTLR?第一个例子ANTLR4 的工作流程Lua脚本语法校验准备一个Lua Gramm

springboot整合阿里云百炼DeepSeek实现sse流式打印的操作方法

《springboot整合阿里云百炼DeepSeek实现sse流式打印的操作方法》:本文主要介绍springboot整合阿里云百炼DeepSeek实现sse流式打印,本文给大家介绍的非常详细,对大... 目录1.开通阿里云百炼,获取到key2.新建SpringBoot项目3.工具类4.启动类5.测试类6.测

Android Studio 配置国内镜像源的实现步骤

《AndroidStudio配置国内镜像源的实现步骤》本文主要介绍了AndroidStudio配置国内镜像源的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、修改 hosts,解决 SDK 下载失败的问题二、修改 gradle 地址,解决 gradle

Docker镜像修改hosts及dockerfile修改hosts文件的实现方式

《Docker镜像修改hosts及dockerfile修改hosts文件的实现方式》:本文主要介绍Docker镜像修改hosts及dockerfile修改hosts文件的实现方式,具有很好的参考价... 目录docker镜像修改hosts及dockerfile修改hosts文件准备 dockerfile 文

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

Docker镜像pull失败两种解决办法小结

《Docker镜像pull失败两种解决办法小结》有时候我们在拉取Docker镜像的过程中会遇到一些问题,:本文主要介绍Docker镜像pull失败两种解决办法的相关资料,文中通过代码介绍的非常详细... 目录docker 镜像 pull 失败解决办法1DrQwWCocker 镜像 pull 失败解决方法2总

通过Docker Compose部署MySQL的详细教程

《通过DockerCompose部署MySQL的详细教程》DockerCompose作为Docker官方的容器编排工具,为MySQL数据库部署带来了显著优势,下面小编就来为大家详细介绍一... 目录一、docker Compose 部署 mysql 的优势二、环境准备与基础配置2.1 项目目录结构2.2 基

关于Docker Desktop的WSL报错问题解决办法

《关于DockerDesktop的WSL报错问题解决办法》:本文主要介绍关于DockerDesktop的WSL报错问题解决办法的相关资料,排查发现是因清理%temp%文件夹误删关键WSL文件,... 目录发现问题排查过程:解决方法其实很简单:重装之后再看就能够查到了:最后分享几个排查这类问题的小www.cp