diff --git a/rebuild.sh b/rebuild.sh new file mode 100644 index 0000000..105a254 --- /dev/null +++ b/rebuild.sh @@ -0,0 +1,56 @@ +#!/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