stream-deploy/docker/media/build-and-push-media.sh

76 lines
2.0 KiB
Bash
Executable File

#!/bin/bash
# 构建并推送 media 镜像到私有仓库
# 使用方法: 在 docker/media 目录下执行 ./build-and-push-media.sh
set -e
# 获取脚本所在目录
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# 项目根目录(脚本所在目录的上两级)
PROJECT_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)"
# 配置变量
REGISTRY="registry.t-aaron.com"
IMAGE_NAME="polaris-media"
VERSION="latest"
PLATFORM="linux/amd64"
DOCKERFILE="Dockerfile.registry"
# 完整镜像名称
FULL_IMAGE_NAME="${REGISTRY}/${IMAGE_NAME}:${VERSION}"
echo "=========================================="
echo "开始构建 ZLMediaKit 镜像"
echo "=========================================="
echo "脚本目录: ${SCRIPT_DIR}"
echo "项目根目录: ${PROJECT_ROOT}"
echo "镜像名称: ${FULL_IMAGE_NAME}"
echo "平台架构: ${PLATFORM}"
echo "Dockerfile: ${SCRIPT_DIR}/${DOCKERFILE}"
echo "=========================================="
# 检查 Dockerfile 是否存在
if [ ! -f "${SCRIPT_DIR}/${DOCKERFILE}" ]; then
echo "错误: 未找到 Dockerfile: ${SCRIPT_DIR}/${DOCKERFILE}"
exit 1
fi
# 检查 ZLM 目录是否存在
if [ ! -d "${PROJECT_ROOT}/ZLM" ]; then
echo "错误: ZLM 目录不存在: ${PROJECT_ROOT}/ZLM"
exit 1
fi
# 检查 ZLM 源码是否完整
if [ ! -d "${PROJECT_ROOT}/ZLM/3rdpart/ZLToolKit/src" ]; then
echo "错误: ZLM 源码不完整,请确保 3rdpart 目录下的依赖库存在"
exit 1
fi
# 检查 buildx 是否可用
if ! docker buildx version &> /dev/null; then
echo "错误: docker buildx 不可用"
echo "请先安装 docker buildx"
exit 1
fi
# 切换到项目根目录作为构建上下文
cd "${PROJECT_ROOT}"
# 构建并推送镜像
echo ""
echo "开始构建镜像..."
docker buildx build \
--platform ${PLATFORM} \
-t ${FULL_IMAGE_NAME} \
-f docker/media/${DOCKERFILE} \
--push \
.
echo ""
echo "=========================================="
echo "构建完成!"
echo "镜像已推送到: ${FULL_IMAGE_NAME}"
echo "=========================================="