通过sh脚本导入导出docker镜像

导出docker镜像save_docker_images.sh,脚本内容如下:

脚本需要两个参数,第一个参数是导出的tar包所在的目录(必传),第二个参数是要导出的包,支持模糊查询(非必传)例如:./save_all_docker_images.sh /tmp/docker_save mysql

bash 复制代码
#!/bin/bash

# 参数校验
if [ -z "$1" ]; then
    echo "Usage: $0 <export_dir> [filter_pattern]"
    exit 1
fi

export_dir="$1"
filter_pattern="${2:-.*}"  # 默认匹配所有

# 创建目录
mkdir -p "$export_dir" || {
    echo "无法创建目录: $export_dir"
    exit 1
}

# 导出镜像
# docker images --format "table {{.Repository}}\t{{.Tag}}" | 
docker images --format '{{.Repository}}\t{{.Tag}}' | \
awk -v filter="$filter_pattern" '
    BEGIN {FS="\t"}
    NR>1 && $1 ~ filter || $2 ~ filter {
        print $1":"$2
    }
' | while read -r image; do
    echo $image
    repo=$(echo "$image" | cut -d: -f1 | tr '/' '_')
    tag=$(echo "$image" | cut -d: -f2 | tr '/' '_')
    file="$export_dir/${repo}_${tag}.tar"
    
    if [ -f "$file" ]; then
        echo "跳过已存在镜像: $image"
        continue
    fi
    
    echo "导出镜像: $image"
    docker save -o "$file" "$image"
	echo "成功导出镜像: $image"
done

echo "导出完成,保存路径: $export_dir"

导入docker镜像import_docker_images.sh,脚本内容如下:

脚本需要导出的tar包所在的目录作为参数,例如:./docker_import.sh /tmp/docker_save

bash 复制代码
#!/bin/bash

# 参数校验
if [ -z "$1" ]; then
    echo "Usage: $0 <import_dir>"
    exit 1
fi

import_dir="$1"

# 遍历镜像文件
find "$import_dir" -maxdepth 1 -name "*.tar" | while read -r file; do
    # 解析文件名
    filename=$(basename "$file")
    repo_tag=${filename%.tar}
    repo=$(echo "$repo_tag" | cut -d'_' -f1 | tr '_' '/')
    tag=$(echo "$repo_tag" | cut -d'_' -f2-)
		
    # 检查镜像是否存在
    # if docker images -q "$repo:$tag" >/dev/null 2>&1; then
    if  [ -n "$(docker images -q $repo:$tag 2>/dev/null)" ];  then
        echo "跳过已存在镜像: $repo:$tag"
        continue
    fi
    
    echo "导入镜像: $repo:$tag"
    docker load -i "$file"
	echo "导入镜像成功: $repo:$tag"
done

echo "导入完成"
相关推荐
人工智能训练4 小时前
【极速部署】Ubuntu24.04+CUDA13.0 玩转 VLLM 0.15.0:预编译 Wheel 包 GPU 版安装全攻略
运维·前端·人工智能·python·ai编程·cuda·vllm
微露清风5 小时前
系统性学习Linux-第二讲-基础开发工具
linux·运维·学习
阳光九叶草LXGZXJ5 小时前
达梦数据库-学习-48-DmDrs控制台命令(同步之Manager、CPT模块)
linux·运维·数据库·sql·学习
小二李7 小时前
第11章 nestjs服务端开发:登录鉴权
运维·服务器
i建模8 小时前
如何在Arch Linux中重设忘记的root密码
linux·运维·服务器
chatexcel8 小时前
元空AI+Clawdbot:7×24 AI办公智能体新形态详解(长期上下文/自动化任务/工具粘合)
运维·人工智能·自动化
kida_yuan9 小时前
【Linux】运维实战笔记 — 我常用的方法与命令
linux·运维·笔记
小陈phd9 小时前
混合知识库搭建:本地Docker部署Neo4j图数据库与Milvus向量库
数据库·docker·neo4j
Wpa.wk11 小时前
容器编排 - 了解K8s(pod, deployment,service,lable等概念)
经验分享·测试工具·docker·云原生·容器·kubernetes
何中应11 小时前
vmware的linux虚拟机如何设置以命令行方式启动
linux·运维·服务器