|
|
@@ -0,0 +1,88 @@
|
|
|
+#!/bin/bash
|
|
|
+
|
|
|
+# Docker 镜像构建脚本
|
|
|
+# 使用方法: ./build.sh [选项]
|
|
|
+
|
|
|
+IMAGE_NAME="my-fastapi-app"
|
|
|
+TAG="latest"
|
|
|
+DOCKERFILE="Dockerfile"
|
|
|
+
|
|
|
+# 显示帮助信息
|
|
|
+show_help() {
|
|
|
+ echo "Docker 镜像构建脚本"
|
|
|
+ echo ""
|
|
|
+ echo "使用方法: $0 [选项]"
|
|
|
+ echo ""
|
|
|
+ echo "选项:"
|
|
|
+ echo " -n, --name NAME 镜像名称 (默认: $IMAGE_NAME)"
|
|
|
+ echo " -t, --tag TAG 镜像标签 (默认: $TAG)"
|
|
|
+ echo " -f, --file FILE Dockerfile 路径 (默认: $DOCKERFILE)"
|
|
|
+ echo " --no-cache 构建时不使用缓存"
|
|
|
+ echo " -h, --help 显示此帮助信息"
|
|
|
+ echo ""
|
|
|
+ echo "示例:"
|
|
|
+ echo " $0 # 使用默认配置构建"
|
|
|
+ echo " $0 -n myapp -t v1.0 # 指定名称和标签"
|
|
|
+ echo " $0 --no-cache # 不使用缓存构建"
|
|
|
+}
|
|
|
+
|
|
|
+# 解析命令行参数
|
|
|
+while [[ $# -gt 0 ]]; do
|
|
|
+ case $1 in
|
|
|
+ -n|--name)
|
|
|
+ IMAGE_NAME="$2"
|
|
|
+ shift 2
|
|
|
+ ;;
|
|
|
+ -t|--tag)
|
|
|
+ TAG="$2"
|
|
|
+ shift 2
|
|
|
+ ;;
|
|
|
+ -f|--file)
|
|
|
+ DOCKERFILE="$2"
|
|
|
+ shift 2
|
|
|
+ ;;
|
|
|
+ --no-cache)
|
|
|
+ NO_CACHE="--no-cache"
|
|
|
+ shift
|
|
|
+ ;;
|
|
|
+ -h|--help)
|
|
|
+ show_help
|
|
|
+ exit 0
|
|
|
+ ;;
|
|
|
+ *)
|
|
|
+ echo "❌ 未知选项: $1"
|
|
|
+ show_help
|
|
|
+ exit 1
|
|
|
+ ;;
|
|
|
+ esac
|
|
|
+done
|
|
|
+
|
|
|
+# 检查 Dockerfile 是否存在
|
|
|
+if [ ! -f "$DOCKERFILE" ]; then
|
|
|
+ echo "❌ Dockerfile 不存在: $DOCKERFILE"
|
|
|
+ exit 1
|
|
|
+fi
|
|
|
+
|
|
|
+echo "🚀 开始构建 Docker 镜像..."
|
|
|
+echo "📦 镜像: $IMAGE_NAME:$TAG"
|
|
|
+echo "📄 Dockerfile: $DOCKERFILE"
|
|
|
+echo "⏰ 开始时间: $(date)"
|
|
|
+
|
|
|
+# 执行构建命令
|
|
|
+docker build $NO_CACHE -t $IMAGE_NAME:$TAG -f $DOCKERFILE .
|
|
|
+
|
|
|
+# 检查构建结果
|
|
|
+if [ $? -eq 0 ]; then
|
|
|
+ echo ""
|
|
|
+ echo "✅ 镜像构建成功!"
|
|
|
+ echo "📊 镜像信息:"
|
|
|
+ docker images | grep $IMAGE_NAME
|
|
|
+
|
|
|
+ echo ""
|
|
|
+ echo "🎯 下一步操作:"
|
|
|
+ echo " 1. 使用 docker-compose up 启动服务"
|
|
|
+ echo " 2. 或者使用 docker run -p 8000:8000 $IMAGE_NAME:$TAG 运行容器"
|
|
|
+else
|
|
|
+ echo "❌ 镜像构建失败!"
|
|
|
+ exit 1
|
|
|
+fi
|