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

将docker容器打包为.tar包

1. 创建打包脚本

#!/bin/bash
# 设置 -e 使得脚本在遇到错误时停止执行
set -e# ============================== 必要的参数 ==============================
exported_container_name="needed_export_container_name_or_id"  # 需要被导出的容器的名称或id
image_save_name="my_custom_image_name:v25.03.03"  # 镜像需要保存的名字和版本号
tar_save_path="./my_custom_image.tar"  # 镜像的tar保存路径
# ========================================================================# 生成基于时间的随机文件夹名
temp_file="tempfile_"$(date +%Y%m%d_%H%M%S.tar)# 在宿主机导出容器文件
echo "[INFO] Step 1/4: Export container..."
docker export "$exported_container_name" > "$temp_file"
echo "[INFO] Step 1/4: Export container completed! "
echo ""# 将容器文件变为镜像
echo "[INFO] Step 2/4: Import image..."
docker import "$temp_file" "$image_save_name"
echo "[INFO] Step 2/4: Import image completed!"
echo ""# 将镜像保存为tar包
echo "[INFO] Step 3/4: Save image..."
docker save -o "$tar_save_path" "$image_save_name"
echo "[INFO] Step 3/4: Save image completed!"
echo ""# 删除多余的tar包
echo "[INFO] Step 4/4: Cleanup temporary files..."
if [ -f "$temp_file" ]; thenrm "$temp_file"echo "[INFO] Step 4/4: Temporary files cleaned up!"
elseecho "[WARNING] Temporary file does not exist, skipping deletion."
fi
echo ""echo "[INFO] The image has been saved in $tar_save_path"docker rmi "$image_save_name"echo "[INFO] The image named $image_save_name has been deleted!"

这里需要注意三个变量需要修改:

  • exported_container_name:需要被导出的容器的名称或id
  • image_save_name:镜像需要保存的名字和版本号
  • tar_save_path:生成的镜像.tar文件保存路径

2. 开始执行

3. 验证.tar包是否可以正常加载为镜像

首先确定我们的要加载的镜像没有存在

docker images

之后我们开始加载镜像:

# 语法
docker load -i <刚才我们打包好的tar包>

4. 验证加载的镜像是否可以正常创建容器

docker run -it --name <容器的名称> <镜像命令:版本/镜像id>
# 示例
docker run -it --name <容器的名称>
http://www.lryc.cn/news/546944.html

相关文章:

  • SYSTEM文件夹下的文件
  • GPPT: Graph Pre-training and Prompt Tuning to Generalize Graph Neural Networks
  • 【SegRNN 源码理解】PMF的多步并行预测
  • 构建自己的AI客服【根据用户输入生成EL表达式】
  • (50)[HGAME 2023 week2]before_main
  • 机器学习数学基础:39.样本和隐含和残差协方差矩阵
  • java之http传MultipartFile文件
  • 深入解析SpringMVC中Http响应的实现机制
  • 构建一个支持精度、范围和负数的-Vue-数字输入框
  • 尚硅谷爬虫note14
  • 1438. 绝对差不超过限制的最长连续子数组
  • ZCC5090EA适用于TYPE-C接口,集成30V OVP功能, 最大1.5A充电电流,带NTC及使能功能,双节锂电升压充电芯片替代CS5090EA
  • Dify 开源大语言模型应用开发平台使用(二)
  • 【LangFuse】数据集与测试
  • 【Python】如何解决Jupyter Notebook修改外部模块后必须重启内核的问题?
  • Redis 篇
  • React + TypeScript 实战指南:用类型守护你的组件
  • 从零开始:Linux环境下如何制作静态库与动态库
  • 【智能体Agent】ReAct智能体的实现思路和关键技术
  • Java进阶:Zookeeper相关笔记
  • QT-绘画事件
  • 鸿蒙NEXT开发-端云一体化开发
  • 大模型——股票分析AI工具开发教程
  • nexus 实现https 私有镜像搭建
  • 颈椎X光数据集(cervical spine X-ray dataset)
  • (动态规划 完全背包 零钱兑换)leetcode 322
  • 【AI大模型】DeepSeek + Kimi 高效制作PPT实战详解
  • Pytorch的一小步,昇腾芯片的一大步
  • rabbitmq-amqp事务消息+消费失败重试机制+prefetch限流
  • 【HarmonyOS Next】自定义Tabs