crawler_81tv/scripts/export-docker.sh

95 lines
2.5 KiB
Bash
Raw Normal View History

2025-06-08 16:25:53 +08:00
#!/bin/bash
# 版本号文件
VERSION_FILE=".version"
# 默认镜像名称与build-docker.sh保持一致
DEFAULT_IMAGE_NAME="crawler_zgjs"
# 显示帮助信息
show_help() {
echo "使用方法: $0 [选项]"
echo
echo "选项:"
echo " -h, --help 显示帮助信息"
echo " -v, --version 指定版本号(可选,默认使用.version文件中的版本"
echo " -n, --name 指定镜像名称(可选,默认为 $DEFAULT_IMAGE_NAME"
echo " -o, --output 指定输出文件路径(可选,默认为 {镜像名称}-{版本号}.tar"
echo
echo "示例:"
echo " $0 # 使用默认设置导出镜像"
echo " $0 -v 1.0 # 导出指定版本的镜像"
echo " $0 -n custom_name -v 2.0 # 导出指定名称和版本的镜像"
echo " $0 -o /path/to/image.tar # 指定输出文件路径"
}
# 解析命令行参数
VERSION=""
IMAGE_NAME="$DEFAULT_IMAGE_NAME"
OUTPUT_FILE=""
while [[ $# -gt 0 ]]; do
case $1 in
-h|--help)
show_help
exit 0
;;
-v|--version)
VERSION="$2"
shift 2
;;
-n|--name)
IMAGE_NAME="$2"
shift 2
;;
-o|--output)
OUTPUT_FILE="$2"
shift 2
;;
*)
echo "❌ 错误: 未知参数 $1"
show_help
exit 1
;;
esac
done
# 如果未指定版本,从文件读取
if [ -z "$VERSION" ]; then
if [ -f "$VERSION_FILE" ] && [ -s "$VERSION_FILE" ]; then
VERSION=$(cat "$VERSION_FILE")
else
echo "❌ 错误: 未指定版本且无法从 $VERSION_FILE 读取版本号"
exit 1
fi
fi
# 构建完整的镜像标签
TAG="$IMAGE_NAME:$VERSION"
# 如果未指定输出文件,使用默认命名
if [ -z "$OUTPUT_FILE" ]; then
OUTPUT_FILE="${IMAGE_NAME}-${VERSION}.tar"
fi
# 检查镜像是否存在
if ! docker image inspect "$TAG" >/dev/null 2>&1; then
echo "❌ 错误: 镜像 $TAG 不存在"
echo "提示: 请先使用 build-docker.sh 构建镜像"
exit 1
fi
echo "🚀 开始导出Docker镜像..."
echo "📦 镜像: $TAG"
echo "📄 输出: $OUTPUT_FILE"
# 导出镜像
if docker save -o "$OUTPUT_FILE" "$TAG"; then
echo "✅ 导出成功!"
echo "📁 文件大小: $(du -h "$OUTPUT_FILE" | cut -f1)"
else
echo "❌ 导出失败!"
# 如果导出失败,清理可能部分写入的文件
[ -f "$OUTPUT_FILE" ] && rm "$OUTPUT_FILE"
exit 1
fi