64 lines
2.2 KiB
Bash
64 lines
2.2 KiB
Bash
#!/bin/bash
|
||
set -euo pipefail # 更严格的错误检查:未定义变量报错、管道错误传递
|
||
|
||
# 定义日志函数(带时间戳和级别)
|
||
log_info() {
|
||
echo "[$(date +'%Y-%m-%d %H:%M:%S')] [INFO] $1"
|
||
}
|
||
|
||
log_warn() {
|
||
echo "[$(date +'%Y-%m-%d %H:%M:%S')] [WARN] $1" >&2
|
||
}
|
||
|
||
log_error() {
|
||
echo "[$(date +'%Y-%m-%d %H:%M:%S')] [ERROR] $1" >&2
|
||
}
|
||
|
||
# 定义配置常量(等号两侧无空格!集中管理,便于修改)
|
||
IMAGE_NAME="asset-assistant-frontend-system"
|
||
IMAGE_TAG="1.0.0"
|
||
FULL_IMAGE="${IMAGE_NAME}:${IMAGE_TAG}"
|
||
DOCKERFILE_PATH="./Dockerfile"
|
||
SERVICE_NAME="asset-assistant-frontend" # 服务容器名称,便于管理
|
||
HOST_PORT=8080 # 主机映射端口
|
||
CONTAINER_PORT=80 # 容器内部端口
|
||
|
||
log_info "===== 开始执行构建脚本 ====="
|
||
|
||
# 步骤1:停止并删除现有容器(忽略不存在的情况)
|
||
log_info "检查并停止现有容器: ${SERVICE_NAME}"
|
||
if sudo docker rm -f "${SERVICE_NAME}" >/dev/null 2>&1; then
|
||
log_info "容器 ${SERVICE_NAME} 已停止并删除"
|
||
else
|
||
log_warn "容器 ${SERVICE_NAME} 不存在,跳过删除步骤"
|
||
fi
|
||
|
||
# 步骤2:删除现有镜像(忽略不存在的情况)
|
||
log_info "尝试删除现有镜像: ${FULL_IMAGE}"
|
||
if sudo docker rmi -f "${FULL_IMAGE}" >/dev/null 2>&1; then
|
||
log_info "镜像 ${FULL_IMAGE} 删除成功"
|
||
else
|
||
log_warn "镜像 ${FULL_IMAGE} 不存在或无法删除,跳过删除步骤"
|
||
fi
|
||
|
||
# 步骤3:构建新镜像
|
||
log_info "开始构建新镜像: ${FULL_IMAGE}(Dockerfile位于${DOCKERFILE_PATH})"
|
||
if sudo docker build -t "${FULL_IMAGE}" -f Dockerfile .; then
|
||
log_info "镜像 ${FULL_IMAGE} 构建成功"
|
||
else
|
||
log_error "镜像 ${FULL_IMAGE} 构建失败"
|
||
exit 1
|
||
fi
|
||
|
||
# 步骤4:启动服务
|
||
log_info "启动新容器: ${SERVICE_NAME}(${HOST_PORT}:${CONTAINER_PORT})"
|
||
# 启动容器(后台运行、端口映射、命名容器)
|
||
if sudo docker run -d -p "${HOST_PORT}:${CONTAINER_PORT}" --name "${SERVICE_NAME}" "${FULL_IMAGE}"; then
|
||
log_info "容器 ${SERVICE_NAME} 启动成功,访问地址: http://localhost:${HOST_PORT}"
|
||
else
|
||
log_error "容器 ${SERVICE_NAME} 启动失败"
|
||
exit 1
|
||
fi
|
||
|
||
log_info "===== 构建脚本执行完成 ====="
|