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

备份还原 本地所有的Docker 镜像并且在另一台机器上还原

备份命令 并且显示进度 backup_docker_images.sh

sudo yum install jq
chmod +x backup_docker_images.sh
sudo ./backup_docker_images.sh
#!/bin/bash

# 指定备份目录
backup_dir="/app/dockerImageBackup/Images"

# 创建备份目录,如果不存在的话
mkdir -p $backup_dir

# 获取所有镜像的 ID
image_ids=$(docker images -q)

# 计算镜像的总数
total_images=$(echo $image_ids | wc -w)

# 初始化进度计数器
current_image=1

# 遍历每个镜像
for image_id in $image_ids
do
    # 获取镜像的所有信息
    image_info=$(docker inspect $image_id)

    # 获取镜像的名字和标签
    image_names=$(echo $image_info | jq -r '.[0].RepoTags | join(",")')

    # 如果镜像没有名字或标签,尝试从 RepoDigests 获取
    if [ "$image_names" == "null" ]; then
        image_names=$(echo $image_info | jq -r '.[0].RepoDigests[0]' | cut -d '@' -f1)
    fi

    # 使用 ID 作为文件名
    image_file="$image_id.tar"

    # 打印开始保存的信息
    echo "Saving image $current_image of $total_images: $image_file"

    # 保存镜像到文件
    docker save $image_id -o "$backup_dir/$image_file"

    # 保存镜像信息到文件
    echo $image_info > "$backup_dir/$image_id.json"

    # 打印完成保存的信息
    echo "Saved image $current_image of $total_images: $image_file"

    # 更新进度计数器
    current_image=$((current_image + 1))
done

还原所有的镜像

tar -czf /path/to/app.tar.gz /app
tar -xzf app.tar.gz -C /app -p


 

chmod +x load_docker_images.sh
sudo ./load_docker_images.sh
#!/bin/bash
 
# 指定备份目录
backup_dir="/app/dockerImageBackup/Images"
 
# 遍历备份目录下的所有 .tar 文件
for tar_file in $backup_dir/*.tar
do
    # 获取镜像的 ID
    image_id=$(basename $tar_file .tar)
 
    # 打印开始加载的信息
    echo "Loading image: $image_id"
 
    # 加载镜像
    docker load -i $tar_file
 
    # 打印完成加载的信息
    echo "Loaded image: $image_id"
 
    # 获取镜像的详细信息
    image_info=$(cat "$backup_dir/$image_id.json")
 
    # 获取镜像的名字和标签
    image_names=$(echo $image_info | jq -r '.[0].RepoTags | join(",")')
 
    # 如果镜像没有名字或标签,尝试从 RepoDigests 获取
    if [ -z "$image_names" ]; then
        echo "Image names is null, trying to get from RepoDigests..."
        image_names=$(echo $image_info | jq -r '.[0].RepoDigests[0]' | cut -d '@' -f1)
        echo "Image names from RepoDigests: $image_names"
    fi
 
    # 使用 docker tag 为镜像添加名字和标签
    for image_name in $(echo $image_names | tr "," "\n")
    do
        docker tag $image_id $image_name
        echo "Tagged image: $image_id as $image_name"
    done
done
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version


http://www.kler.cn/news/293780.html

相关文章:

  • 【LeetCode 121】买卖股票的最佳时机
  • 【深入理解SpringCloud微服务】深入理解nacos配置中心(三)——服务端启动与获取配置源码分析
  • UNI-APP 溢出隐藏显示省略号
  • Hive SQL 分组与连接操作详解
  • html css网页制作成品
  • java计算机毕设课设—企业员工信息管理系统(附源码、文章、相关截图、部署视频)
  • 【STM32开发】GPIO最全解析及应用实例
  • Linux磁盘管理(精要)
  • 【数据结构-二维前缀和】力扣1277. 统计全为 1 的正方形子矩阵
  • SQL的高级查询练习知识点(day24)
  • centos8stream 修改为阿里云yum源
  • SQL进阶技巧:如何取时间序列最新完成状态的前一个状态并将完成状态的过程进行合并?
  • DataX用hdfsreader导入或导出hive数据
  • EmguCV学习笔记 C# 第10章 人脸识别
  • BMP280气压传感器详解(STM32)
  • Github优秀开源项目推荐
  • react antd table expandable defaultExpandAllRows 不生效问题
  • 知识付费最新版知识付费做的最好的平台,网创资源知识付费 知识付费网站搭建,搭建知识付费APP平台教学:在线教育系统源码。
  • NGINX 中配置负载均衡器
  • Dance with compiler - EP1
  • 单调栈的实现
  • libvncclient编写多线程qt的VNC客户端
  • Spring Boot 注解探秘:HTTP 请求的魅力之旅
  • docker里修改时间为上海时间
  • 【python】—— Python爬虫实战:爬取珠海市2011-2023年天气数据并保存为CSV文件
  • 保研 比赛 利器: 用AI比赛助手降维打击数学建模
  • SpringMVC基于注解使用:JSON
  • 端口安全老化细节
  • Sentence-BERT实现文本匹配【分类目标函数】
  • Gitlab-ce upgrade 16.0.1 to 17.3.1【Gitlab-ce 16.0.1 升级 17.3.1】