Files
life-echo/api/build.sh
徐在坤 ebfd705b93 feat: 添加Docker和部署配置
- 添加Dockerfile用于容器化部署
- 添加docker-compose.yml用于本地开发环境
- 添加build.sh构建脚本
- 添加README.md项目文档
- 添加API文档
2026-01-18 15:58:05 +08:00

140 lines
3.4 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# Life Echo API Docker 镜像构建脚本
set -e
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 配置
IMAGE_NAME="life-echo-api"
VERSION="${1:-latest}"
REGISTRY="${REGISTRY:-}"
DOCKERFILE="${DOCKERFILE:-Dockerfile}"
BUILD_CONTEXT="${BUILD_CONTEXT:-.}"
# 显示帮助信息
show_help() {
echo "用法: $0 [选项] [版本]"
echo ""
echo "选项:"
echo " -h, --help 显示帮助信息"
echo " -v, --version VER 指定镜像版本(默认: latest"
echo " -r, --registry REG 指定镜像仓库(可选)"
echo " -f, --file FILE 指定Dockerfile路径默认: Dockerfile"
echo " -p, --push 构建后推送到仓库"
echo " -t, --tag TAG 添加额外的标签"
echo ""
echo "示例:"
echo " $0 # 构建 latest 版本"
echo " $0 -v v1.0.0 # 构建 v1.0.0 版本"
echo " $0 -r registry.example.com # 指定镜像仓库"
echo " $0 -v v1.0.0 -p # 构建并推送"
echo ""
}
# 解析参数
PUSH=false
EXTRA_TAGS=()
while [[ $# -gt 0 ]]; do
case $1 in
-h|--help)
show_help
exit 0
;;
-v|--version)
VERSION="$2"
shift 2
;;
-r|--registry)
REGISTRY="$2"
shift 2
;;
-f|--file)
DOCKERFILE="$2"
shift 2
;;
-p|--push)
PUSH=true
shift
;;
-t|--tag)
EXTRA_TAGS+=("$2")
shift 2
;;
*)
if [[ -z "$VERSION" || "$VERSION" == "latest" ]]; then
VERSION="$1"
fi
shift
;;
esac
done
# 构建镜像名称
if [[ -n "$REGISTRY" ]]; then
FULL_IMAGE_NAME="${REGISTRY}/${IMAGE_NAME}:${VERSION}"
else
FULL_IMAGE_NAME="${IMAGE_NAME}:${VERSION}"
fi
echo -e "${GREEN}开始构建 Docker 镜像...${NC}"
echo -e "镜像名称: ${YELLOW}${FULL_IMAGE_NAME}${NC}"
echo -e "Dockerfile: ${YELLOW}${DOCKERFILE}${NC}"
echo -e "构建上下文: ${YELLOW}${BUILD_CONTEXT}${NC}"
echo ""
# 构建镜像
echo -e "${GREEN}执行构建命令...${NC}"
docker build \
-f "${DOCKERFILE}" \
-t "${FULL_IMAGE_NAME}" \
"${BUILD_CONTEXT}"
# 添加额外标签
for tag in "${EXTRA_TAGS[@]}"; do
if [[ -n "$REGISTRY" ]]; then
TAG_NAME="${REGISTRY}/${IMAGE_NAME}:${tag}"
else
TAG_NAME="${IMAGE_NAME}:${tag}"
fi
echo -e "${GREEN}添加标签: ${TAG_NAME}${NC}"
docker tag "${FULL_IMAGE_NAME}" "${TAG_NAME}"
done
# 显示构建结果
echo ""
echo -e "${GREEN}构建完成!${NC}"
echo -e "镜像: ${YELLOW}${FULL_IMAGE_NAME}${NC}"
# 显示镜像信息
echo ""
echo -e "${GREEN}镜像信息:${NC}"
docker images "${FULL_IMAGE_NAME}" --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}\t{{.CreatedAt}}"
# 推送到仓库
if [[ "$PUSH" == true ]]; then
echo ""
echo -e "${GREEN}推送镜像到仓库...${NC}"
docker push "${FULL_IMAGE_NAME}"
for tag in "${EXTRA_TAGS[@]}"; do
if [[ -n "$REGISTRY" ]]; then
TAG_NAME="${REGISTRY}/${IMAGE_NAME}:${tag}"
else
TAG_NAME="${IMAGE_NAME}:${tag}"
fi
docker push "${TAG_NAME}"
done
echo -e "${GREEN}推送完成!${NC}"
fi
echo ""
echo -e "${GREEN}完成!${NC}"