95 lines
2.5 KiB
Bash
Executable File
95 lines
2.5 KiB
Bash
Executable File
#!/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 |