fileshare/build.sh
2025-08-10 12:57:17 +08:00

149 lines
3.8 KiB
Bash
Executable File

#!/bin/bash
# Docker镜像构建脚本 (支持阿里云加速)
set -e
echo "=== 文件传输服务 Docker 构建脚本 ==="
echo
# 默认配置
IMAGE_NAME="fileshare"
TAG="latest"
DOCKERFILE="Dockerfile"
USE_ALIYUN="false"
PUSH_TO_REGISTRY="false"
REGISTRY=""
# 解析命令行参数
while [[ $# -gt 0 ]]; do
case $1 in
--aliyun)
USE_ALIYUN="true"
DOCKERFILE="Dockerfile.multi"
echo "✅ 启用阿里云镜像加速"
shift
;;
--name)
IMAGE_NAME="$2"
shift 2
;;
--tag)
TAG="$2"
shift 2
;;
--push)
PUSH_TO_REGISTRY="true"
shift
;;
--registry)
REGISTRY="$2"
shift 2
;;
-h|--help)
echo "使用方法: $0 [选项]"
echo
echo "选项:"
echo " --aliyun 使用阿里云镜像加速"
echo " --name IMAGE 指定镜像名称 (默认: fileshare)"
echo " --tag TAG 指定镜像标签 (默认: latest)"
echo " --push 构建后推送到镜像仓库"
echo " --registry URL 指定镜像仓库地址"
echo " -h, --help 显示帮助信息"
echo
echo "示例:"
echo " $0 # 基础构建"
echo " $0 --aliyun # 使用阿里云加速"
echo " $0 --name myapp --tag v1.0.0"
echo " $0 --aliyun --push --registry registry.cn-hangzhou.aliyuncs.com/myname"
exit 0
;;
*)
echo "❌ 未知选项: $1"
echo "使用 $0 --help 查看帮助"
exit 1
;;
esac
done
# 完整镜像名
FULL_IMAGE_NAME="${REGISTRY:+$REGISTRY/}${IMAGE_NAME}:${TAG}"
echo "📋 构建配置:"
echo " - 镜像名称: $FULL_IMAGE_NAME"
echo " - Dockerfile: $DOCKERFILE"
echo " - 阿里云加速: $USE_ALIYUN"
echo " - 推送镜像: $PUSH_TO_REGISTRY"
echo
# 检查Dockerfile是否存在
if [ ! -f "$DOCKERFILE" ]; then
echo "❌ Dockerfile不存在: $DOCKERFILE"
exit 1
fi
# 检查Docker是否运行
if ! docker info >/dev/null 2>&1; then
echo "❌ Docker未运行或无权限访问"
exit 1
fi
# 构建镜像
echo "🔨 开始构建镜像..."
echo
if [ "$USE_ALIYUN" = "true" ]; then
# 使用阿里云加速构建
docker build \
--file "$DOCKERFILE" \
--tag "$FULL_IMAGE_NAME" \
--build-arg PIP_INDEX_URL=https://mirrors.aliyun.com/pypi/simple/ \
--build-arg PIP_TRUSTED_HOST=mirrors.aliyun.com \
--progress=plain \
.
else
# 标准构建
docker build \
--file "$DOCKERFILE" \
--tag "$FULL_IMAGE_NAME" \
--progress=plain \
.
fi
if [ $? -eq 0 ]; then
echo
echo "✅ 镜像构建成功: $FULL_IMAGE_NAME"
# 显示镜像信息
echo
echo "📊 镜像信息:"
docker images "$FULL_IMAGE_NAME" --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}\t{{.CreatedSince}}"
# 推送镜像
if [ "$PUSH_TO_REGISTRY" = "true" ]; then
echo
echo "📤 推送镜像到仓库..."
docker push "$FULL_IMAGE_NAME"
if [ $? -eq 0 ]; then
echo "✅ 镜像推送成功"
else
echo "❌ 镜像推送失败"
exit 1
fi
fi
echo
echo "🚀 运行命令:"
echo " docker run -d -p 8000:8000 --name fileshare $FULL_IMAGE_NAME"
echo
echo "🐳 或使用docker-compose:"
if [ "$USE_ALIYUN" = "true" ]; then
echo " docker-compose -f docker-compose.aliyun.yml up -d"
else
echo " docker-compose up -d"
fi
else
echo "❌ 镜像构建失败"
exit 1
fi