shell 脚本批量导入、导出docker images

  • 目录: 需要将运行中的docker 容器批量出,并在新的主机上批量导入。
  1. 创建批量导出脚本 export_docker_images.sh
#!/bin/bash

# 检查 Docker 是否在运行
if ! docker info > /dev/null 2>&1; then
  echo "Docker 似乎没有运行。请确保 Docker 正在运行。"
  exit 1
fi

# 获取所有正在运行的容器 ID
container_ids=$(docker ps -q)

if [ -z "$container_ids" ]; then
  echo "没有运行中的 Docker 容器。"
  exit 0
fi

# 导出每个容器的镜像
for container_id in $container_ids; do
  # 获取镜像名称
  image_name=$(docker inspect --format='{{.Config.Image}}' $container_id)

  # 设置导出文件的名称
  # 使用容器ID和镜像名称防止重复
  output_file="${container_id}_$(echo $image_name | sed 's/[^a-zA-Z0-9_.-]/_/g').tar"

  echo "导出镜像 $image_name 到文件 $output_file..."

  # 导出镜像
  docker save -o "$output_file" "$image_name"

  if [ $? -eq 0 ]; then
    echo "镜像 $image_name 成功导出到 $output_file"
  else
    echo "导出镜像 $image_name$output_file 失败"
  fi
done

echo "所有运行中的容器镜像已导出完毕。"
  1. 给脚本添加执行权限:
chmod +x export_docker_images.sh
  1. 运行脚本:
./export_docker_images.sh
  1. 创建批量导入脚本import_docker_images.sh
#!/bin/bash

# 镜像文件存放目录
image_dir="./images"

# 检查目录是否存在
if [ ! -d "$image_dir" ]; then
  echo "目录 $image_dir 不存在。请确保镜像文件存放在正确的目录。"
  exit 1
fi

# 获取目录中所有 tar 文件
image_files=$(ls "$image_dir"/*.tar 2> /dev/null)

# 检查目录中是否有 tar 文件
if [ -z "$image_files" ]; then
  echo "目录 $image_dir 中没有找到任何 tar 文件。"
  exit 0
fi

# 导入每个 tar 文件
for image_file in $image_files; do
  echo "正在导入镜像文件 $image_file..."

  # 导入镜像
  docker load -i "$image_file"

  if [ $? -eq 0 ]; then
    echo "镜像文件 $image_file 导入成功"
  else
    echo "镜像文件 $image_file 导入失败"
  fi
done

echo "所有镜像文件已导入完毕。"
  1. 给脚本添加执行权限:
chmod +x import_docker_images.sh
  1. 运行脚本:
./import_docker_images.sh
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值