当前位置: 首页 > news >正文

docker批量pull/save/load/tag/push镜像shell脚本

目录

注意:

脚本内容

执行效果


注意:

  • 以下脚本为shell脚本通过docker/nerdctl进行镜像独立打包镜像的相关操作
  • 脚本内仓库信息和镜像存取路径需自行更改
  • 需自行创建images.txt并填写值,并且与脚本位于同级目录下
    [root@master01 sulibao]# ll
    -rw-r--r-- 1 root root 3621 Feb 17 15:32 images_pull_save_load_tag_push.sh
    -rw-r--r-- 1 root root  906 Feb 17 15:11 images.txt
  • 该脚本读入单个选项和多个选项,多个选项以英文模式","相隔
  • 该脚本不关系定时任务,使用交互显示输出信息,需要保留日志可自行添加定向

脚本内容

#!/bin/bash#定义原镜像仓库地址、login用户、login密码
registry_host="xxx"
registry_username="xxx"
registry_password="xxx"#定义镜像列表文件,此文件应和脚本位于同级目录下
IMAGE_LIST_FILE="images.txt"#定义镜像存取目录
SAVE_DIR=/data/sulibao/images_$(date +"%Y-%m-%d")#定义push的镜像仓库地址、login用户、login密码
des_registry_host="192.168.2.190:5000"
des_registry_username="xxx"
des_registry_password="xxx"#环境准备,登录原镜像仓库,确认镜像列表文件存在
prepare_environment() {mkdir -p "$SAVE_DIR"local login_output=$(docker login "$registry_host" -u "$registry_username" -p "$registry_password" 2>&1)if [ $? != 0 ]; thenecho "Login error: $login_output"echo "exit!!!"return 1fiif [ ! -f "$IMAGE_LIST_FILE" ]; thenecho "指定的镜像列表文件 $IMAGE_LIST_FILE 不存在,请检查文件和权限!"exit 1elif [ ! -s "$IMAGE_LIST_FILE" ]; thenecho "指定的镜像列表文件 $IMAGE_LIST_FILE 为空,请确保文件包含有效的镜像列表信息!"exit 1fireturn 0
}#拉取镜像
pull_images() {echo "开始拉取镜像!"while IFS= read -r image; doif [[ ! -z "$image" ]]; thenecho "Pulling image: $image"docker pull "$image"if [ $? != 0 ]; thenecho "拉取镜像 $image 失败!"fifidone < "$IMAGE_LIST_FILE"echo "镜像拉取完成!"
}#保存镜像
save_images() {echo "开始保存镜像!"while IFS= read -r image; doif [[ ! -z "$image" ]]; thenlocal image_file=$(echo "$image" | tr '/:' '_')echo "Saving image: $image to $SAVE_DIR/$image_file.tar"docker save -o "$SAVE_DIR/$image_file.tar" "$image"if [ $? != 0 ]; thenecho "保存镜像 $image 失败!"fi#docker rmi "$image"   #此处涉及有一个镜像遍历删除,在保存镜像包后删除镜像,如需要请自行开启fidone < "$IMAGE_LIST_FILE"echo "镜像保存完成!"
}#导入镜像
load_images() {if [ -z "$(find "$SAVE_DIR" -mindepth 1 -print -quit)" ]; thenecho "镜像存取目录 $SAVE_DIR 中未发现镜像文件,请检查路径!"exit 1filocal des_login_output=$(docker login $des_registry_host -u $des_registry_username -p $des_registry_password 2>&1)if [ $? != 0 ]; thenecho "Login error: $des_login_output"echo "exit!!!"exit 1fiecho "开始导入镜像!"for image_file in "$SAVE_DIR"/*.tar; doif [ -f "$image_file" ]; thenecho "正在导入镜像 $image_file"docker load -i "$image_file"if [ $? -ne 0 ]; thenecho "导入镜像 $image_file 失败!"fifidoneecho "所有 .tar 镜像导入完成!"     
}#替换tag并推送到目标镜像仓库
tag_and_push_images() {echo "开始批量修改镜像标签并推送!"while IFS= read -r image; doif [ -n "$image" ]; thenimage_suffix="${image#*/}"new_image="${des_registry_host}/${image_suffix}"echo "正在为 $image 添加新标签 $new_image"docker tag "$image" "$new_image"if [ $? -ne 0 ]; thenecho "为 $image 添加新标签 $new_image 失败!"continuefiecho "正在推送新镜像 $new_image"docker push $new_imageif [ $? -ne 0 ]; thenecho "推送新镜像 $new_image 失败!"fidocker rmi $new_imagefidone < "$IMAGE_LIST_FILE"
}#操作选项
show_menu() {echo "Select the action you want to perform:"echo "1.Pull images."echo "2.Save images to $SAVE_DIR"echo "3.Load images from $SAVE_DIR"echo "4.Replace tag for images and push to target registry"echo "5.Exit."read -p "Please enter the operation number:" choiceIFS=',' read -ra choices <<< "$choice"for choice in "${choices[@]}"; docase $choice in1)pull_images;;2)save_images ;;3)load_images;;4)tag_and_push_images;;5)  echo "You have exited the program."exit 0;; *)echo "Invalid input, please enter option number."show_menu;;esacdone
}prepare_environment
show_menu

执行效果

  • 完整执行过程
[root@master01 sulibao]# bash images_pull_save_load_tag_push.sh 
Select the action you want to perform:
1.Pull images.
2.Save images to /data/sulibao/images_2025-02-17
3.Load images from /data/sulibao/images_2025-02-17
4.Replace tag for images and push to target registry
5.Exit.
Please enter the operation number:1,2,3,4开始拉取镜像!
Pulling image: xxx/nginx:1.26.3
1.26.3: Pulling from xxx/nginx
Digest: sha256:52892d0d4f284526aa1d72ac42fd194c3e887580f60080ded2686d49037c6941
Status: Image is up to date for xxx/nginx:1.26.3
xxx/nginx:1.26.3
......
镜像拉取完成!开始保存镜像!
Saving image: xxx/nginx:1.26.3 to /data/sulibao/images_2025-02-17/xxx_nginx_1.26.3.tar
......
镜像保存完成!开始导入镜像!
正在导入镜像 /data/sulibao/images_2025-02-17/xxx_nginx_1.26.3.tar
Loaded image: xxx/nginx:1.26.3
......
所有 .tar 镜像导入完成!开始批量修改镜像标签并推送!
正在为 xxx/nginx:1.26.3 添加新标签 192.168.2.190:5000/su03/nginx:1.26.3
正在推送新镜像 192.168.2.190:5000/su03/nginx:1.26.3
The push refers to repository [192.168.2.190:5000/su03/nginx]
d9c572c95560: Layer already exists 
8190a7b44dae: Layer already exists 
a676f50129b7: Layer already exists 
867f455c499d: Layer already exists 
043f2436492e: Layer already exists 
263be8d15880: Layer already exists 
7914c8f600f5: Layer already exists 
1.26.3: digest: sha256:ed94607a3100cd7274aa915678f8e6d1effba2919198044654000383d77035ac size: 1778
Untagged: 192.168.2.190:5000/su03/nginx:1.26.3
Untagged: 192.168.2.190:5000/su03/nginx@sha256:ed94607a3100cd7274aa915678f8e6d1effba2919198044654000383d77035ac[root@master01 sulibao]# ll images_2025-02-17/
total 1290584
-rw------- 1 root root 781347328 Feb 17 16:35 xxx_mysql_8.0.41.tar
-rw------- 1 root root 196080128 Feb 17 16:35 xxx_nginx_1.26.3.tar
-rw------- 1 root root 344122368 Feb 17 16:35 xxx_postgresql_13.16.0.tar
  • 若镜像列表文件不存在或为空
[root@master01 sulibao]# bash images_pull_save_load_tag_push.sh 
指定的镜像列表文件 images.txt 不存在,请检查文件和权限![root@master01 sulibao]# bash images_pull_save_load_tag_push.sh 
指定的镜像列表文件 images.txt 为空,请确保文件包含有效的镜像列表信息!
  • 仅仅需要执行load_image时,请确保镜像存取目录中存在有你需要的镜像包。无论是你手动存放的包还是通过脚本pull_and_save的包,需要以".tar"为后缀,若后缀不同,请自行修改脚本。
[root@master01 sulibao]# bash images_pull_save_load_tag_push.sh 
Select the action you want to perform:
1.Pull images.
2.Save images to /data/sulibao/images_2025-02-17
3.Load images from /data/sulibao/images_2025-02-17
4.Replace tag for images and push to target registry
5.Exit.
Please enter the operation number:3
镜像存取目录 /data/sulibao/images_2025-02-17 中未发现镜像文件,请检查路径![root@master01 sulibao]# ll    #此时仅有prepare_environment函数创建的镜像存取目录,实际上无数据,执行失败的
-rw-r--r-- 1 root root 4695 Feb 17 16:45 images_pull_save_load_tag_push.sh
-rw-r--r-- 1 root root  159 Feb 17 16:53 images.txt
drwxr-xr-x 2 root root    6 Feb 17 16:54 images_2025-02-17

相关文章:

docker批量pull/save/load/tag/push镜像shell脚本

目录 注意&#xff1a; 脚本内容 执行效果 注意&#xff1a; 以下脚本为shell脚本通过docker/nerdctl进行镜像独立打包镜像的相关操作脚本内仓库信息和镜像存取路径需自行更改需自行创建images.txt并填写值&#xff0c;并且与脚本位于同级目录下 [rootmaster01 sulibao]# l…...

五十天精通硬件设计第32天-S参数

系列文章传送门 50天精通硬件设计第一天-总体规划-CSDN博客 目录 1. S参数基础 2. S参数在信号完整性中的作用 3. 单端 vs. 差分S参数 4. S参数的关键特性 5. S参数的获取与使用 6. S参数分析中的常见问题 7. 实际案例:PCIe通道分析 8. 工具推荐 总结 信号完整性中…...

6.2.4 基本的数据模型

文章目录 基本的数据模型 基本的数据模型 基本的数据模型包含层次模型&#xff0c;网状模型和关系模型。 层次模型&#xff1a;使用树型结构表示数据间联系。记录间的联系用指针实现&#xff0c;简单高效。但是只能表示1:n的联系&#xff0c;且对插入、删除的限制多。网状模型…...

DeepSeek ,银行营销会被 AIGC 颠覆吗?

AI 让银行营销更智能&#xff0c;但更重要的是“懂客户” AI 在银行营销中的应用已经不仅仅局限于文案生成&#xff0c;而是渗透到了整个营销流程。 据悉&#xff0c;中国银行已经开始利用 AI 大模型构建智能营销助手系统&#xff0c;结合知识图谱和 AI 技术&#xff0c;实现…...

第150场双周赛:好数字之和、分割正方形 Ⅰ、分割正方形 Ⅱ、最短匹配字符串

Q1、好数字之和 1、题目描述 给定一个整数数组 nums 和一个整数 k&#xff0c;如果元素 nums[i] 严格 大于下标 i - k 和 i k 处的元素&#xff08;如果这些元素存在&#xff09;&#xff0c;则该元素 nums[i] 被认为是 好 的。如果这两个下标都不存在&#xff0c;那么 nums…...

HDFS是如何存储和管理大数据

HDFS&#xff08;Hadoop Distributed File System&#xff0c;Hadoop分布式文件系统&#xff09;是专为大数据处理而设计的分布式文件系统&#xff0c;具有高吞吐量、高容错性等特点&#xff0c;适用于大规模数据存储和管理。以下是HDFS存储和管理大数据的详细机制&#xff1a;…...

进阶——第十六届蓝桥杯嵌入式熟练度练习(开发板捕获频率和占空比)

单通道捕获频率 HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_1);HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_1); void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) {if(htim->InstanceTIM2) {cap1HAL_TIM_ReadCapturedValue(&htim2,TIM_CHANNEL_1);TIM2-&…...

智能协同:数据集成平台与DeepSeek驱动的数据分析与智能调度革新

前言 企业面临着海量数据的挑战与机遇。如何高效地整合多源数据、精准分析并智能决策&#xff0c;成为企业提升竞争力的关键。本文解析轻易云数据集成平台与DeepSeek技术结合在数据分析和智能调度方面的创新应用&#xff0c;揭示其为企业带来的高效、智能与精准的业务价值。 …...

Mybatis高级(动态SQL)

目录 一、动态SQL 1.1 数据准备&#xff1a; 1.2 <if>标签 1.3<trim> 标签 1.4<where>标签 1.5<set>标签 1.6 <foreach>标签 1.7<include> 标签 一、动态SQL 动态SQL是Mybatis的强⼤特性之⼀&#xff0c;能够完成不同条件下不同…...

申论对策建议类【2022江苏B卷第一题“如何开展网络直播”】

材料&#xff1a; 近年来&#xff0c;公安交管部门通过网络直播&#xff0c;将执法过程和执法细节以视频形式呈现在公众面前&#xff0c;吸引“围观”、组织点评&#xff0c;让执法过程变成一堂生动的法治公开课。 “各位网友&#xff0c;大家好&#xff01;这里是‘全国交通…...

蓝耘智算携手DeepSeek,共创AI未来

&#x1f31f; 各位看官号&#xff0c;我是egoist2023&#xff01; &#x1f30d; 种一棵树最好是十年前&#xff0c;其次是现在&#xff01; &#x1f680; 今天来学习如何通过蓝耘智算使用DeepSeek R1模型 &#x1f44d; 如果觉得这篇文章有帮助&#xff0c;欢迎您一键三连&a…...

FFmpeg源码:url_find_protocol函数分析

一、url_find_protocol函数的定义 url_find_protocol函数定义在FFmpeg源码&#xff08;本文演示用的FFmpeg源码版本为7.0.1&#xff09;的源文件libavformat/avio.c中&#xff1a; static const struct URLProtocol *url_find_protocol(const char *filename) {const URLProt…...

3D与2D机器视觉机械臂引导的区别

3D与2D机器视觉在机械臂引导中的主要区别如下&#xff1a; 数据维度 2D视觉&#xff1a;仅处理平面图像&#xff0c;提供X、Y坐标信息&#xff0c;无法获取深度&#xff08;Z轴&#xff09;数据。 3D视觉&#xff1a;处理三维空间数据&#xff0c;提供X、Y、Z坐标及物体的姿态…...

C# 添加图标

一、前言 为应用程序添加图标是优化用户界面、提升应用辨识度的重要操作。合适的图标能帮助用户快速识别和区分不同应用&#xff0c;增强应用的易用性和专业性。 本指南旨在为你提供详细、易懂的步骤&#xff0c;教你如何为应用程序的窗体添加图标。从图标素材的获取到具体的…...

基于 Python 和 Django 的北极星招聘数据可视化系统(附源码,部署)

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…...

基于STM32、HAL库、MB85RC16PNF(I2C接口)驱动程序设计

一、概述: MB85RC16PNF 是富士通推出的16Kbit(2K x 8位)FRAM(铁电随机存取存储器),具有非易失性、高读写速度和低功耗特性,常用于数据存储。 二、硬件连接: MB85RC16PNF通过I2C接口与STM32L4XX通信,典型连接如下: VDD:3.3V VSS:GND SDA:I2C数据线 SCL:I2C时钟线…...

【产品推介】可驱动5A负载的降压型DC/DC转换器XBL1663

一、产品简介 采用ESOP-8封装的XBL1663最大可输出5A电流 芯伯乐XBL1663是一款专为降压型DC/DC转换器设计的单片集成电路&#xff0c;具有高转换效率、恒定开关频率工作的特点。内置功率 MOSFET可在 4.5 V-40V 输入电源上实现 5A 峰值输出电流&#xff0c;并具有出色的负载和线…...

20.【线性代数】——坐标系中,平行四边形面积=矩阵的行列式

三 坐标系中&#xff0c;平行四边形面积矩阵的行列式 定理验证 定理 在坐标系中&#xff0c;由向量&#xff08;a,b&#xff09;和向量(c,d)组成平行四边形的面积 矩阵 [ a b c d ] \begin{bmatrix} a&b\\ c&d \end{bmatrix} [ac​bd​]的行列式&#xff0c;即&#x…...

数据库知识速记:事物隔离级别

数据库知识速记&#xff1a;事物隔离级别 一、什么是事物隔离级别&#xff1f; 事物隔离级别&#xff08;Transaction Isolation Levels&#xff09;指的是在数据库管理系统中&#xff0c;不同事物之间在访问共享数据时的隔离程度。隔离级别不仅影响数据的读取和写入行为&…...

重构测试项目为spring+springMVC+Mybatis框架

重构测试项目为springspringMVCMybatis框架 背景 继上次将自动化测试时的医药管理信息系统项目用idea运行成功后&#xff0c;由于项目结构有些乱&#xff0c;一部分代码好像也重复&#xff0c;于是打算重新重构以下该项目&#xff0c;这次先使用springspringMVCMybatis框架 …...

八大网盘直链获取终极指南:LinkSwift一键解锁高速下载新体验

八大网盘直链获取终极指南&#xff1a;LinkSwift一键解锁高速下载新体验 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 …...

OmniFusion多模态翻译系统架构与优化实践

1. 项目背景与核心价值在全球化交流日益频繁的今天&#xff0c;语言障碍仍然是横亘在不同文化群体之间的无形屏障。传统翻译工具往往只能处理单一语言对的转换&#xff0c;且对多模态内容&#xff08;如包含文字、图像、语音的混合内容&#xff09;的支持有限。OmniFusion项目的…...

从万用表到电流探头:聊聊硬件工程师测量电流时,那些关于‘分流’的实战经验与选型避坑

从万用表到电流探头&#xff1a;硬件工程师的电流测量实战指南 电流测量是硬件开发中最基础却又最易出错的环节之一。记得刚入行时&#xff0c;我用普通万用表直接测量电机驱动板的5A工作电流&#xff0c;结果不仅烧毁了表内保险管&#xff0c;还导致电路保护性断电&#xff0c…...

基于规则的数据处理框架Preswald:声明式特征工程与数据转换实践

1. 项目概述与核心价值最近在折腾一个数据驱动的项目&#xff0c;需要把一堆杂乱无章的日志、用户行为数据&#xff0c;甚至是半结构化的JSON文件&#xff0c;整合成一个清晰、可查询、能直接喂给下游分析或机器学习模型的数据集。这听起来像是数据工程师的活儿&#xff0c;但作…...

C2C接口消息结构与流控制机制解析

1. C2C接口消息结构解析C2C&#xff08;Chip-to-Chip&#xff09;接口作为现代异构计算架构中的关键通信通道&#xff0c;其消息结构的精细设计直接决定了跨芯片通信的可靠性和效率。在协议栈中&#xff0c;消息结构通过精确的字段宽度和编码值定义各类控制与数据交互语义&…...

实战指南:基于快马平台开发一个全功能个人技能追踪应用

今天想和大家分享一个很实用的个人技能追踪应用的开发过程。这个项目可以帮助我们记录和管理自己的技能树&#xff0c;特别适合程序员、设计师等需要持续学习新技能的职业人群。下面我会详细介绍整个开发流程和关键实现点。 项目规划与功能设计 首先明确这个技能追踪应用需要…...

多模态语音翻译技术:融合视听提升30%翻译质量

1. 项目背景与核心价值在全球化交流日益频繁的今天&#xff0c;语音翻译技术正在突破传统文本转换的局限。我们团队最近完成的多模态语音翻译项目&#xff0c;通过融合语音、文本、视觉等多维度信息&#xff0c;实现了翻译质量30%以上的提升。这种技术特别适合跨国视频会议、实…...

长时运行智能体的5种设计模式

两年来&#xff0c;“AI 代理"的主导形象一直是一个里面装着聪明循环的聊天窗口。你输入目标&#xff0c;代理调用一些工具&#xff0c;你看着 token 流式输出&#xff0c;当工作耗尽耐心或上下文窗口填满时你停止观看。这个范式带我们走了很远&#xff0c;但它有天花板。…...

事件分割理论优化对话系统长时记忆能力

1. 事件分割理论在对话系统中的应用价值在自然语言处理领域&#xff0c;事件分割理论&#xff08;Event Segmentation Theory&#xff09;正逐渐成为构建高效长对话记忆系统的关键理论基础。这套理论源自认知心理学&#xff0c;解释了人类大脑如何将连续的信息流切分为有意义的…...

如何在3分钟内免费查询手机号码归属地:终极定位工具使用指南

如何在3分钟内免费查询手机号码归属地&#xff1a;终极定位工具使用指南 【免费下载链接】location-to-phone-number This a project to search a location of a specified phone number, and locate the map to the phone number location. 项目地址: https://gitcode.com/g…...