#!/bin/bash set -e # 使用说明 usage() { echo "Usage: $0 [VER] [save]" echo "" echo " DIR - Dockerfile 所在目录路径 (必需)" echo " VER - 镜像版本号 (可选, 默认: 1.0.0)" echo " save - 是否保存为 tar 文件 (可选)" exit 1 } # 检查 DIR 参数 if [ -z "$1" ]; then echo "Error: 缺少 DIR 参数" usage fi DIR="$1" VER="${2:-1.0.0}" SAVE="$3" # 检查目录是否存在 if [ ! -d "$DIR" ]; then echo "Error: 目录不存在: $DIR" exit 1 fi # 从目录路径提取文件夹名作为镜像名 DIR_NAME=$(basename "$DIR") NAME="timi/${DIR_NAME}" echo "==> 构建镜像: ${NAME}:${VER}" echo "==> Dockerfile 路径: ${DIR}" # 删除已存在的同名镜像 (忽略错误) if docker image inspect "${NAME}:${VER}" > /dev/null 2>&1; then echo "==> 删除已存在的镜像: ${NAME}:${VER}" docker rmi "${NAME}:${VER}" || true fi # 构建镜像 echo "==> 开始构建..." docker build -t "${NAME}:${VER}" "$DIR" echo "==> 构建完成: ${NAME}:${VER}" # 如果指定 save 参数,保存镜像为 tar if [ "$SAVE" = "save" ]; then TAR_FILE="${DIR_NAME}.tar" echo "==> 保存镜像为: ${TAR_FILE}" docker save -o "$TAR_FILE" "${NAME}:${VER}" echo "==> 保存完成: ${TAR_FILE}" fi