Docker实现镜像批量导出与导入的完整指南
作者:weixin_46244623
这篇文章主要为大家详细介绍了如何通过Docker实现镜像批量导出与导入,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
1. 批量保存镜像到.tar文件
#!/bin/bash
# 保存目录
SAVE_DIR=/root/docker_images_backup
mkdir -p $SAVE_DIR
# 获取本地所有镜像列表 (Repository:Tag + IMAGE ID)
docker images --format "{{.Repository}}:{{.Tag}} {{.ID}}" | while read img id; do
# 如果 TAG 是 <none>,使用 IMAGE ID 代替
if [[ $img == *"<none>"* ]]; then
img=$id
fi
# 生成文件名,将 / 和 : 替换为 _
filename=$(echo $img | sed 's/[\/:]/_/g').tar
echo "Saving $img -> $SAVE_DIR/$filename"
# 执行 docker save 导出镜像
docker save -o $SAVE_DIR/$filename $img
done
功能说明:
- 自动处理
<none>标签的镜像。 - 每个镜像导出为独立 tar 文件,命名格式
REPOSITORY_TAG.tar。 - 方便迁移和备份。
2. 批量加载镜像
#!/bin/bash
# 镜像 tar 文件目录
LOAD_DIR=/root/docker_images_backup
# 遍历目录下所有 tar 文件
for tarfile in $LOAD_DIR/*.tar; do
echo "Loading $tarfile ..."
docker load -i $tarfile
done
功能说明:
- 自动加载目录下所有
.tar文件到本地 Docker。 - 可以用于迁移到新服务器或重建环境。
3. 使用示例
保存镜像:
bash save_all_images.sh
在新服务器加载镜像:
bash load_all_images.sh
4.方法补充
下文详细介绍了如何在Docker中批量导出和导入镜像,包括停止和删除容器、查找镜像、创建镜像目录、导出镜像到tar文件以及导入导出的脚本示例。
image_tar为存储镜像目录
删除所有容器
1.首先需要停止所有运行中的容器
docker stopdocker ps -a -q
docker ps -a -q 意思是列出所有容器(包括未运行的),只显示容器编号,其中
- -a : 显示所有的容器,包括未运行的。
- -q : 静默模式,只显示容器编号。
删除所有容器,将上面命令中的 stop 改为 rm 即可:
docker rm docker ps -a -q
删除所有镜像
docker rmi docker images -q
docker images -q 意思是列出本地镜像,只显示镜像 ID;docker rmi 意思是删除本地一个或多个镜像。
按条件删除镜像
删除无标签镜像(即 TAG 为 none 的镜像 dangling image)
docker rmi docker images -q | awk '/^<none>/ { print $3 }'
也可以使用如下命令删除
docker rmi $(docker images -q -f dangling=true)
删除包含某关键字的镜像
docker rmi --force docker images | grep test-api | awk '{print $3}' //其中test-api为关键字
导出镜像
#!/bin/bash
### 批量docker镜像的_脚本
# 获取到 "image:tag" 格式的镜像名
IMG_NAME=`docker images | grep -v TAG | awk '{print $1":"$2}'`
# echo $IMG_NAME | awk '{gsub(/ /,"\n",$0)} {print $0}'
# 如果原本镜像名中存在 "/" 是需要去掉的
# 定义镜像存放目录
DIR="./image_tar"
if [ ! -d "$DIR" ]; then
echo -e "\033[34m${DIR}\033[0m 不存在"
mkdir -p "$DIR"
echo -e "\033[34m${DIR}\033[0m 已创建"
else
echo -e "\033[34m${DIR}\033[0m 已存在"
fi
echo ""
for IMAGE in $IMG_NAME
do
echo -e "正在保存 \033[33m${IMAGE}\033[0m"
SAVE_NAME=`echo $IMAGE | awk -F: '{print $1"_"$2}' | sed 's/\//_/g'`
docker save $IMAGE -o ${DIR}/${SAVE_NAME}.tar
echo -e "已保存到 \033[34m${DIR}/\033[31m${SAVE_NAME}.tar\033[0m"
echo ""
done
导入镜像
#!/bin/bash
# 批量导出docker镜像_在此处填写镜像文件的保存目录
IMAGE_DIR="./image_tar"
for IMAGE in `ls $IMAGE_DIR`
do
echo -e "正在导入镜像 \033[33m$IMAGE\033[0m"
docker load -i ${IMAGE_DIR}/${IMAGE}
echo -e "已成功导入镜像 \033[33m$IMAGE\033[0m"
echo ""
done
到此这篇关于Docker实现镜像批量导出与导入的完整指南的文章就介绍到这了,更多相关Docker镜像导入导出内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
