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

一键打包所有docker镜像的脚本

若需批量将本地所有 Docker 镜像打包为 tar 文件,可以编写一个简单的脚本实现。以下是具体方案:

一键打包所有镜像的脚本

创建一个名为 docker-backup-all.sh 的脚本:

bash

#!/bin/bash# 确保以 root 权限运行
if [ "$(id -u)" -ne 0 ]; thenecho "请使用 sudo 运行此脚本"exit 1
fi# 创建备份目录(如果不存在)
BACKUP_DIR="$HOME/docker-images-backup/$(date +%Y%m%d_%H%M%S)"
mkdir -p "$BACKUP_DIR"# 获取所有镜像列表(格式:仓库:标签)
IMAGES=$(docker images --format "{{.Repository}}:{{.Tag}}" | grep -v "<none>")# 遍历镜像并打包
echo "开始打包镜像..."
for IMAGE in $IMAGES; do# 替换非法文件名的字符SAFE_NAME=$(echo "$IMAGE" | tr ':/' '_')TAR_FILE="$BACKUP_DIR/${SAFE_NAME}.tar"echo "正在打包: $IMAGE -> $TAR_FILE"docker save -o "$TAR_FILE" "$IMAGE"if [ $? -ne 0 ]; thenecho "  打包失败: $IMAGE" >&2else# 显示文件大小SIZE=$(du -h "$TAR_FILE" | cut -f1)echo "  已完成,大小: $SIZE"fi
doneecho "镜像打包完成!"
echo "备份文件保存在: $BACKUP_DIR"

使用方法

  1. 保存脚本:将上述代码保存为 docker-backup-all.sh

  2. 赋予执行权限

    bash

    chmod +x docker-backup-all.sh
    
  3. 运行脚本

    bash

    sudo ./docker-backup-all.sh
    
  4. 脚本输出

    plaintext

    开始打包镜像...
    正在打包: nginx:latest -> /root/docker-images-backup/20250730_1430/nginx_latest.tar已完成,大小: 133MB
    正在打包: mysql:8.0 -> /root/docker-images-backup/20250730_1430/mysql_8.0.tar已完成,大小: 548MB
    镜像打包完成!
    备份文件保存在: /root/docker-images-backup/20250730_1430
    

脚本特点

  1. 自动命名:将 : 和 / 替换为 _,避免文件名非法字符
  2. 时间戳目录:每个备份创建独立的时间戳目录,避免覆盖
  3. 错误处理:单个镜像失败不影响其他镜像打包
  4. 进度显示:实时显示打包进度和文件大小

恢复方法

若需恢复镜像,使用以下命令:

bash

docker load -i /path/to/your-image.tar

进阶优化(可选)

  1. 压缩选项:添加 gzip 压缩以减小文件体积:

    bash

    docker save "$IMAGE" | gzip > "$TAR_FILE.gz"
    
  2. 排除特定镜像:在 grep 命令中添加过滤条件:

    bash

    IMAGES=$(docker images --format "{{.Repository}}:{{.Tag}}" | grep -v "<none>" | grep -v "mysql")
    
  3. 并行打包:使用 xargs 并行处理多个镜像(需注意系统资源):

    bash

    echo "$IMAGES" | xargs -I {} -P 4 bash -c 'docker save -o "$HOME/docker-images-backup/$(date +%Y%m%d)/$(echo "{}" | tr ':/' '_').tar" "{}"'
    

这个脚本可以帮助你快速备份所有 Docker 镜像,适用于迁移环境、离线部署或灾难恢复场景。

http://www.dtcms.com/a/307387.html

相关文章:

  • 暑期算法训练.11
  • 【09】大恒相机SDK C#开发 ——库函数 IntPtr ConvertToRGB24详细解释 及 示例
  • 【Linux系统】库的制作与原理
  • 007TG洞察:波场TRON上市观察,Web3流量工具的技术解析与应用
  • 【Linux系列】SSD 与 HDD
  • 学习日志23 python
  • 深度理解 linux 系统内存分配
  • 用 AI 解析采购订单,从上传到自动生成 Draft 订单全流程实战
  • 多种录音笔录音芯片方案推荐
  • 《Java 程序设计》第 17 章 - 并发编程基础
  • MBR与GPT分区表深度解析:硬盘分区该怎么选?
  • CPP学习之继承
  • 《Java 程序设计》第 18 章 - Java 网络编程
  • 常见的中间件漏洞
  • AI IDE+AI 辅助编程-生成的大纲-一般般
  • 设计模式:责任链模式 Chain of Responsibility
  • 排序的演进:从机械齿轮到领域专用芯片加速器的全面综述
  • Centos 7部署.NET 8网站项目
  • 如何在 macOS 上使用 dnsmasq 搭建本地 DNS 缓存/转发
  • 微服务 02
  • 05百融云策略引擎项目交付-laravel实战完整交付定义常量分文件配置-独立建立lib类处理-成功导出pdf-优雅草卓伊凡
  • 深度解析:从零构建跨平台对象树管理系统(YongYong框架——QT对象树机制的现代化替代方案)
  • iOS15及以后国际化如何设置.xcstrings文件默认语言
  • Redis 存在哪些问题
  • [论文阅读] 人工智能 + 软件工程 | KnowledgeMind:基于MCTS的微服务故障定位新方案——告别LLM幻觉,提升根因分析准确率
  • PPT自动化 python-pptx - 8: 文本(text)
  • Cesium 快速入门(八)Primitive(图元)系统深度解析
  • Web开发-PHP应用Cookie脆弱Session固定Token唯一身份验证数据库通讯
  • uniapp 3d模型预览组件 用于3d模型预览 工业配件展示 组件地址
  • 智慧园区系统:未来办公生活的新蓝图