加载离线镜像包:在线镜像离线为tar包、tar离线镜像包加载并根据imageId打tag

第一步:在线环境压缩离线镜像:

需要两个文件,第一个是脚本文件image_offline_load.sh脚本,第二个是image_list.txt 按行 存放需要离线的镜像名称

./image_offline_load.sh save image_list.txt output.tar

在这里插入图片描述

第二步:在离线环境中加载离线镜像并打tag:

需要四个文件,第一个是第一步生成的压缩包output.tar,第二个是脚本文件image_offline_load.sh脚本,第三个是image_list.txt 按行 存放需要离线的镜像名称,第四个是第一步生成的 imageid_list.txt 存放离线的镜像id

./image_offline_load.sh load output.tar
./image_offline_load.sh tag image_list.txt imageid_list.txt

在这里插入图片描述

脚本文件image_offline_load.sh如下,包括save、load 、tag功能

save <image_list_file> <output_tar_file> 保存镜像到 tar 归档文件"
load <input_tar_file> 加载 tar 归档文件到本地"
tag <image_list_file> <imageid_list_file> 对本地镜像打tag"

#!/bin/bash# 打印帮助信息
print_help() {echo "用法: $0 <操作> <参数1> [<参数2>]"echo "操作:"echo "  save <image_list_file> <output_tar_file>   保存镜像到 tar 归档文件"echo "  load <input_tar_file>                     加载 tar 归档文件到本地"echo "  tag <image_list_file>    <imageid_list_file>    对本地镜像打tag"
}# 记录日志
log() {echo "$(date +'%Y-%m-%d %H:%M:%S') - $1"
}# 参数数量检查
if [ "$#" -lt 2 ]; thenlog "错误:参数不足。"print_helpexit 1
fi# 参数1: save / load
operation="$1"# 执行操作前的参数检查
if [ "$operation" == "save" ]; thenif [ "$#" -ne 3 ]; thenlog "错误:'save' 操作需要两个参数。"print_helpexit 1fiinput_file="$2"output_tar="$3"# 检查文件是否存在if [ ! -f "$input_file" ]; thenlog "错误:文件 '$input_file' 不存在。"exit 1fi# 检查输出文件是否存在,如果存在先删除if [ -f "$output_tar" ]; thenlog "删除已存在的输出文件: $output_tar"rm "$output_tar"fi# 检查输出文件是否存在,如果存在先删除if [ -f "imageid_list.txt" ]; thenlog "删除已存在的镜像id文件: imageid_list.txt"rm "imageid_list.txt"fiwhile IFS= read -r line; do# 忽略空白行和以 '#' 开头的注释行if [ -z "$line" ] || [[ "$line" == \#* ]]; thencontinuefiimage_name=$(echo "$line" | awk -F':' '{print $1}')image_tag=$(echo "$line" | awk -F':' '{print $2}')log "拉取镜像image_name: $image_name,image_tag:$image_tag"log "拉取镜像: $line"podman pull "$line"image_tags=$(podman images | grep "$image_name" | awk '{print $2}')image_ids=$(podman images | grep "$image_name" | awk '{print $3}')
read -r -d '' -a image_tags_array <<< "$image_tags"
read -r -d '' -a image_ids_array <<< "$image_ids"length=${#image_tags_array[@]}
for ((i=0; i<$length; i++))
do# 获取数组中的元素tag=${image_tags_array[i]}id=${image_ids_array[i]}log "tag: $tagid: $id"if [ "$tag" == "$image_tag" ]; thenecho  $id >> imageid_list.txtbreakfi# 在这里插入处理标签和ID的代码
donecat imageid_list.txtdone < "$input_file"log "保存镜像到 $output_tar"podman save -o "$output_tar" $(cat imageid_list.txt)log "镜像已成功保存到 $output_tar。"elif [ "$operation" == "load" ]; thenif [ "$#" -ne 2 ]; thenlog "错误:'load' 操作需要一个参数。"print_helpexit 1fiinput_tar="$2"# 检查文件是否存在if [ ! -f "$input_tar" ]; thenlog "错误:文件 '$input_tar' 不存在。"exit 1fi# 获取当前 Podman 存放镜像的目录空间信息store_path=$(podman info --format '{{.Store.GraphRoot}}')available_space=$(df -k "$store_path" | awk 'NR==2 {print $4}')  # 获取可用空间,单位为 KB# 获取要加载的 tar 包大小tar_size=$(du -k "$input_tar" | awk '{print $1}')  # 获取 tar 包大小,单位为 KB# 检查是否有足够的空间容纳 tar 包if [ "$available_space" -lt "$tar_size" ]; thenlog "错误:存放 Podman 镜像的目录空间不足以容纳加载的 tar 包。"exit 1filog "加载镜像: $input_tar"podman load -i "$input_tar"log "镜像已成功加载。"#需要将镜像tag为#podman tag image.cestc.cn/iaas_pub/buildah:20231019 image.ccos.io/iaas_pub/buildah:20231019elif [ "$operation" == "tag" ]; thenif [ "$#" -ne 3 ]; thenlog "错误:'tag' 操作需要2个参数。"print_helpexit 1fiimage_list_file="$2"imageid_list_file="$3"while IFS= read -r line1 <&3 && IFS= read -r line2 <&4; doimage=$(echo "$line1" | awk -F'/' '{print $3}')podman tag "$line2" image.ccos.io/iaas_pub/"$image"done 3< "$image_list_file" 4< "$imageid_list_file"elselog "错误:无效的操作。"print_helpexit 1
fi

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/220429.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python环境——conda环境切换 在特定环境下安装依赖

如下图所示 使用的命令 列出所有环境 conda env list激活特定环境 conda activate pytorch在该环境下安装 pip install tabulate

字符选择的题解

目录 原题描述&#xff1a; 题目描述 样例输入1 样例输出1 样例输入2 样例输出2 题目大意&#xff1a; 主要思路&#xff1a; change的设计&#xff1a; dp的转移&#xff1a; dp初始化&#xff1a; dp的结算&#xff1a; 注意事项&#xff1a; 代码&#xff08;有…

linux下部署东方通

第一步&#xff1a;安装jdk&#xff0c;此处不做过多介绍 第二步&#xff1a;东方通安装 1、下载东方通&#xff0c;建议去官网进行下载压缩包&#xff0c;同时下载授权文件&#xff01; 2、将压缩包上传至linux相对目录下进行解压 unzip Install_TW6.1.5.8_Enterprise_Lin…

计算机操作系统-第十五天

目录 线程的状态与转换 线程的组织与控制 本节思维导图 线程的状态与转换 线程的状态转换与进程的状态转换是一样的 线程的组织与控制 进程的控制块叫做PCB&#xff0c;线程的控制块叫做TCB 堆栈指针可以找到线程的堆栈在内存中的哪个位置&#xff0c;所以不需要保存堆栈…

Android多进程和跨进程通讯方式

前言 我们经常开发过程中经常会听到线程和进程&#xff0c;在讲述Android进程多进程前我打算先简单梳理一下这俩者。 了解什么是进程与线程 进程&#xff1a; 系统中正在运行的一个应用程序&#xff0c;某个程序一旦运行就是一个进程&#xff0c;是资源分配的最小单位&#…

SAP ABAP给销售订单添加抬头、行项目文本

SAP ABAP给销售订单添加抬头、行项目文本 第一步&#xff1a;创建文本ID 1&#xff0c;通过SE75&#xff0c;新键文本对象的文本ID 2&#xff0c;2 &#xff0c;找到对象VBBK 销售 标题文件 3&#xff0c;点击文本IDS 4&#xff0c;进去后新建文本ID 第二步&#xff1a;通过…

使用Visual Studio(VS)创建空项目的Win32桌面应用程序【main函数入口变WinMain】

前言 在Visual Studio中直接新建Windows桌面应用程序会有很多多余的代码生成&#xff0c;本文将提供从空项目创建Win32项目的方法&#xff0c;解决新建空项目直接使用WinMain代码编译报错的问题 例如&#xff1a;LNK2019 &#xff1a;无法解析的外部符号 参考博客&#xff1…

ChibiOS简介4/5

ChibiOS简介4/5 1. 源由2. ChibiOS基础知识4/52.13 Chapter 13 - RT Synchronous Messages2.13.1 Basic concepts2.13.2 APIs 2.14 Chapter 14 - RT Events2.14.1 Basic concepts2.14.1.1 Events2.14.1.2 Operations 2.14.2 APIs 2.15 Chapter 15 - RT Debug2.15.1 Compile Tim…

without explicit opt-in, is unsupported. Switch Maven repository ‘maven8

Using insecure protocols with repositories, without explicit opt-in, is unsupported. Switch Maven repository maven8 大概意思是 不支持对存储库使用不安全的协议.看下maven库&#xff0c;把http开头的改成https就好了。

B站武sir-django教程(1)

day15 初识Django Python知识点&#xff1a;函数、面向对象。前端开发&#xff1a;HTML、CSS、JavaScript、jQuery、BootStrap。MySQL数据库。Python的Web框架&#xff1a; Flask&#xff0c;自身短小精悍 第三方组件。Django&#xff0c;内部已集成了很多组件 第三方组件。…

Restormer技术点小结

1. 解决cnn的不足&#xff1a; 1&#xff09;感受野有限 2&#xff09;输入尺寸固定 2. 解决transform的不足&#xff1a; 1&#xff09;计算复杂度随着空间分辨率的增加而二次增长 3. 优势结构&#xff1a;MDTA(Multi-Dconv Head Transposed Attention)和GDFN( Gated-Dco…

Sentinel使用详解

组件简介 Sentinel是阿里开源的一套用于服务容错的综合性解决方案。它以流量为切入点&#xff0c;从流量控制、熔断降级、系统负载保护等多个维度来保护服务的稳定性。Sentinel承接了阿里巴巴近10年的双十一大促流量的核心场景&#xff0c;例如秒杀、消息削峰填谷、集群流量控…

C语言 内存操作函数 +内存分区

内存操作函数 memset() //memset 函数将指定内存区域 ptr 开始的 num 个字节设置为 value。 void *memset(void *ptr, int value, size_t num);参数&#xff1a;ptr&#xff1a;指向要填充的内存区域的指针。value&#xff1a;要填充的值&#xff0c;以整数形式传递。num&…

20-11版本AUTOSAR_PRS_LogAndTraceProtocol文档翻译

1简介和概述 本协议规范规定了AUTOSAR协议Dlt的格式、消息序列和语义。 该协议允许将诊断、日志和跟踪信息发送到通信总线上。 因此&#xff0c;Dlt模块从应用程序或其他软件模块收集调试信息&#xff0c;向调试信息添加元数据&#xff0c;并将其发送到通信总线。 此外&#x…

软件设计师——信息安全(一)

&#x1f4d1;前言 本文主要是【信息安全】——软件设计师——信息安全的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304…

华为OD试题五(数列描述、矩阵最大值、数据分类)

1. 数列描述 示例代码&#xff1a; # 核心 从第一项 推 第N项目 # 第一项 a0 1 # 推到 第N项 N 4 def fun(a0):# 计算每一项的具体值result left 0cursor 0while cursor < len(a0):if a0[cursor] ! a0[left]:count cursor -leftresult "{}{}".format(str(…

面相对象开发的原则

1、开闭原则 对修改关闭&#xff0c;对扩展打开。 2、里氏替换原则 子类继承父类的方法时&#xff0c;不可重写父类的方法。 如果重写了父类的方法会导致整个继承体系比较差&#xff0c;特别是运用多态比较平凡时&#xff0c;程序运行出错概率较大。 如果出现了违背“里氏替换…

计网Lesson9 - 链路协议和网络概述

文章目录 数据链路层协议Ethernet V2标准Ethernet V2帧格式Ethernet V2帧长度标准以太网帧 MAC 帧协议 PPP 协议PPP 概述PPP 帧 网络层网络层的设计选择 数据链路层协议 Ethernet V2标准 Ethernet V2帧格式 以太网帧格式说明&#xff1a; 6 6 6 字节目标地址 6 6 6 字节源地…

【LeetCode每日一题】1904. 你完成的完整对局数

给你两个字符串 startTime 和 finishTime &#xff0c;均符合 "HH:MM" 格式&#xff0c;分别表示你 进入 和 退出 游戏的确切时间&#xff0c;请计算在整个游戏会话期间&#xff0c;你完成的 完整对局的对局数 。 如果 finishTime 早于 startTime &#xff0c;这表示…

verilog基础,连续赋值之组合逻辑

连续赋值语句可以完成任意组合逻辑&#xff0c;本节对基本的逻辑电路进行测试分析&#xff0c;主要包含一下内容&#xff1a; 1. 反相器 2. 与门 3.与非门 4.或门 5.或非门 6.异或门 7.同或门 verilog实现逻辑操作的算符如下 // ~ .... Invert a single-bit signal…