#!/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